使用openmp

时间:2019-05-03 13:18:21

标签: c++ optimization openmp

我尝试尽可能优化循环,而没有优化,循环看起来像这样:

typedef typename std::make_unsigned< TEMPLATE >::type unsignedType;
unsignedType *pDest = ...;
auto pSrc = function();

for(int i = 0; i < size ; ++i)
        {
            pDest[i] = static_cast< unsignedType >(pSrc[i] + 1200);
        }

我使用omp parallel优化循环:

#pragma omp parallel for shared(pDest, pSrc)
for(int i = 0; i < size ; ++i)
        {
            pDest[i] = static_cast< unsignedType >(pSrc[i] + 1200);
        }

速度提高了10%!

我尝试使用memcpy并通过避免转换来优化它(因此我更改了pSrc的类型),但是它速度较慢。我只赚5%

memcpy(pDest, pSrc, size * sizeof(unsignedType) );

是否有使用omp或其他方法进行更多优化的方法?

0 个答案:

没有答案