CUDA* から C++ with SYCL* へのコード移行

ベンダー固有のツールやアクセラレーターの制約からコードを解放し、より移植性の高いアプリケーション開発を実現


CUDA* から C++ with SYCL* へのコード移行

C++ with SYCL* は、アクセラレーターを使用するアプリケーション向けに統一されたプログラミング・モデルを提供し、パフォーマンスの移植性と C++ との整合性を向上します。このページでは、実際にコードを移行するにあたって重要となる点について紹介します。

HPSC ゲストスピーカーとしてもお馴染みの Intel 社シニアエンジニア James Reinders 氏による日本語字幕付きの紹介動画で概要をご確認ください。


何かお困りのことはありますか?

エクセルソフトでは、CUDA* から C++ with SYCL* への移行支援ツール「インテル® DPC++ 互換性ツール」が同梱されたインテル® oneAPI ベース・ツールキット向けに、有償サポートサービス製品を提供しています。有効なサポートサービスをお持ちのお客様は、技術サポートを日本語でご利用いただけます。

こちらのページで紹介しているソフトウェア・ツールの使用方法やサンプルの実装方法、実際のコード移行時に発生した問題点やコードの移行支援に関するご相談などがございましたら、以下のフォームよりお気軽にお問い合わせください。


移行に必要なソフトウェアの使い方

インテル® DPC++ 互換性ツールは、既存の CUDA* コードから C++ with SYCL* への移行を支援するソフトウェアです。ローカルマシン上でインタラクティブな JupyterLab* 環境にアクセスして、このツールの使用方法について学びましょう。詳細は、自己学習向けに提供されている Jupyter* ノートブックのチュートリアルを参照してください。

Jupyter* ノートブックのチュートリアルでは、以下について学ぶことができます。

  • 1 種類の簡単なサンプルコードの移行
  • 全体的な移行プロセスについて学べる 2 種類の実際のコードの移行

チュートリアルを利用するには、事前にインテル® oneAPI ベース・ツールキットをインストールする必要があります。日本語での無料サポートサービス (14日間限定) 付きのダウンロードのお申込みはこちら

Jupyter* ノートブックのチュートリアルにアクセスする

移行方法のサンプル紹介動画 (英語) では、以下について学ぶことができます。

  • 標準ベースの C++ with SYCL* の概要
  • インテル® DPC++ 互換性ツールの紹介と使い方
  • 実際のサンプルコードを使用したハンズオン形式のデモ
  • コードの移行に必要な一般的なタスクに関するディスカッション
Intel 社のウェビナー動画を視聴する


アルゴリズムの移行サンプル

以下のエンドツーエンドの移行サンプルでは、実際に CUDA* アルゴリズムをヘテロジニアス・プログラミング言語である C++ with SYCL* へ移行する方法を紹介します。

ヤコビ反復ソルバー

数値線形代数における対角優位な連立一次方程式 Ax=b の近似数値解を求めます。

奇偶マージ・ソート・アルゴリズム

グラフをトラバースするソーティング・ネットワークです。小規模から中規模の (キーと値の) 配列ペアのバッチをソートするのに適したアルゴリズムです。

オプティカル・フロー推定

オプティカル・フローとは、物体やカメラの移動によって生じる、隣接フレーム間の画像オブジェクトの動きの見え方のパターンです。

MonteCarloMultiGPU サンプルの CUDA* から SYCL* への移行

モンテカルロ法を使用して、指定された一連のヨーロピアン・オプションの公正なコール価格を評価します。このサンプルは、1 つの CPU スレッドを使用して複数の GPU を制御します。

ConcurrentKernels アプリケーションの CUDA* から SYCL* への移行

GPU 上で複数のカーネルを同時に実行する SYCL* キューの使用を実証します。

SimpleCUDAGraphs の CUDA* から SYCL* への移行

Taskflow プログラミング・モデルを使用して、単純な明示的 CUDA* グラフ API を SYCL* の同等の API へ移行します。

QuasirandomGenerator の CUDA* から SYCL* への移行と最適化

標準正規分布を生成するニーダーライター準乱数列ジェネレーターと逆累積正規分布関数を実装します。

分離可能な畳み込みの CUDA* から SYCL* への移行と最適化

分離可能な畳み込みとは、1 つの畳み込みを 2 つ以上の畳み込みに分割して、同じ出力を生成する処理です。


移行方法と日本語リソース

C++ with SYCL* で既存の CUDA* コードをマルチプラットフォーム対応のプログラムに移行するには、以下の 2 とおりの方法があります。

インテル® DPC++ 互換性ツールを使用する場合

インテル® DPC++ 互換性ツールは、インテル® oneAPI ベース・ツールキットに含まれるコンポーネントです。このツールは、CUDA* 言語カーネルとライブラリー API 呼び出しを移行し、CUDA* コードの約 80% から 90% を C++ with SYCL* に移行します。さらに、コードの記述とチューニングに役立つインライン・コメントを生成します。

以下のガイドを参照して、CUDA* コードの移行を開始しましょう。

インテル® DPC++ 互換性ツールをダウンロードする

SYCLomatic ツールを使用する場合

開発者のご要望にお応えし、インテル® DPC++ 互換性ツールがオープンソースのプロジェクト「SYCLomatic」としてリリースされました。このプロジェクトのソースコードは、GitHub* (英語) で公開されており、インテルが提供するツールと同等の移行機能を備えています。コミュニティーによる貢献も歓迎します。

CUDA* 開発環境における SYCLomatic インストール手順

  1. GitHub* 上で SYCLomatic のリリースページ (英語) にアクセスします。
  2. インストールを希望するバージョン内に表示された [Assets] を展開して、最新の Linux* 向けパッケージを見つけます。
  3. 最新の linux_release.tgz へのリンクをコピーします。
  4. CUDA* 開発環境で以下のコマンドを実行することで、インストールが完了します。
    $ mkdir syclomatic; cd syclomatic
    $ wget <ステップ 3 でコピーした linux_release.tgz へのリンクアドレス>
    $ tar -cvf linux_release.tgz
    $ export PATH="/home/$USER/syclomatic/bin:$PATH"
    $ c2s --version
コミュニティー向けサポートを利用する


その他のリソース

以下のエンドツーエンドの移行サンプルでは、実際に CUDA* アルゴリズムをヘテロジニアス・プログラミング言語である C++ with SYCL* へ移行する方法を紹介します。


Intel 社のリソースカタログへアクセスする

インテル® ソフトウェア開発製品に関する最新情報をお届け!

エクセルソフトでは、インテル® ソフトウェア開発製品を利用して、インテルの CPU、GPU、FPGA をはじめとする多様なアクセラレーターのほか、NVIDIA* GPU や AMD* GPU 向けに最適化されたコードの開発を支援するための最新情報をお届けするメールニュースを定期配信しています。

エクセルソフトのメールニュースへ登録する


お問い合わせ

下記フォームに必要事項をご記入の上、[お問い合わせ] ボタンをクリックしてください。弊社より折り返しご連絡いたします。


お問い合わせ内容


お客様情報





  • JavaScript* を有効にしてお申し込みください。

NVIDIA* や AMD* のターゲット GPU で C++ with SYCL* コードを実行するには?

NVIDIA* GPU および AMD* GPU 向け Codeplay プラグインは、SYCL* で記述したコードを NVIDIA* や AMD* のターゲット GPU で実行するために、インテル® oneAPI ベース・ツールキットのインテル® oneAPI DPC++/C++ コンパイラーを補完する無料バイナリーです。エクセルソフトでは、SYCL* アプリケーションをコンパイルする際の疑問点に関して、優先サポートを利用するための有償サポートサービス製品を提供しています。