2 画像のアルファブレンド
iron_simd_pixel_blend a, b, out, n, alpha
a, b : 入力バッファ (RGBA 連続バイト列) out : 出力バッファ n : バイト数 (RGBA の場合 width*height*4) alpha : ブレンド係数 (0.0 .. 1.0)
(プラグイン / モジュール : iron_simd.hsp)
out(i) = a(i) * (1 - alpha) + b(i) * alpha を全バイトに適用します。 alpha=0 で a そのまま、alpha=1 で b そのまま。 AVX2 で 8 バイト単位に変換して並列計算。 UI のフェード効果や 2 画像クロスフェードに最適。 例: ; 50% ミックス iron_simd_pixel_blend img_a, img_b, img_out, 1920*1080*4, 0.5
| プラグイン / モジュール | 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 - 画像 |
| 対応環境 |
|
| hs ファイル | hsphelp\iron_simd.hs |