int 配列の要素乗算
iron_simd_mul_i a, b, out, n
(プラグイン / モジュール : iron_simd.hsp)
out(i) = a(i) * b(i) (下位 32bit)。AVX2 の _mm256_mullo_epi32 使用。
| プラグイン / モジュール | iron_simd.hsp |
| バージョン | 3.8 |
| 作成日 | 2026/04/18 |
| 著作者 | IronHSP |
| URL | https://github.com/inovia/IronHSP |
| 備考 | iron_simd.hsp は hspsimd.dll を介して、HSP の int / double / float 配列に対し
SSE / AVX / AVX2 SIMD 命令による高速な一括演算を提供します。 #include "iron_simd.hsp" [SIMD とは] SIMD (Single Instruction, Multiple Data) は 1 命令で複数データを同時処理する CPU 拡張機能です。SSE2 (128bit) は double を 2 個ずつ、AVX/AVX2 (256bit) は double を 4 個ずつ、float を 8 個ずつ、int32 を 8 個ずつ並列計算します。 1000000 要素のループでも、AVX2 では理論上約 4 倍 (double) / 8 倍 (float) の スループットが得られます。 [CPU 機能検出] ロード時に CPUID + XGETBV で利用可能な命令セットを検出し、 AVX2 > SSE2 > scalar の順で最適な実装を自動選択します。iron_simd_features で現在の CPU が対応している機能文字列を取得できます。 [引数の渡し方] 配列ポインタは HSP の varptr() によりプラグインに渡されます。 ddim a, n (double 配列) dim a, n (int 配列) sdim a, 4 * n (float 配列; バイト列として 4*n バイト確保) iron_simd_* 命令は array 引数を受け取り内部で varptr() を呼ぶので、 利用側は通常の配列変数をそのまま渡せば OK です。 [非整列アクセス] すべての load/store は loadu/storeu を使い、16/32 バイト整列を要求しません。 したがって HSP のヒープアロケータから返される任意のアドレスで安全です。 [対応 CPU] SSE2 : 2001 年以降の全 x86-64 CPU が必須で対応 AVX : Intel Sandy Bridge (2011), AMD Bulldozer (2011) 以降 AVX2 : Intel Haswell (2013), AMD Excavator (2015) / Zen (2017) 以降 AVX512 : Intel Skylake-X (2017) / Ice Lake 以降 (対応命令は未使用) |
| タイプ | 拡張命令 |
| グループ | iron_simd - int配列 |
| 対応環境 |
|
| hs ファイル | hsphelp\iron_simd.hs |