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

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

我想逐个像素地迭代图像,并对每个像素执行 1000 次浮点运算。 你认为我应该为此使用多线程或多处理,即 boost::thread 还是 OpenMP?是否有在这 2 个之间进行选择的经验法则(以获得最快的速度)? 我了解到创建线程或在线程之间切换比创建/切换进程快数倍。另一方面,实现 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
    }
} 

最佳答案

OpenMP 对此绰绰有余,事实上 boost 甚至没有内置的并行循环结构。

Do you think I should use multi-threading or multiprocessing

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

另一个值得关注的替代库是 Intel TBB。

关于c++ - 哪个库用于迭代 1M*1k 次的并行 for 循环,OpenMP 或 boost::thread?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14216335/

相关文章:

c# - 使用从 Win32 API CreateFile(C++、P/Invoke)返回的句柄创建的 FileStream 对象(.NETCF、C#)是否容易发生 .NET 垃圾收集

c++ - 是否有一个用于位操作的(C/C++)库?

c++ - 错误 C2065 和 IntelliSense

mysql - 使用 R doParallel 或 foreach 从 mysql 并行获取数据

r - 是否可以在 Windows 上获得 R 调查包的 `svyby` 函数 multicore= 参数?

java - 并行流中的流操作等到前一个流操作处理完所有元素

c++ - 插入两个相互引用的 SQL 表而无需执行单独的查询?

c# - Task.Run() 如何传递其他线程拥有的对象?

multithreading - 如何在不使用join的情况下向python中的主线程发送信号?

java - 生产者/消费者场景中的双向流