哪个库用于迭代 1M*1k 次的并行 for 循环,OpenMP 或 boost::thread?

Posted

技术标签:

【中文标题】哪个库用于迭代 1M*1k 次的并行 for 循环,OpenMP 或 boost::thread?【英文标题】:Which library for parallel for-loops that iterate 1M*1k times, OpenMP or boost::thread? 【发布时间】:2013-01-08 13:46:54 【问题描述】:

我想逐个像素地迭代图像,并为每个像素执行 1000 次浮点运算。 您认为我应该使用多线程还是多处理,即为此使用 boost::thread 或 OpenMP?是否有经验法则可以在这两者之间进行选择(以获得最快的速度)? 我知道创建线程或在线程之间切换比创建/切换进程快几倍。另一方面,实现 OpenMP 代码要容易得多。

我现在的解决方案:

#pragma omp parallel for
for(size_t i=0; i<640; ++i) 
    for(size_t j=0; j<480; ++j) 
        // do 1000 float operations
    
 

【问题讨论】:

如果你使用 vs 2012 魔法可能由编译器完成:msdn.microsoft.com/en-us/library/hh872235.aspx 不,我不使用VS。寻找便携式解决方案。 如果可能完全,您希望使用可以在 GPU 上运行的东西,例如 OpenCL、CUDA 或着色器(GLSL 或 HLSL)。对于这样的操作,您可以期望它比您希望在 CPU 上完成的最佳操作快 100 倍。 【参考方案1】:

OpenMP 已经足够了,事实上 boost 甚至没有内置的并行循环结构。

你认为我应该使用多线程还是多处理

虽然 OpenMP 代表 Open MultiProcessing,但它实际上是一个多线程库。

另一个值得一看的库是 Intel TBB。

【讨论】:

谢谢!这对我很有帮助。 @lahjaton_j:没问题。不要忘记,如果答案解决了您的问题,您可以将其标记为已接受。

以上是关于哪个库用于迭代 1M*1k 次的并行 for 循环,OpenMP 或 boost::thread?的主要内容,如果未能解决你的问题,请参考以下文章

OpenMP 无法使用映射迭代器并行化 for 循环

java中for循环和迭代器哪个效率高?

哪个更好,单 for 循环或双 for 循环迭代二维数组? C++

如何使用 OpenMP 通过 C++ std::list 并行化 for 循环?

哪个更有效,for-each 循环还是迭代器?

使用 MPI 在 C++ 中并行 for 循环