2
我對使用SSE的圖像中的像素執行按位非操作。上證所內在 - 邏輯非優化
我有一些問題:
- 可以這樣使用OpenMP進一步優化?
- 算法中是否有瓶頸可以優化?
這裏是我的代碼:
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++;
}
您是否試過循環展開? – Mehrdad
你可以把它包裝在一個實際編譯的函數中,所以我們可以看看編譯器的輸出嗎? –
爲什麼不使用'_mm_set1_epi16(65535)',讓編譯器擔心如何獲取數據。 (提示,它將比存儲到堆棧中的本地數組做更好的工作,然後從那裏加載,可以使用'pcmpeqw same,same'在運行中生成全部寄存器,並且CPU將該成語識別爲獨立於舊值,就像xor-zeroing一樣,讓編譯器爲你做這件事,但是) –