到目前为止,我的经验告诉我,即使使用多核处理器,并行化算法并不总能显着加快速度.事实上,有时它会减慢速度.有哪些好的提示可以通过并行化来大大加快算法的速度?
(当然,考虑到过早优化的警告及其与邪恶的相关性)
为了从并行化中获得最大收益,任务应该能够分解为类似大小的独立(或大部分是如此)的过程 - 粒度块,并且需要很少的数据通信或块之间的同步.
细粒度并行化几乎总是会受到增加的开销的影响,并且无论可用的物理内核数量如何,都将具有有限的加速.
[对此的警告,是那些具有非常大的编号的架构."核心"(例如连接机器64,000个核心).这些非常适合于可以分解为分配给特定拓扑(如矩形网格)的相对简单的动作的计算.