
この記事は、インテルのウェブサイトで公開されている「Migrating NVIDIA CUDA C++ AI Kernels to Intel SYCL for GPU Acceleration」 (英語) を iSUS で翻訳した日本語参考訳です。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。
目標
AI カーネルの SYCL への移行は、ハードウェアの選択肢の拡大、単一ベンダーへの依存度の低下、さまざまなインテル® GPU インフラストラクチャーへのスケーラブルなデプロイを実現する現実的な道筋となります。LLM 変換ツールを活用することにより、チームは CUDA から SYCL へコードを移行する際に、手動による繰り返し作業を大幅に削減できます。エンジニアリング・チームは、ボトルネックとなっているカーネルの特定、LLM を利用したカーネルの移行、生成された SYCL コードのインテル® GPU アーキテクチャーでのプロファイルを優先して行う必要があります。ここでの目標は、推論パフォーマンスの同等性を維持しながら、回復力がある、多様なハードウェア・パイプラインを確立することです。
概要
単一ベンダーのプラットフォームで AI インフラストラクチャーをスケーリングしようとすると、重大なハードウェアの制約に直面します。この制約を解消するには、エンジニアリング・チームが、ハードウェアの選択肢やインフラストラクチャーの柔軟性を拡大する、オープンなプログラミング標準である SYCL の採用を検討すべきです。SYCL は、C++ 並列プログラミングを標準化し、PyTorch などの高性能な計算フレームワークや vLLM のようなサービングエンジンでインテル® GPU を活用できるようにします。
このドキュメントでは、AI カーネルを NVIDIA CUDA から SYCL へ移行する技術的アプローチの概要を説明します。移行に必要なアーキテクチャーの再設計を最小限に抑えながら、重要な数学的ロジックを維持し、AI による自動化を活用して、インテル® GPU ハードウェアへのデプロイを高速化できることを示します。
アーキテクチャーの整合性: CUDA と SYCL の GPU 実行
2 つのフレームワークを評価すると、並列コンピューティングの概念における基本的な整合性と、運用の明確な違いが明らかになります。どちらのエコシステムも GPU アクセラレーションをターゲットにしていますが、ハードウェア抽象化レイヤーへのアプローチは異なります。
- 類似点: どちらのフレームワークも、最新の C++ パラダイムを活用して、厳密なスレッド階層で実行を構成して、並列ワークロードを処理します。CUDA に慣れたエンジニアは、SYCL のプログラミング・モデルを瞬時に理解できるでしょう。CUDA のグリッド、ブロック、スレッドという概念は、SYCL の nd_range、work-group、work-item 構造に対応しています。また、CUDA のワープは SYCL のサブグループに対応しています。これらの関係により、開発チームは急勾配の学習曲線を回避し、GPU 最適化の現在の思考モデルを維持できます。
- 相違点: NVIDIA は、CUDA の実行を自社のシリコンに厳格に限定しています。対照的に、SYCL は、高度なインテル® GPU アーキテクチャーで実行できる、オープンな標準を提供しています。SYCL は純粋な、最新の標準 C++ (C++17/C++20) ですが、CUDA C++ は独自の C++ の方言であると言えます。
コアのカーネルのロジックを維持する
推論全体のパフォーマンスは、AI カーネルの数学的な基盤により決定されます。移行時に、チームはコアの算術およびアルゴリズムの構造を完全に維持できます。
エンジニアは、ハードウェア固有のラッパー、カーネル起動設定、メモリー割り当ての境界のみ書き換えます。内部ループのロジック (重み、活性化、非線形性を計算するコード) は、その構造を変更することなく GPU に転送されます。これにより、重要なレイヤーの最適化で、プラットフォーム間で数学的な整合性が維持されることが保証されます。開発者は、複雑な行列演算やアテンションなどのメカニズムを作り直すことなく、これらのメカニズムをインテル® GPU へ移行できます。
大規模言語モデル (LLM) による移行の高速化
Claude Code や GitHub Copilot など、生成 AI モデルをベースとするエージェント型 AI コーディング・ツールが、構文変換の大部分を実行します。これらのツールは標準的な CUDA コードを入力として受け取り、ブロックの次元やスレッド識別子を正確にマッピングして、機能的に同等な SYCL コードを出力します。
オープンソースの SiLU と Multiply 検証カーネル (英語) を参照してください。AI は、CUDA の入力を解析し、コアの演算レイヤーの計算処理を維持しながら、GPU をターゲットとする独自の CUDA ヘッダーを SYCL 標準に置き換えます。
LLM を活用することにより、手動の定型的な変換作業が大幅に削減され、エンジニアは、インテル® GPU ハードウェアにおける動作の正確性の検証、パフォーマンス・チューニング、プロファイルに、より多くの時間を割けるようになります。AI を活用した CUDA から SYCL への変換は、移行のコストと複雑さを減らし、よりオープンな GPU ソフトウェア・エコシステムやハードウェアの選択肢の拡大、インフラストラクチャーの柔軟性を、さらに現実的なものにします。
CUDA から SYCL への変換の対応表
移行の際にエンジニアリング・チームの参考になるように、GPU 実行に関する主要な CUDA の動作概念と対応する SYCL の概念を以下の表に示します。
概念/操作 |
NVIDIA CUDA |
SYCL |
実行ヘッダー |
__global__ void myKernel(…) |
SYCL_EXT_ONEAPI_FUNCTION_PROPERTY((syclexp::nd_range_kernel<1>)) |
グローバルスレッド ID |
blockIdx.x * blockDim.x + threadIdx.x |
item.get_global_id(0) |
ローカルスレッド ID |
threadIdx.x |
item.get_local_id(0) |
ブロック/グループ ID |
blockIdx.x |
item.get_group(0) |
スレッドの同期 |
__syncthreads() |
item.barrier() |
デバイスメモリーの割り当て |
cudaMalloc(&d_A, size) |
sycl::malloc_device(size, q) |
ホストとデバイス間のコピー |
cudaMemcpy(d_A, h_A, size, cudaMemcpyHostToDevice) |
q.memcpy(d_A, h_A, size) |
共有/ローカルメモリー |
__shared__ float s_A[256] |
syclexp::work_group_static<int[256]> s_A |
ストリーム/キューの管理 |
cudaStream_t stream |
sycl::queue q |
数学関数 |
expf(x), __fdividef(x, y) |
sycl::exp(x), sycl::native::divide(x, y) |

