c++ - 我应该并行化哪些循环,外部循环还是内部循环

标签 c++ c multithreading parallel-processing openmp

我正在编写图像处理过滤器,我想使用 openmp 加快计算速度。我的伪代码结构如下:

for(every pixel in the image){
    //do some stuff here
    for(any combination of parameters){
        //do other stuff here and filter
    }
}

代码使用不同的参数过滤每个像素,并选择最佳参数。

我的问题是什么更快:在处理器之间并行化第一个循环,或者按顺序访问像素并并行化不同的参数选择。

我认为这个问题可能是一个更笼统的问题:什么更快,是为每个线程提供大量操作,还是创建许多操作很少的线程。

我现在不关心实现细节,我想我可以用我以前使用 openmp 的专业知识来处理它们。谢谢!

最佳答案

您的目标是将数据平均分配给可用的处理器。您应该使用每个处理器核心一个线程将图像平均分割(外循环)。 试验细粒度和粗粒度并行性,看看哪种方法能提供最好的结果。一旦您的线程数超过可用内核数,您将开始看到性能下降。

关于c++ - 我应该并行化哪些循环,外部循环还是内部循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21855976/

相关文章:

c++ - 指向数组重叠数组末端的指针

c - C 中的 & 和 scanf ?

c - send() 什么时候返回 EWOULDBLOCK?

c++ - 进程间对象传递

multithreading - 其他线程可以间接访问在其自己的线程中运行的托管对象上下文吗?

c++ - 无法打开文件 'dxguid.lib'

c++ STL map迭代器输出十六进制值

c++ - 复制构造函数未被调用

c - 为什么我得到 "floating point exception (core dumped)"?

c - malloc_atfork 内部死锁