最近一直沉迷于SSE方面的優(yōu)化,實(shí)在找不到想學(xué)習(xí)的參考資料了,就拿個(gè)筆記本放在腿上翻翻OpenCv的源代碼,無(wú)意中看到了OpenCv中關(guān)于積分圖的代碼,仔細(xì)研習(xí)了一番,覺得OpenCv對(duì)SSE的靈活運(yùn)用真的做的很好,這里記錄下我對(duì)該段代碼的品味并將其思路擴(kuò)展到其他通道數(shù)的圖像。
該核心代碼位于:Opencv 3.0\opencv\sources\modules\imgproc\src\sumpixels.cpp文件中。
我們貼出最感興趣的一部分代碼以便分析:
bool operator()(const uchar * src, size_t _srcstep,int * sum, size_t _sumstep,double * sqsum, size_t, int * tilted, size_t,Size size, int cn) const { if (sqsum || tilted || cn != 1 || !haveSSE2) return false; // the first iteration memset(sum, 0, (size.width + 1) * sizeof(int)); __m128i v_zero = _mm_setzero_si128(), prev = v_zero; int j = 0; // the others for (int i = 0; i < size.height; ++i) &nbs