Next: Assembly Software Pipelining, Previous: Assembly Floating Point, Up: Assembly Coding [Index]
複数データに対する単一命令(SIMD, Single-Instruction Multiple-Data)は現在のCPUでは普通に使用できるもので,元々は信号処理アルゴリズムで,各データポイントを複数独立に扱うためのものです。GMPで発生するキャリー処理にはあまり向いていません。
所謂,4つの16x16 bitの乗算を行うSIMD乗算は,GMPの側から見れば,いくつかのシフトと加算が伴うことを除けば,32x32乗算を行う手間と同じになります。とはいえもちろん,SIMD形式がフルでパイプライン化されていて,命令デコードを減らすことができるのであれば,十分価値は出てきます。
x86 CPU上では,MMX命令がmpn_rshift
関数と
mpn_lshift
関数で使われており,更に
P55 に対するmpn_mul_1
関数における16ビット乗算の特別な場合にも使用されています。 SSE2はPentium 4用の mpn_mul_1
,
mpn_addmul_1
, mpn_submul_1
関数で使用されています。