単一ソースコードでメニーコアやGPUやFPGAに対応したクロスアーキテクチャー対応のソフトウェア開発を可能に。インテルの「oneAPI ツールキット 2022」

コンピュータの処理能力を大きく左右するプロセッサの進化は、CPUだけではなくGPUやFPGAなどさまざまなアーキテクチャーにも及んでいます。

特にビッグデータや機械学習のような大規模データ処理のニーズが増してきているなかで、それを高速に処理するための多数のコアや命令群、高速なキャッシュメモリなどを備えたCPU、GPU、FPGAなどの能力を最大限引き出せるかどうかは大変重要です。

その成否がソフトウェアのレスポンス、さらには従量課金制のクラウドのコストなどに大きく関わってくるためです。figこれからのソフトウェアには、多数のコアやキャッシュを持つメニーコアのCPUや、GPUやFPGAといったアクセラレーションデバイスなどの高性能なハードウェアの性能を最大限引き出すことが求められる。写真はインテルの最新Xeon 第3世代スケーラブルプロセッサとIris Xe MAXグラフィックスプロセッサ(写真出典:インテル)

しかしながら、ハードウェアの性能を徹底的に引き出すために、特定のプロセッサやアーキテクチャーに依存したアプリケーションを開発してしまうことにも課題があります。

特定のプロセッサやアーキテクチャーに依存したコードは、さらに優れたアーキテクチャーのハードウェアが登場したときに、それらへの移植を難しくしてしまい、将来の性能や効率を改善する機会を失う可能性を高めてしまうのです。

理想は単一のコードで、現在のCPUやGPUやFPGAから将来のプロセッサまで性能を引き出せる、クロスアーキテクチャー対応のソフトウェアを実現できることです。

そしてその理想を実現しようとしているのが、インテルなどが取り組んでいる「oneAPI業界イニシアチブ」です。

fig

oneAPI業界イニシアチブの取り組み

oneAPI業界イニシアチブは、ハードウェアの違いを意識することなくソフトウェアの開発が行えるソフトウェア環境の実現を推進する団体です。

そのためのプログラミング言語やライブラリなどを提供しています。

細かいところまでユーザー自身がプログラミングしたい場合には、「データ並列C++」(DPC++:Data Parallel C++)と呼ばれるC++をベースにしたプログラミング言語が用意されており、効率的な開発を進めたい場合には用途別のライブラリが用意されています。

oneAPI業界イニシアチブは2019年にスタートし、さまざまな企業や団体、学術機関がさまざまなプロセッサやアーキテクチャーへ対応への協力や支援を行っています。

インテル oneAPI ツールキット 2022

このoneAPI業界イニシアチブのソフトウェア群をベースに、インテルのプロセッサやGPUなどのハードウェアの能力を引き出すことに特化したソフトウェアパッケージ製品が「インテル oneAPI ツールキット 2022」です。

fig

インテル oneAPI ツールキット 2022は、「ベース・ツールキット」と、目的別のアドオンとして「HPCツールキット」「IoTツールキット」「AIアナリティクス・ツールキット」「レンダリング・ツールキット」のラインナップが用意されています。

ベース・ツールキットは、DPC++によるダイレクトプログラミングとライブラリによるAPIプログラミングをサポート。パフォーマンスチューニングを行う上で欠かせない解析ツールやデバッグツールも含まれています。

これによりインテルのプロセッサや内蔵GPU、ディスクリートGPU、FPGAなど多様なハードウェアのネイティブコードを完全にサポートします。

ベース・ツールキットの主要な構成要素であるDPC++と、インテルAdvisor、インテルVTuneプロファイラーについて見ていきましょう。

プログラミング言語を学び直すことなく開発可能

DPC++は、標準のC++と、OpenGLなどの標準規格を策定するThe Khronosグループの「Khronos SYCL」をベースに、コミュニティによる拡張が行われたプログラミング言語です。

fig

C++を知っているプログラマであれば新しくプログラミング言語を学び直すことなく、馴染みのある形式でコードを記述しつつハードウェアの性能を最大限に引き出すことが可能となっています。

DPC++では、ホストコードと呼ばれるCPUで実行される部分のコードと、GPUやFPGAのようなアクセラレーターデバイスで実行することを想定したコードを混在して同一のソースコード内に記述できます。

fig

処理がアクセラレーターデバイスでの実行を想定した部分にたどり着くと、GPUやFPGAといった選択したハードウェア上で非同期に処理が行われ、そのあいだホストプログラムは別の処理を実行します。

このハードウェアの選択は開発者が指定できるほか、GPUが使える場合には優先して使うと言った優先度の設定も可能になっているため、実行するマシンのハードウェア構成に適合した実行を行えます。

コードを最適化するためのアドバイザやプロファイラー

ではコードのどの部分をCPU以外のデバイスへオフロードして実行すべきで、それによりどのくらいの速度向上が見込めるのか? これをシミュレーションし、ビジュアルに見せてくれるのが「Advisor」です。

fig

Advisorでは、CPUのマルチコアやキャッシュを最適に使うためのアドバイスや、コードのどの部分をGPUなどにオフロードさせるべきか、その際にどのくらい性能が向上するかの推定もしてくれます。

一方「VTuneプロファイラー」は、コードのどこにチューニングの改善余地があるか、キャッシュへのヒット率の改善から演算内容の改善、処理すべきハードウェアの選択などを実行結果のプロファイルを元に示してくれます。

fig

これらのツールを用いることで、DPC++のコードに関する総合的な最適化がカバーできるわけです。

「インテル oneAPI ツールキット 2022」はほぼ毎年アップデートが継続して行われているoneAPIツールキットの最新版です。

今回の最新バージョンでは最新のインテルデバイスへの対応、Fortranコンパイラの登場、解析ツールの強化により将来のGPUに移行した場合の性能上のメリットを予測するなど、より強力な開発ツールとなっています。

fig

これらにより、最新のハードウェア能力を最大限引き出す「インテル oneAPI ツールキット 2022」を安心して導入することができます。