我尝试尽可能优化循环,而没有优化,循环看起来像这样:
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或其他方法进行更多优化的方法?