本文へスキップ

ZLUDA、hipFFT経由でAMD GPU向けcuFFT対応を追加

マージされたプルリクエストによりZLUDA(ズルーダ)にNVIDIAのcuFFTライブラリが追加された。AMD GPUはコード変更なしでCUDAベースのFolding@Homeユニットを実行できる。

著者 Tech AI Wire Team

2 分で読めます

白背景で斜めに置かれた、トリプルファン型クーラーを備えたSapphire製AMD Radeon RX 7900 XTXグラフィックスカード。
写真: Geni

AMDのグラフィックスカードでNVIDIAのCUDAソフトウェアを動かすオープンソース層、ZLUDAに新しいプルリクエストが加わり、cuFFTへの対応が追加された。cuFFTは、信号から周波数の情報を取り出す高速フーリエ変換のためのNVIDIA製ライブラリだ。この変更は2026年9月22日にプロジェクトへマージされた。Phoronixによると、これによりFolding@Homeの分散コンピューティングクライアントは、ソフトウェア自体を変更することなく、CUDAベースの処理をAMD Radeon GPU上で実行できるようになった。

フーリエ変換は、画像や音声の一部といった信号を、そこに含まれる周波数のリストへと変換する処理だ。科学技術系のソフトウェアや一部の機械学習パイプライン、そしてFolding@Homeのタンパク質フォールディング用クライアントは、いずれもこの計算にcuFFTを使ってきた。これまで、このコードパスはNVIDIA製ハードウェア上でしか動かなかった。

変換の仕組み

ZLUDAは、プログラムがNVIDIAのCUDAライブラリに対して行う呼び出しを捕まえ、代わりにAMD側の対応するツールへ転送する。cuFFTについては、マージされたプルリクエストがその呼び出しをAMD自身のFFTライブラリであるhipFFTへ転送する。

1つの点には特に注意が必要だった。CUDAは各FFTプランを32ビットの数値、いわゆるハンドルで識別する。一方hipFFTは、生のメモリポインタを代わりに使う。そのポインタを直接切り詰めたり読み替えたりすれば、プログラムがクラッシュしたり、気づかないまま誤った結果を返したりしかねない。そこでこのプルリクエストは、CUDAの数値ハンドルをhipFFTのポインタに対応づける、同期されたレジストリを構築した。hipFFT自体は実行時に読み込まれ、WindowsとLinuxでは別々のセットアップコードを持つ。

この移植は、hipFFTに直接対応するものがあるcuFFTの関数だけをカバーしており、ライブラリ全体ではない。プルリクエストには、マージ前にテストした内容が記載されている。

テスト対象結果
ハンドルのライフサイクル管理合格
ワークスペースの設定合格
64ビット変換のプランニング合格
3Dの実数から複素数への変換合格
Folding@HomeのCore24およびCore27ワークユニット正常に動作

残っている課題

プルリクエストによれば、ZLUDAのメンテナーであるvosenは、この変更をレビューする中で3つの問題を指摘した。ハンドルIDは理論上オーバーフローしうる。グローバルなロックが、必要以上にFFT処理を直列化してしまう可能性がある。そしてhipFFTから返る一部のエラーコードは、まだ対応するCUDAのエラーへ正しくマッピングされておらず、レビューではこれを中程度から高程度の深刻さと位置づけた。

テストの状況もプラットフォームによってばらつきがある。Windows向けのビルドとAMDハードウェアでのテストはどちらも通過し、Linux上でもコードは問題なくコンパイルできる。しかしプルリクエストの作成者であるAmosKito1は、「Linux側のテスト能力は限られている」と書いている。Linux側の経路は、今のところWindows側に比べて実際の利用が少ない。

開発者にとっての意味

自分のソフトウェアがcuFFTを呼び出していて、ZLUDA経由でAMDハードウェア上で試したいなら、まず使っている関数それぞれにhipFFTの直接対応があるかを確認してほしい。この移植はまだAPI全体をカバーしていない。今のところWindows側の経路の方がLinux側より十分にテストされていると考えておくこと。vosenが指摘したハンドルのオーバーフローやエラーマッピングの問題が解消されるまでは、長時間動作するものや安全性が重要な用途にはまだ使わない方がいい。

今日の時点でもっともはっきり恩恵を受けるのはFolding@Homeの利用者だ。彼らのAMDカードは、これまでNVIDIAのGPUにしか回っていなかった、cuFFTを必要とするCUDAワークユニットを引き受けられるようになった。cuFFTを土台にしたGPUアクセラレーションの科学技術系コードや信号処理コードを保守している人にとっては、AMD向けのネイティブライブラリへの書き換えなしに、テストできるハードウェアの選択肢が1つ増えたことになる。

出典

  1. ZLUDA Now Implements Some NVIDIA cuFFT APIs With hipFFT - Phoronix
  2. Implement core cuFFT APIs with hipFFT (#672) - GitHub (vosen/ZLUDA)

関連記事

An Nvidia DGX Spark GB10 desktop AI computer, its small gold speckled chassis on a wooden desk in front of a monitor showing out-of-focus code.
開発ツール

NouveauがNvidiaのDGX Spark GB10で非公式に起動

Red HatのエンジニアがオープンソースのNouveauドライバーとNVKを、NvidiaのDGX Spark GB10で動かしました。約100件のパッチが必要で、アップストリーム入りはまだ決まっていません。

灰色の背景の真上から撮影したArmのシングルボードコンピュータ。プロセッサの外装にarmの文字が見える。
開発ツール

FEX-EmuがArm上のx86 TSOの代償を解説

x86のメモリ規則をArmで再現すると、非整列アクセスの処理量は基準の8.5%まで落ちる。ライトコンバイン書き込みは816倍悪いと報告されている。