多核还有64位确实已经开始普及了,我却还沉浸在win32下,也该朝“新技术”看看了。之所以加引号,是因为这些提法也确实不新了,都好几年前的事了。自己跟踪技术的反应怎么就那么慢呢?不过看看有些人还沉浸在vc6的开发环境中,真是无限感慨,忠贞之士啊。
看到ATI的一个PPT:Direct3D Multithreading。概述多线程的Direct3d driver的。也不知ATI实现了没有,至少这个PPT是一年前的(March 20, 2006)。
最后一页的内容有些用,讲述在写D3d程序时,为了与多线程Driver有效率的工作,应该注意的一些地方。我也不翻译了,实在不会翻。
How to play nice with MT drivers
• Minimize use of System Memory Vertex Buffers
• Never use DrawPrimitiveUP or DrawIndexedPrimitiveUP
• Avoid placing Vertex Buffers in D3DPOOL_SYSTEMMEM
• Minimize use of D3DUSAGE_DYNAMIC
• Create D3DUSAGE_DYNAMIC VBs with D3DUSAGE_WRITEONLY
• Lock with D3DLOCK_DISCARD or D3DLOCK_NOOVERWRITE
• Group all resource updates (Texture and Vertex) together once per frame
• Beginning or end is fine, just don’t scatter them among drawing calls
• Avoid sparse usage of System Memory Vertex Buffers
• Causes wasteful copies
• Do not use d3d state blocks
• Never a good idea anyway ☺
• Avoid query deletions during drawing
• Eliminate all spin loops
• Sometimes we see these in “frame ahead” limiters or waiting on queries
现在成熟的windows应用软件对多核的响应还是使用多线程,让framework线程安全。我没听说有人在产品中使用OpenMP来提高多核下的性能。反而听说,超线程技术(Hyper-Threading)会导致数据操作的一些隐患,最好在软件中被禁用。原因嘛,自然就是对共用数据同步的问题了。
不知道以后的多核编程会是什么样子,以使用类库为主,扩展编译器,扩展语言,或者会有新的语言?
Herb Sutter对并发(Concurrency)很热心,但愿他能领导vc组做出点有利于Cpp人民的事情来。别在捣腾什么C++/CLI了,能让C++和.net绑一块就足够了,现在已经做到了。