[英]SSE Intrinsics - Logical NOT Optimization
我使用SSE對圖像中的像素執行按位NOT操作。
我有一些疑問:
這是我的代碼:
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++;
}
是的,您可以嘗試循環展開並使用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++; }
請注意,您可以多次展開以提高性能。
我沒有看到您提供的代碼段中存在任何瓶頸。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.