VulkanCompute - ウェーブ上でGPU計算シェーダーを実行する
この投稿は、07/24/2026付けのWaveMetrcisの担当による投稿を翻訳したものです。
オリジナルのスレッドはこちら [VulkanCompute - run GPU compute shaders on your waves]
--------------------------
Vulkan を使って、GLSL シェーダーを GPU 上で実行できる実験的な XOP「VulkanCompute」について紹介したいと思います。この XOP では、GPU バッファとして Igor Pro のウェーブを、プッシュ定数として Igor Pro のスカラーを使います。要素ごとの計算負荷が高く、高度に並列化された処理を GPU にオフロードしたい場合に便利です。
機能の概要
Igor Pro 文字列として、小さなGLSLコンピュートシェーダーを記述します。
入力/出力のウェーブは、std430 ストレージバッファ(SSBO)としてバインドされます。まず /IN ウェーブ、次に /OUT ウェーブの順で、すべてディスクリプタ―セット 0 に配置されます。
スカラーは、float としてマーシャリングされたプッシュ定数ウェーブ(/PC)を介して渡されます。
結果は、そのまま出力ウェーブにコピーされます。
GLSL の専門家である必要はありません。実際には、シェーダーを作成する最も簡単な方法は、提供されているサンプルの1つを基に微調整するか、AI アシスタント(ChatGPT、Claude、Copilot など)に計算用の GLSL を生成してもらうことです。その時、上記のバインディング規約(バインディング 0~N-1 には /IN ウェーブ、次に /OUT ウェーブ、push-constant ブロック内のスカラーは float として)を伝えるだけで十分です。その結果を Igor Pro の文字列に貼り付けて実行するだけです。
2つのコマンド
- VulkanCompute – GLSL シェーダーをコンパイルして GPU 上で実行します。
- VulkanCompileShader - シェーダーを一度だけ SPIR-V ウェーブにプリコンパイルし、その後 VulkanCompute /SPV=... を通じて再利用することで、呼び出しごとのコンパイルを省略します。
簡単な例(waveC = varA*waveA*waveB + varB)
デモ用の .ipf ファイルではさらに踏み込んでおり、実際の GPU による高速化が確認できる計算集約型の例(要素ごとの超越関数ループ)に加え、事前コンパイルと再利用の例も含まれています。動作を確認するには、コマンドラインから以下の2つの関数のいずれかを実行してください。
- DemoGPUvs1CoreAndMultiCoreCPU() - 同じ負荷の高い計算を、GPU 上、単一のCPU コア上、およびマルチスレッドによるすべての CPU コア上で実行し、それぞれの実行時間を並べて表示します。
- DemoGPUPrecompiledVsMultiCoreCPU() - 同じ比較ですが、シェーダーはVulkanCompileShader を使って一度だけ事前コンパイルされているため、GPU の実行時間はディスパッチのみを反映し、一度限りのコンパイル時間は含まれません。
パフォーマンスについて一言: GPU は、単に「処理を高速化する」魔法のボタンというわけではありません。単純な要素ごとの演算(例えば上記の例のような)の場合、計算はメモリ帯域幅に制約され、GPU との間でデータをやり取りするコストが大部分を占めるため、通常は CPU 上の MatrixOp や FastOp の方が高速です。VulkanCompute が効果を発揮するのは、要素ごとの処理負荷が高い場合(1つの値に対して多くの演算が行われる場合)や、常駐データに対して多数のカーネルを実行する場合です。
動作条件/インストール
- Igor Pro 10(64ビット)、Windows 専用。このビルドは Igor Pro 10 を対象としており、macOS では使用できません。
- Vulkan 対応の GPU ドライバー(最新のNVIDIA/AMD/Intel ドライバーには、Vulkanランタイム vulkan-1.dll がすでに含まれています)。Vulkan SDK は必要ありません。
- Igor Pro はファイル名が「64.xop」で終わる XOP のみを読み込むため、ファイル名はVulkanCompute64.xop とする必要があります。このファイル(またはそのショートカット)を「Igor Extensions (64-bit)」フォルダー内に配置し、Igor Pro を再起動してください。その隣に .ihf ヘルプファイルを配置してください。
注意事項/留意点
- デフォルトでは fp32 で計算が行われます。倍精度(/DBL)は、お使いの GPU がshaderFloat64 機能をサポートしている場合にのみ動作します。
- /IN と /OUT で指定されたウェーブは、現在のデータフォルダー内で解決されます。
- これは、Windows 版 Igor Pro 10 向けの初期段階の、メインスレッド専用のビルドです。フィードバックをお待ちしています。Windows 専用であり、macOS 版(MoltenVK 経由)はビルドされていません。
ぜひ試してみて、お使いのハードウェアでのパフォーマンスがどうだったか教えてください。
Forum
Support
Gallery
Igor Pro 10
Learn More
Igor XOP Toolkit
Learn More
Igor NIDAQ Tools MX
Learn More