要点:
1. 任务划分,这点最关键。
1.1 对任务做充分理解,分清是数据密集型应用还是计算密集型计算。如果是数据密集型应用,则应该尽量提高总线的使用率(FSB, QPI等);而计算密集型应用,则应该提高CPU的使用率。
1.2 找出尽可能多的并行部分(任务分解,数据分解);
1.3 分析这些并行部分的特点,组成合适的并行任务
2. 资源本地化。尽量使所有的线程可以无条件地并发。
2.1 对于Non-Uniform Memory Access(NUMA) 结构的系统(多CPU的server,带QPI技术的intel多核处理器,带HyperTransport技术的AMD多核处理器),注意内存的分配位置。
3.充分利用Intel/AMD CPU的硬件特征。
3.1 充分利用CPU的本地cache
3.2 防止cache伪共享
3.3 系统内核同步?
3.4 数据密集型计算,注意NUMA特性.
可用技术:
Boost::thread
OpenMP
Intel Thread building block
MPI
语言内建的并行支持 (C#,Java等)
Monday, January 18, 2010
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment