効率的にメモリのブロック全体をシフト:ビット私はソーベル演算を実行した後、コードを次している
short* tempBufferVert = new short[width * height];
ippiFilterSobelVertBorder_8u16s_C1R(pImg, width, tempBufferVert, width * 2, dstSize, IppiMaskSize::ippMskSize3x3, IppiBorderType::ippBorderConst, 0, pBufferVert);
for (int i = 0; i < width * height; i++)
tempBufferVert[i] >>= 2;
イライラする事は、ビットシフトは、それをすべての最長撮影操作でされ、IPPのソーベルがそうですそれは私の愚かなビットシフトより速く実行されます。ビットシフトを最適化するにはどうすればよいですか?また、IPPや他のオプション(AVX?)を使用してメモリ全体をビットシフトすることもできます(ただし、Visual Studioの実装では>> =が使用します)。
'short * bufPtr = tempBufferVert;'を追加して、 '[i]'演算子を使うのではなく、ループ内の 'bufPtr'ポインタをインクリメントしてみることができます。私はそれが速くなることを保証することはできませんが、それは私が試みることの一つです。 – Steeve
'width' /' height'の型は何ですか、 'tempBufferVert'でエイリアスにすることはできますか?ループの生成されたasmを見てきましたか? – Jarod42