哪个库用于迭代 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?的主要内容,如果未能解决你的问题,请参考以下文章
哪个更好,单 for 循环或双 for 循环迭代二维数组? C++