AVX-512 対応判定
iron_simd_has_avx512
(プラグイン / モジュール : iron_simd.hsp)
AVX-512 Foundation + OS ZMM 対応判定 (将来拡張用)。 現バージョンの hspsimd.dll は AVX-512 専用コードは持ちませんが、 情報取得のために提供されています。
| プラグイン / モジュール | 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 - CPU機能 |
| 対応環境 |
|
| hs ファイル | hsphelp\iron_simd.hs |