【问题标题】:Which library for parallel for-loops that iterate 1M*1k times, OpenMP or boost::thread?哪个库用于迭代 1M*1k 次的并行 for 循环,OpenMP 或 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 倍。

标签: c++ multithreading parallel-processing openmp boost-thread


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢!这对我很有帮助。
  • @lahjaton_j:没问题。不要忘记,如果答案解决了您的问题,您可以将其标记为已接受。
猜你喜欢
  • 2020-07-17
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-31
相关资源
最近更新 更多