MMX、SSE、SSE2、および SSE3 のみをサポートする Intel Atom プロセッサに移植する必要があるパフォーマンス クリティカルなアプリケーションを開発しています。私の以前のアプリケーションは AVX だけでなく SSSE3 もサポートしていましたが、今は Intel Atom プロセッサ (MMX、SSE、SSE2、SSE3) にダウングレードしたいと考えています。
特にssse3命令_mm_hadd_epi16
をこのコードに置き換えると、パフォーマンスが大幅に低下します
RegTemp1 = _mm_setr_epi16(RegtempRes1.m128i_i16[0], RegtempRes1.m128i_i16[2],
RegtempRes1.m128i_i16[4], RegtempRes1.m128i_i16[6],
Regfilter.m128i_i16[0], Regfilter.m128i_i16[2],
Regfilter.m128i_i16[4], Regfilter.m128i_i16[6]);
RegTemp2 = _mm_setr_epi16(RegtempRes1.m128i_i16[1], RegtempRes1.m128i_i16[3],
RegtempRes1.m128i_i16[5], RegtempRes1.m128i_i16[7],
Regfilter.m128i_i16[1], Regfilter.m128i_i16[3],
Regfilter.m128i_i16[5], Regfilter.m128i_i16[7]);
RegtempRes1 = _mm_add_epi16(RegTemp1, RegTemp2);
これは、この特定の命令に対して私が思いついた最高の変換です。しかし、この変更はプログラム全体のパフォーマンスに深刻な影響を与えました。
MMX、SSE、SSE2、および SSE3 命令内で、よりパフォーマンス効率の高い代替案を命令に提案して_mm_hadd_epi16
ください。前もって感謝します。