インテル® oneAPI 製品をインストールしてデータ並列 C++ のサンプルコードを実行

インテル® oneAPI

この記事は、インテル® デベロッパー・ゾーンに公開されている「How to Install oneAPI Products and Run Data Parallel C++ Code Samples」(https://software.intel.com/content/www/us/en/develop/articles/how-to-install-oneapi-products-and-run-data-parallel-cpp-code-samples.html) の日本語参考訳です。


この記事の PDF 版はこちらからご利用になれます。

インテル® oneAPI 製品の紹介

最新のプラットフォームは、CPU、GPU、AI、FPGA、およびその他のアクセラレーターなど、さまざまなタイプのハードウェアで構成できます。それぞれのアーキテクチャーで最大のパフォーマンスを達成するには、異なるプログラミング・モデルが必要です。インテル® oneAPI ベース・ツールキットと特殊なアドオン・ツールキットなどを含むインテル® oneAPI ツールキットを使用すると、プログラマーはヘテロジニアス・プラットフォームのハードウェア・ターゲット全体で再利用可能な単一の移植性の高いプログラムを作成できます。


図 1. クロスアーキテクチャーのコード開発向け oneAPI コンポーネント

oneAPI イニシアチブの主な機能は次のとおりです。

  • ダイレクト・プログラミングをサポートするインテル® oneAPI DPC++ コンパイラーは、SYCL* を組み込んだ C++ の進化形です。これにより、ターゲットのハードウェア全体でコードを再利用でき、CPU、GPU、および FPGA アーキテクチャーで高い生産性とパフォーマンスを実現し、アクセラレーター固有のチューニングを可能にします。DPC++ は拡張機能を含む SYCL* 実装です。
  • ベータ版インテル® oneAPI ベース・ツールキットには、API ベースのプログラミング向けのライブラリーとして以下が含まれます。
    • インテル® oneAPI DPC++ ライブラリー
    • インテル® oneAPI ディープニューラル・ネットワーク・ライブラリー
    • インテル® oneAPI マス・カーネル・ライブラリー
    • インテル® oneAPI スレッディング・ビルディング・ブロック
    • インテル® oneAPI ビデオ・プロセシング・ライブラリー
    • インテル® oneAPI データ・アナリティクス・ライブラリー
    • インテル® oneAPI コレクティブ・コミュニケーション・ライブラリー
  • インテル® VTune™ プロファイラー、インテル® Advisor、GDB* などの高度な解析およびデバッグツール。

インテル® oneAPI ベース・ツールキットは開発者のニーズの大部分に対応しますが、特殊なワークロード向けにインテル® oneAPI 製品には 7 つのドメイン固有のツールキットが用意されています。これには以下のものがあります。

  • インテル® oneAPI HPC ツールキットは、HPC アプリケーションのビルド、解析、最適化、およびスケーリングに使用されます。
  • インテル® oneAPI IoT ツールキットは、ヘルスケア、スマートホーム、航空宇宙、セキュリティーなどのスマート・コネクテッド・デバイスを構築するために使用されます。
  • インテル® oneAPI レンダリング・ツールキットは、大量のデータをリッチでリアルなビジュアルに素早くレンダリングする必要がある、高い忠実度の視覚アプリケーションで使用されます。
  • インテル® oneAPI DL フレームワーク開発者キットは、既存のディープラーニング・フレームワークをビルドまたはカスタマイズする際に使用されます。
  • インテル® ディストリビューションの OpenVINO™ ツールキットは、ディープラーニング推論アプリケーションを高速化する際に使用されます。
  • インテル® AI アナリティクス・ツールキットは、AI ワークロードでエンドツーエンドのパフォーマンスを達成するために使用されます。
  • インテル® システム・ブリングアップ・ツールキットは、システムの信頼性を強化し、システムの電力とパフォーマンスを最適化するために使用されます。

ベータ版でサポートされるハードウェア

ベータ版インテル® oneAPI ツールキットは、次のターゲット・ハードウェア・プラットフォームをサポートします。

  • CPU: インテル® Core™ プロセッサー・ファミリー、インテル® Xeon® プロセッサー・ファミリー、およびインテル® Xeon® スケーラブル・プロセッサー
  • GPU: 第 9 世代インテル® Core™ プロセッサー・グラフィックス
  • インテル® プログラマブル・アクセラレーション・カード (インテル® Arria® 10 GX FPGA 搭載版)

ベースキットをインストールする前に、システムの CPU を確認します。

$ lscpu | grep "Model name"
Model name: Intel(R) Core(TM) i7-6770HQ CPU @ 2.60GHz

利用可能な GPU を調査します。

$ lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation Iris Pro Graphics 580 (rev 09)

このシステムの例では、出力でインテル® Iris™ Pro グラフィックス 580 が利用可能であることが分かります。インテル® Iris™ Pro グラフィックス 580 は、インテル® プロセッサー・グラフィックス Gen9 のバージョンであることに注意してください。

Linux* システムでインテル® oneAPI をインストール

ここでは、Linux* システム上でインテル® oneAPI ツールキットをインストールする方法を説明します。この例では、Ubuntu* 18.04.3 とインテル® Iris™ Pro グラフィックス 580 を搭載するインテル® ネクスト・ユニット・オブ・コンピューティング・キット NUC6i7KYK を使用しています。『インテル® oneAPI ツールキット・インストール・ガイド』 (英語) では、ツールキットをインストールする詳細が説明されています。

以下にインテル® oneAPI ツールキットをインストールする一般的な手順を示します。

  1. インテル® oneAPI ツールキット (英語) のウェブサイトを開きます。
  2. [Start with the Intel oneAPI Base Toolkit] セクションの [Get the Base Kit] をクリックし、使用するオペレーティング・システムを選択します。
  3. ベースキットをインストールするには、オンラインまたはローカル・インストーラーのいずれかを使用できます。ここではローカル・インストーラーを使用します。
  4. ベースキットをダウンロードしたら、.tar ファイルを展開します。
    $ tar xvzf l_BaseKit_b_<version>_offline.tar.gz
    
  5. root 権限で GUI インストールを起動します。
    $ cd l_BaseKit_b_<version>_offline
    $ sudo ./install.sh
    
  6. 必要に応じて、依存関係のあるパッケージをインストールします。ここでは、CLI モードでインテル® oneAPI HPC ツールキットをインストールします。
    $ tar xvzf l_HPCKit_b_<version>_offline.tar.gz
    $ cd l_HPCKit_b_<version>_offline
    

    CLI モードでインストールを行うには、silent.cfg ファイルをエディターで開いて、パラメータとして ACCEPT_EULA=accept を設定し、次のコマンドを実行します。

    $ sudo ./install.sh --silent ./silent.cfg
    

Video グループにユーザーを追加

非 root ユーザーは GPU デバイスへのアクセス権がありません。そのため、GPU デバイスへのアクセスを可能にするには、Video グループに非 root ユーザーを追加する必要があります。

$ sudo usermod -a -G video <username>

インテル® oneAPI サンプルコードを試す

DPC++ コードの経験がない開発者は、サンプルコードのパッケージ (英語) をダウンロードしてみてください。

次の例は、ベースキットに含まれる vector-add サンプルコードのコンパイル方法を示しています。最初に、環境変数を設定します。

$ source /opt/intel/inteloneapi/setvars.sh

システムで利用可能な OpenCL* プラットフォームとデバイスを表示します。

$ clinfo -l
Platform #0: Intel(R) OpenCL
 `-- Device #0: Intel(R) Core(TM) i7-6770HQ CPU @ 2.60GHz
Platform #1: Intel(R) OpenCL HD Graphics
 `-- Device #0: Intel(R) Gen9 HD Graphics NEO
Platform #2: Intel(R) FPGA Emulation Platform for OpenCL(TM)
 `-- Device #0: Intel(R) FPGA Emulation Device

上記の例では、システムで 3 つの OpenCL* デバイスが利用可能であることを示しています: CPU (インテルCore™ i7-6770HQ プロセッサー)、GPU (インテル® HD グラフィックス Gen9)、および OpenCL* ソフトウェア向けのインテル® FPGA エミュレーション・プラットフォーム。

ベースキットの vector-add サンプルに移動し、ソースをコンパイルして実行します。デフォルトでは、ランタイムは優先的に OpenCL* デバイスを選択します。

$ cd <Path to oneapi-toolkit>/DPC++Compiler/vector-add
$ make all
dpcpp -o vector-add.exe src/vector-add.cpp -lOpenCL -lsycl
$ make run
./vector-add.exe
Device: Intel(R) Gen9 HD Graphics NEO
success

上記の例では、デバイスコードは GPU で実行されていることが示されています。

環境変数 SYCL_DEVICE_TYPE=GPU を設定することで、カーネルを GPU で実行するように変更できます。

$ SYCL_DEVICE_TYPE=GPU ./vector-add.exe
Device: Intel(R) Gen9 HD Graphics NEO
Success

また、環境変数 SYCL_DEVICE_TYPE=CPU を設定して、デバイスコードを CPU で実行するように変更できます。

$ SYCL_DEVICE_TYPE=CPU ./vector-add.exe
Device: Intel(R) Core(TM) i7-6770HQ CPU @ 2.60GHz
success

さらに、環境変数 SYCL_DEVICE_TYPE=ACC を設定して、OpenCL* ソフトウェア用のインテル® FPGA プラットフォームでカーネルを実行することもできます。

$ SYCL_DEVICE_TYPE=ACC ./vector-add.exe
Device: Intel(R) FPGA Emulation Device
success

まとめ

この記事ではインテル® oneAPI ツールキットについて紹介しました。また、Linux* システムにツールキットをダウンロードして、インストールする方法も示しました。DPC++ のサンプルコードを試すには、サンプルコードのパッケージ (英語) をダウンロードして、説明した手順でサンプルを実行してください。

参考資料

付記: OpenCL* デバイス用のインテル® CPU ランタイムとインテル® GPU ランタイムのインストール

オプションとして、OpenCL* カーネルを OpenCL* ターゲットデバイスとしてインテル® プロセッサーにして直接実行できます。インテル® プロセッサー用の OpenCL* ランタイムのウェブサイト (英語) を開いて、次のようにドライバーをダウンロードしてください。

  • インテル® Xeon® プロセッサーまたはインテル® Core™ プロセッサーを搭載するシステムでは、「Intel® CPU Runtime for OpenCL™ Applications 18.1 for Linux* OS (64bit only)」の項目へ移動して [Download] ボタンをクリックします。
l_opencl_p_18.1.0.015.tgz
  $ tar -xvzf l_opencl_p_18.1.0.015.tgz
  $ cd l_opencl_p_18.1.0.015
  $ sudo ./install.sh --ignore-signature

デフォルトで、CPU ドライバー向けの OpenCL* アプリケーションは、/opt/intel/opencl にインストールされます。

   $ clinfo -l
   Platform #0: Intel(R) CPU Runtime for OpenCL(TM) Applications
   `-- Device #0: Intel(R) Core(TM) i7-6770HQ CPU @ 2.60GHz
  • インテル® プロセッサー・グラフィックス Gen9 を搭載するシステムでは、「Intel Graphics Technology Runtimes, Linux* OS」の項目へ移動し [Manual Download and Install] をクリックします。ダウンロードをクリックすると、Intel/compute-runtime の Github* ページ (英語) が開きます。

次の例は、リリース 19.38 のインストール方法を示します。

$ wget https://github.com/intel/compute-runtime/releases/download/19.38.14237/intel-gmmlib_19.2.4_amd64.deb
$ wget https://github.com/intel/compute-runtime/releases/download/19.38.14237/intel-igc-core_1.0.11-2500_amd64.deb
$ wget https://github.com/intel/compute-runtime/releases/download/19.38.14237/intel-igc-opencl_1.0.11-2500_amd64.deb
$ wget https://github.com/intel/compute-runtime/releases/download/19.38.14237/intel-opencl_19.38.14237_amd64.deb
$ wget https://github.com/intel/compute-runtime/releases/download/19.38.14237/intel-ocloc_19.38.14237_amd64.deb
$ sudo dpkg -i *.deb
$ apt list --installed | grep intel                                                      
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

intel-gmmlib/now 19.2.4 amd64 [installed,local]
intel-igc-core/now 1.0.11-2500 amd64 [installed,local]
intel-igc-opencl/now 1.0.11-2500 amd64 [installed,local]
intel-microcode/bionic-updates,bionic-security,now 3.20190618.0ubuntu0.18.04.1 amd64 [installed]
intel-ocloc/now 19.38.14237 amd64 [installed,local]
intel-opencl/now 19.38.14237 amd64 [installed,local]
libdrm-intel1/bionic-updates,now 2.4.97-1ubuntu1~18.04.1 amd64 [installed]
xserver-xorg-video-intel-hwe-18.04/bionic-updates,now 2:2.99.917+git20171229-1ubuntu1~18.04.1 amd64 [installed]

$ clinfo -l
Platform #0: Intel(R) CPU Runtime for OpenCL(TM) Applications
 `-- Device #0: Intel(R) Core(TM) i7-6770HQ CPU @ 2.60GHz
Platform #1: Intel(R) OpenCL HD Graphics
 `-- Device #0: Intel(R) Gen9 HD Graphics NEO

製品とパフォーマンス情報

1インテル® コンパイラーでは、インテル® マイクロプロセッサーに限定されない最適化に関して、他社製マイクロプロセッサー用に同等の最適化を行えないことがあります。これには、インテル® ストリーミング SIMD 拡張命令 2、インテル® ストリーミング SIMD 拡張命令 3、インテル® ストリーミング SIMD 拡張命令 3 補足命令などの最適化が該当します。インテルは、他社製マイクロプロセッサーに関して、いかなる最適化の利用、機能、または効果も保証いたしません。本製品のマイクロプロセッサー依存の最適化は、インテル® マイクロプロセッサーでの使用を前提としています。インテル® マイクロアーキテクチャーに限定されない最適化のなかにも、インテル® マイクロプロセッサー用のものがあります。この注意事項で言及した命令セットの詳細については、該当する製品のユーザー・リファレンス・ガイドを参照してください。

注意事項の改訂 #20110804

タイトルとURLをコピーしました