仅内部循环并行化

时间:2012-03-07 18:52:42

标签: openmp using parallel-processing

我有一个for循环,执行大约需要16 ms,并且在另一个for循环下有条件地执行500次。

串行代码格式如下:

//Outer for loop
for(i=0;i<500;i++){
//read some entity
//some conditions

// some function calls
    // some nested function calls
         // inner for loop
            for (j=0;some condition;j++){
            // work on the entity read in outer for loop

             }

}

我想并行化内部for循环。是否可以通过使用OpenMP将执行内部for循环所需的时间减少40%,从而减少运行串行代码所需的总时间?

我希望减少总时间来执行代码。在我的情况下,并行外部for循环是不可能的,因为代码被编写为一次只读取一个实体来处理 它在内部循环中。

请帮忙。

谢谢!

1 个答案:

答案 0 :(得分:0)

Openmp可以解决这些小任务的问题。我曾经做过一次在30 fps视频上做5x5内核过滤器。

您应该测试最佳粒度。如果将任务分成两部分,则开销最小,但限制了并行性。如果粒度太高,loop ovrhead会变大,你可能会从不同的内核写入相邻的内存位置,这会破坏缓存性能。

在上面的例子中,我将图像划分为扫描线,每个扫描线都按顺序计算。这很好。