我正在编写图像处理过滤器,我想使用 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/