Monday, January 18, 2010

多核、多CPU环境下的程序开发

要点:

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等)