回路体并联的最佳尺寸
Optimal size of a parallel for loop body
假设你有一个并行的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比第二个更快(平均30毫秒到38毫秒)。但我不擅长对并行算法进行基准测试,所以可能我测量错了。无论如何,不幸的是,我不能为这个观察发布实际的代码示例。
是否有一些经验法则,额外的考虑因素或只是尝试和基准?
这很大程度上取决于你在DoSomething
和DoSomethingElse
中做什么
假设DoSomething
需要从内存中取出一些东西,所以当你在循环中运行它时,对象将在缓存中,但是当你从DoSomethin
切换到DoSomethingElse
时,也需要从内存中取出一些东西,缓存中的对象发生变化,需要从内存中取出它。
还是那句话,我不确定是不是这样,这很大程度上取决于你在这些方法中做什么。乍一看,性能应该没有什么不同
相关文章:
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 在c代码之间共享数据的最佳方式
- 使用std::source_location报告错误的最佳实践
- 派生类销毁的最佳实践是什么
- 将寄存器设计成可由C和C++访问的外设的最佳实践
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- 在C++中向零方向近似的最佳方法
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 检测win32服务创建和删除的最佳方法
- 在reactor中存储eventHandlers的最佳方式是什么
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 在AVX通道中混洗的最佳方式
- 程序顶部的声明与定义(最佳实践)
- 回路体并联的最佳尺寸