1

假设您有一个并行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]);
}

第二种变体将是显而易见的方法,但是在并行处理方面可能还有其他考虑因素?

我只是用parallel_for的情况选项1比第二个更快(平均约30ms到约38ms)。但是我在对并行算法进行基准测试方面并不擅长,所以也许我测量错了。无论如何,不​​幸的是我不能发布这个观察的实际代码示例。

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

4

1 回答 1

0

这在很大程度上取决于你在做DoSomething什么DoSomethingElse

假设DoSomething需要内存中的某些内容,因此当您在循环中运行它时,该对象将在缓存中,但是当您从 切换DoSomethinDoSomethingElse时,也需要内存中的某些内容,缓存中的对象会发生变化并需要把它从记忆中拿出来。

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

于 2013-05-26T17:51:53.627 回答