SSE本质-逻辑非优化

SSE Intrinsics - Logical NOT Optimization

本文关键字:优化 本质 SSE      更新时间:2023-10-16

我正在使用SSE对图像中的像素执行逐位NOT操作。

我有一些问题:

  1. 这可以使用OpenMP进一步优化吗
  2. 我的算法中是否存在可以优化的瓶颈

这是我的代码:

unsigned int iSSE2Size = (SrcImage1.GetHeight() * (SrcImage1.GetStepBytes() >> 1)) >> 3;
__m128i *m_ucSrcPtr = (__m128i *)SrcImage1.GetWordPtr();
__m128i *m_ucDstPtr = (__m128i *)DestImage.GetWordPtr();
__m128i iMaxVal = _mm_set1_epi16(0xFFFF); 
unsigned short *srcRowPtr, *dstRowPtr;
while (iSSE2Size-- > 0)
{
    *m_ucDstPtr = _mm_andnot_si128(*m_ucSrcPtr, iMaxVal );
    m_ucSrcPtr++;
    m_ucDstPtr++;
}
  1. 是的,你可以尝试循环展开和使用OpenMP来优化你的代码。

    #pragma omp parallel for
    for (;iSSE2Size-=2 > 0;)
    {
        *m_ucDstPtr = _mm_andnot_si128(*m_ucSrcPtr, iMaxVal );
        m_ucSrcPtr++;
        m_ucDstPtr++;
        *m_ucDstPtr = _mm_andnot_si128(*m_ucSrcPtr, iMaxVal );
        m_ucSrcPtr++;
        m_ucDstPtr++;
    }
    

    请注意,您可能可以多次展开以提高性能。

  2. 在您提供的代码片段中,我看不到任何瓶颈。