【发布时间】: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