iron_simd_dot_f

float 配列の内積

iron_simd_dot_f a, b, n, result

(プラグイン / モジュール : iron_simd.hsp)

情報

プラグイン / モジュールiron_simd.hsp
バージョン3.8
作成日2026/04/18
著作者IronHSP
URLhttps://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 - float配列
対応環境
  • その他 : Win32 / Win64
hs ファイルhsphelp\iron_simd.hs