环形体平行的最佳尺寸

时间:2013-05-26 17:38:31

标签: c++ for-loop concurrency parallel-processing

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

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

我只是将case选项1比使用parallel_for的第二个(平均约30ms到约38ms)更快。但是我对并行算法的基准测试并不擅长,所以也许我测得错了。无论如何,遗憾的是我无法发布此观察的实际代码示例。

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

1 个答案:

答案 0 :(得分:0)

这完全取决于您在DoSomethingDoSomethingElse

中的行为

假设DoSomething需要内存中的内容,所以当你在循环中运行它时,对象将在缓存中,但是当你从DoSomethin切换到DoSomethingElse时,也需要内存中的东西,缓存中的对象发生变化,需要从内存中带来它。

再次 - 不确定这种情况在很大程度上取决于你在这些方法中做了什么。 从一见钟情 - 性能应该没有任何不同