没有从OpenMP获得任何加速

时间:2013-10-12 00:45:30

标签: c++ image-processing openmp

我正在整理一个图像处理程序,我正在使用相对较小的图像(640x480)。串行运行,处理图像需要不到0.1秒,但我需要它更快,因为它以后将采用视频流。

我有两个或三个嵌套for循环,我正在尝试加速,并且我正在尝试使用#pragma omp parallel for。

其中一个for循环的结构如下:

//xLen = 640, yLen = 480
#pragma omp parallel for
for(int y=0;y<yLen;y++) {
    double yR = y/((double)yLen);

    double y1 = dyl*yR+yt_1;
    double y2 = dyr*yR+yt_2;

    double x1 = (y1-yt_1)/ml+xt_1;
    double x2 = (y2-yt_2)/mr+xt_2;


    for(int x=0;x<xLen;x++) {
        double xR = x/((double)xLen);

        double X = ((x2-x1)*xR+x1);
        double Y = ((y2-y1)*xR+y1);

        // Final estimation
        lookup(x,y)[0] = X;
        lookup(x,y)[1] = Y;
    }

}

所有dyl,dyr,yt_1,yt_2,xt_1,xt_2,ml和mr都在上面的代码中定义,并且不会被for循环更改。

对于如此小的循环大小,我是否期望OpenMP过多?

编辑:我已经转换为单循环,仍然无法获得加速。

#pragma omp parallel for
for(int p=0;p<xLen*yLen;p++) {
    int y = p/xLen;
    int x = p%xLen;

    double xR = x/((double)xLen);
    double yR = y/((double)yLen);

    double y1 = dyl*yR+yt_1;
    double y2 = dyr*yR+yt_2;

    double x1 = (y1-yt_1)/ml+xt_1;
    double x2 = (y2-yt_2)/mr+xt_2;

    double X = ((x2-x1)*xR+x1);
    double Y = ((y2-y1)*xR+y1);

    lookup[p] = X;
    lookup[p+xLen*yLen] = Y;            

}

0 个答案:

没有答案