我想知道是否有可能做內有四個平行值以下計算一個MMX寄存器:(A * B)/ 256和MMX
(a*b)/256
其中一個是一個符號字和b是無符號的值在0-256
範圍(混合因子),我想我的問題是,我不知道如何(或者)pmullw和pmulhw會幫助我完成這項任務。
我想知道是否有可能做內有四個平行值以下計算一個MMX寄存器:(A * B)/ 256和MMX
(a*b)/256
其中一個是一個符號字和b是無符號的值在0-256
範圍(混合因子),我想我的問題是,我不知道如何(或者)pmullw和pmulhw會幫助我完成這項任務。
如果你知道A * B不會溢出帶符號的16位字段,那麼你可以使用pmullw(內在_mm_mullo_pi16
,或SSE內在_mm_mullo_epi16
),然後通過256
凡
MMX:
__m64 a, b;
...
a = _mm_mullo_pi16 (a, b);
a = _mm_srli_pi16 (a, 8);
SSE2:
__m128i a, b;
...
a = _mm_mullo_epi16 (a, b);
a = _mm_srli_epi16 (a, 8);
問題是,a * b **會溢出16位字段。有沒有辦法讓管理呢?我會仔細看看SSE2。謝謝mattst88! – jsi1
如果a * b溢出16位,則可以將a或b向左移8位,然後執行pmulhw。 – user434507
結果將是正確的,因爲結果的那些位僅取決於a和b的較低位 –
這是否只能用MMX來完成?它非常過時。 – Mysticial
所以它怎麼能做得更快? – jsi1
您可以與SSE2並行執行8個值,而不只是使用MMX的4個值。 – mattst88