1
4
并行的开销 您的成本模型错误。 理想的并行计算时间为:
哪里
我不确定您是否熟悉OpenMP(尽管知道这是件好事),但就我们的目的而言,它是一种线程模型,它将工作划分为多个线程组。下图显示了与线程团队大小相关的一些命令的开销:
要点是让你的平行性(
事实上,如果你看一下TBB的教程,第3.2.2节(“自动分块”)说:
实现更好的速度 加速这样的代码的最好方法是,只有在操作数量很多的情况下才并行执行这些操作,和/或调整执行这些操作的线程数量,以便每个线程都有足够的工作要做。在TBB中,您可以实现类似的行为,如:
你想要调整的地方
您还可以减少线程数,因为这样可以在一定程度上减少开销:
TBB还执行动态负载平衡(请参阅 here ). 如果您希望循环迭代/任务具有广泛的运行时间分布,那么这很好,但如果预期的运行时间相同,则表示不必要的开销。我不确定TBB是否有静态调度,但它可能值得研究。 如果人们最终没有对TBB做出坚定承诺,那么在OpenMP中,您可以执行以下操作:
|
2
2
广告1)
这是一个很好的例子,细节很重要。
英特尔在将其硬件技术重新构建为发布软件工具方面确实做得很好,这可以得益于他们对自己处理器微体系结构魔术的超详细知识。没有人能够更好地为Intel CPU-s提供支持,也没有人能够轻松地对其进行移植,以便在其他CPU微体系结构上提供任何类似的性能(因此,请小心您的实际CPU,如果它是云抽象的,就越重要) 为什么? overhead-strict Amdahl's Law?为什么?因为这些开销决定的不仅仅是核的数量。
关键是,随着“有用的”有效负载大小越来越小,开销(即使是那些非常小的开销,如在超级优化工具中,如TBB),这些开销总是累积到纯-
因此,随着我们在
广告2)这个是 在上面的操场设置中, 最小痛苦游戏 .
如果有人想加速
如果我们不相信童话故事,那么我们可以考虑使用FPGA进行PoC原型设计,使用ASIC/SoC进行生产级部署。 如果项目的经济性无法处理所有相关成本,请忘记免费获得任何魔法。它的成本。总是但如果你的商业领域或研究基金能够应付,这是一个方向。 另一个好处是:矢量化代码可能会在某些CPU上崩溃 (最好避免这种情况) :在定量建模中,性能就是金钱,所以让我也分享一个最近已知的问题,即微有效载荷的极为严格的性能调整(组装时双手脏)。如果在量化建模工作中进行代码性能优化,希望它可以避免任何不必要的问题:
|
3
2
@Richard给出了正确的答案(TBB教程讨论了计划开销摊销的概念),通常我会将此作为评论,但我想补充一点。 TBB对任务使用“贪婪调度”。如果存在由先前任务的执行创建的任务(从技术上讲,如果任务返回任务指针),则该任务是线程上运行的下一个任务。这有两个好处:
这样做的缺点是,如果您想改变这种行为(以“广度优先”而不是“深度优先”的顺序执行节点),您必须跳过一些障碍。它还将使您在调度开销和位置丢失方面付出代价。 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |
user1700890 · 了解交互式代理Python API中的线程 2 年前 |
AntonBoarf · 为什么要将实例变量指定给局部变量? 2 年前 |
rhymes · 如何让线程操作相同的java列表 2 年前 |