gpt4 book ai didi

c++ - 并行 for 循环体的最佳大小

转载 作者:太空宇宙 更新时间:2023-11-04 14:06:15 25 4
gpt4 key购买 nike

假设您有一个并行 for 循环实现,例如ConcRT parallel_for,将所有工作放在一个 for 循环体内总是最好的吗?

举个例子:

for(size_t i = 0; i < size(); ++i)
{
DoSomething(a[i], b[i]);
}
for(size_t i = 0; i < size(); ++i)
{
DoSomethingElse(a[i], b[i]);
}

相比

for(size_t i = 0; i < size(); ++i)
{
DoSomething(a[i], b[i]);
DoSomethingElse(a[i], b[i]);
}

第二种变体是显而易见的方法,但是当涉及到并行处理时,可能还有其他考虑因素?

我刚刚遇到的案例选项 1 使用 parallel_for 时比第二个快(平均约 30 毫秒到约 38 毫秒)。但是我不擅长对并行算法进行基准测试,所以可能我测错了。无论如何,遗憾的是我无法发布此观察的实际代码示例。

是否有一些经验法则、额外的注意事项或只是尝试和基准测试?

最佳答案

这在很大程度上取决于您在 DoSomethingDoSomethingElse 中执行的操作

假设 DoSomething 需要内存中的某些内容,因此当您在循环中运行它时,该对象将在缓存中,但是当您从 DoSomethin 切换时到DoSomethingElse,这也需要从内存中取一些东西,缓存中的对象发生变化,需要从内存中取出。

同样 - 不确定这种情况在很大程度上取决于您在这些方法中所做的事情。乍一看 - 性能上应该没有任何不同

关于c++ - 并行 for 循环体的最佳大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16761941/

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