gpt4 book ai didi

c++ - parallel_for - 要并行化哪个循环?

转载 作者:行者123 更新时间:2023-11-30 01:53:52 24 4
gpt4 key购买 nike

我有 3 次嵌套循环,而与最内层循环相比,两个外部循环只循环了很少的次数。像这样:

for (int i = 0; i < I; i++) {
for (int j = 0; j < J; j++) {
for (int k = 0; k < K; k++) {

//Do stuff
}
}
}

I ~= J << K,即 I 大致等于 J,但 K 大得多(几千倍)

由于所有数据都是相互独立的,我想使用 ppl.h 库的 parallel_for 将它们并行化。现在问题来了,我要并行化哪个循环?我倾向于最内层的循环,因为它是最大的,但我假设每次外层循环循环时,整个线程开销都会重新开始。那么怎样做更有效率呢?

最佳答案

The question now arises, which loop do I parallelize?

通常,您希望并行化有意义的最外层循环。如果将内部循环并行化,则会引入额外的开销。通过让“循环体”尽可能大,您将获得更好的整体吞吐量。这真的归结为 Amdahl's law - 在这种情况下,安排并行工作项所涉及的开销是不可并行的,因此您执行的工作越多,整体的潜在效率就越低。

风险在于,如果外循环中的项目太少,您最终可能会遇到工作项目无法并行运行的情况,因为在某个点上项目的数量会少于您的处理核心数系统。

如果您的外层循环足以让核心保持忙碌,那么它就是最好的去处 - 特别是如果每​​个循环体中完成的工作量相对一致的话。

关于c++ - parallel_for - 要并行化哪个循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22700446/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com