インタビュー:InteloneAPIとDirectParallelC++の約束

公開: 2022-03-11

インテルは、地球上で最も影響力のある革新的なテクノロジー企業の1つですが、ソフトウェア開発について考えるときに頭に浮かぶ最初の名前ではありません。 40年前、Intelの8088プロセッサはPC革命の開始に役立ちました。これをデスクトップまたはラップトップで読んでいる場合は、IntelInsideを使用している可能性があります。 同じことが、私たちが毎日依存しているサーバーやその他のさまざまなハードウェアにも当てはまります。 それは、AMDや他のベンダーが競争力のある製品を持っていないということではありませんが、Intelは依然としてx86CPU市場を支配しています。

ソフトウェアエンジニアは、インテルのハードウェアプラットフォームを何十​​年も使用しており、通常はその背後にあるソフトウェアやファームウェアを考慮していません。 より多くの仮想化パフォーマンスが必要な場合は、マルチコア、ハイパースレッドCore i7、またはXeon製品を選択しました。 ローカルデータベースをいじくり回すために、彼らはIntelSSDを入手することができます。 しかし今、Intelは、開発者にも自社のソフトウェアをもっと使い始めてほしいと望んでいます。

Intel oneAPIとは何ですか?

CPU、GPU、FPGA、AIアクセラレータなど、さまざまなハードウェアアーキテクチャ間での開発を簡素化することを目的とした、単一の統合プログラミングモデルとしてIntelによって宣伝されているoneAPIを入力してください。 それらはすべて非常に異なる特性を持ち、さまざまなタイプの操作に優れています。

Intel OneAPIとは何ですか?

Intelは現在、「ソフトウェアファースト」戦略に取り組んでおり、開発者が注目することを期待しています。 oneAPIの背後にある壮大なアイデアは、さまざまなハードウェアに1つのプラットフォームを使用できるようにすることです。したがって、開発者は、CPUやGPUのコーディング時に、異なる言語、ツール、ライブラリを使用する必要がありません。 oneAPIを使用すると、ツールボックスとコードベースは両方で同じになります。

これを可能にするために、Intelは、特定のハードウェア(GPUやFFPGAなど)のプログラミングに通常使用される独自の言語に代わるオープンソースとして、Data Parallel C ++(DPC ++)を開発しました。 この新しいプログラミング言語は、さまざまなハードウェアターゲットに展開するコンパイラを含めながら、C++の生産性と親しみやすさを提供することになっています。

Data Parallel C ++には、データの並列処理とヘテロジニアスプログラミングをサポートするために、KhronosGroupのSYCLも組み込まれています。 Intelは現在、DevCloudへの無料アクセスを提供しており、ソフトウェアエンジニアは、手間をかけずにツールを試して、クラウドでoneAPIとDPC++をいじくり回すことができます。

クロスアーキテクチャ開発のためのoneAPI

しかし、待ってください、それは他のベンダーによって作られたハードウェアで動作しますか? ライセンスについてはどうですか、それは無料ですか? はい、はい:oneAPIは、ハードウェアに依存せず、オープンソースになるように設計されており、変更されることはありません。

oneAPIの詳細については、インテルのアーキテクチャ、グラフィックス、ソフトウェアグループのバイスプレジデントであり、インテルのテクニカル、エンタープライズ、クラウドコンピューティングのゼネラルマネージャーであるSanjivM.Shahとその起源と将来について話し合いました。

Sanjiv: oneAPIの内容に関しては、4つの部分として考えています。 1つは言語と標準ライブラリ、2つ目はディープラーニングツールのセット、3つ目は実際にはさまざまなアクセラレータを抽象化できるハードウェア抽象化レイヤーとソフトウェアドライバーレイヤー、4つ目はドメインに焦点を当てたライブラリのセットです。 、Matlabなどのように。 これらはoneAPIの4つのカテゴリですが、oneAPIの9つの要素について詳しく説明することができます。 これらの9つの要素は、基本的に、Data ParallelC++と呼ばれる新しい言語とその標準ライブラリです。

2つの学習ライブラリがあります。1つはニューラルネットワーク用で、もう1つは通信用です。 ハードウェア抽象化のためにレベル0と呼んでいるライブラリがあり、4つのドメインに焦点を合わせたライブラリがあります。 私たちはこれを非常にオープンな方法で行っています。 これらすべての仕様はすでに公開されており、利用可能です。 それらをバージョン0.5と呼んでいます。 2020年末までに1.0に移行する予定であり、これらすべてのオープンソース実装もあります。 繰り返しになりますが、私たちの目標は、人々がすでに存在するものを活用できるようにすることです。 ハードウェアベンダーがこの言語を実装したい場合は、オープンソースのものを使用して実行できます。

Q:アルゴリズムと実装に関して、それはどのように機能しますか?

私たちが提供しているのは、アルゴリズムが使用するプリミティブ、つまり基礎となる数学的プリミティブと通信プリミティブです。 通常、アルゴリズムの革新はそれよりも高いレベルで行われており、基本的な数学、行列の数学、畳み込みの数学などを実際にやり直しているわけではありません。 それは、その数学を使用する新しい方法とコミュニケーションパターンを使用する新しい方法を考え出すことです。 私たちの目標は、他の人がその上で革新できるように、基本的なレベル0を提供することです。

Q:ハードウェアレベルではどのように機能しますか?

ハードウェアプロバイダーの場合、AIマトリックス、たとえばAI ASICを構築している人を取り上げましょう。そのハードウェアベンダーがAIエコシステムを「プラグイン」して活用するには、2つの方法があります。 1つは、レベル0と呼ばれるこの低レベルのハードウェアインターフェイスを提供することです。標準APIを使用してレベル0のバージョンを提供する場合は、必要に応じてオープンソースを活用し、その後、上記のすべてのソフトウェアレイヤーを活用できます。それを自動的に活用できます。

レベルゼロの完全な一般性を提供するために、セグメントに焦点を合わせたASICにとっては難しいかもしれません。 したがって、その代わりに、ドメインとディープラーニングライブラリにある数学カーネルと通信カーネルを提供することもできます。その後、これらのライブラリをより高いレベルのフレームワークに「配管」する作業を行います。彼らはそれを自動的に取得します。

Q:現在お持ちのバージョンは0.5と指定されており、完全な仕様は2020年末までに準備が整うはずだとおっしゃいました。

したがって、oneAPIイニシアチブには2つの部分があります。 1つは業界の部分であり、もう1つはインテル製品です。 業界仕様は0.5で、年の半ば頃には1.0にしたいと考えています。 それと並行して、Intelは一連の製品を構築しており、Intelが構築している製品は現在ベータ版であり、0.5仕様を実装しています。 年末までに、1.0製品を手に入れたいと考えています。

インテルの製品は、oneAPIの9つの要素を超えています。これは、提供する基本的なプログラミング要素に加えて、デバッガー、アナライザー、互換性ツールなど、プログラマーが実際に必要とするものを提供して、既存の言語からデータに移行できるようにするためです。パラレルC++言語。

Q:開発者が移行するのはどのくらい難しいですか? より広い環境は、彼らが何年も使用してきたものと似ていますか?

はい、それは非常に似ています。 Data Parallel C ++について少し説明します。これは、私たちが行っていることの大きな部分だからです。 DPC++は3つのものです。 これは、ISO国際標準のC++言語に基づいています。 SYCLと呼ばれる標準を定義するKhronosと呼ばれるグループがあり、SYCLはC++の上に階層化されています。 SYCLを取得し、SYCLの上に拡張機能を追加します。 Data Parallel C ++を構築する方法は、実際には拡張機能を備えたC ++であり、これがSYCLです。

oneAPIDPC++コンパイラとランタイム

どのC++コンパイラでもコンパイルできます。 DPC ++の利点は、どのコンパイラでもコンパイルできることです。知識のあるコンパイラだけが、その言語の内容を利用してアクセラレータコードを生成できます。 この言語を実行する方法は、非常にオープンに実行しているため、Data ParallelC++に関するすべての議論はSYCL委員会で行われています。 実装はオープンソースであり、すべての拡張機能はすでに公開されており、将来のSYCL標準への優れたグライドパスを確保するために非常に慎重に取り組んでいます。 今から5〜10年後を見下ろすと、ISOC++へのグライドパスもあります。

Q:コンパイラとDPC ++への移行に関して、学習曲線はそれほど問題にはならないでしょうか?

はい、もちろん、どこから始めているかによります。 C ++プログラマーの場合、学習曲線は非常に小さくなります。 Cプログラマーの場合、C ++を学ぶというハードルを乗り越える必要がありますが、それだけです。 非常によく知られているC++です。 OpenCLのような言語に慣れているプログラマーにとって、それは非常に似ているはずです。

私が強調しなければならない他の部分は、LLVMインフラストラクチャを使用してオープンソースで作業を行っているということです。 すべてのソースはすでに開いています。IntelGitHubリポジトリがあり、言語の実装を確認したり、オープンソースコンパイラをダウンロードしたりすることができます。 すべてのインテルツール、ベータ版の製品は、誰でも無料で遊んだりダウンロードしたりできます。 また、開発者向けクラウドも利用できます。ユーザーは何もダウンロードしたりインストールしたりする必要がなく、コードを記述して、説明したすべてのツールを使い始めることができます。

Q:C ++はパフォーマンスが高く、比較的単純ですが、古くなり、開発が遅く、利害関係者が多すぎるため、すべてが遅くなっています。 これは明らかにDPC++には当てはまりません。 反復と更新がはるかに高速になりますか?

あなたは私たちにとって非常に重要なポイントに到達したと思います。それは、標準によって減速されない急速な進化です。 ですから、私たちは標準とオープンに話し合いをしたいので、標準に入る方法がありますが、それも迅速に行いたいと思っています。

言語は、アーキテクチャが進化するにつれて、ユーザーと実装者によって共同設計されたときに最もよく機能します。 私たちの目標は、物事を実践し、物事を行うための最良の方法を見つけ、それらを標準にするという、非常に高速な反復コード設計です。 したがって、絶対に、高速反復は大きな目標です。

Q:私の同僚の何人かによって提起された1つの質問(彼らは大企業から来るものに対するオープン性についていくらか懸念していることをおそらく理解できます):DPC ++は常にすべてのユーザーとベンダーにオープンなままですか?

絶対! 仕様はクリエイティブコモンズライセンスで行われます。 誰でも仕様を使用し、必要に応じてそれを取得してフォークし、進化させることができます。 oneAPIのすべての要素がオープンソースであるとは限らないことを強調したいと思いますが、私たちはほとんどすべての要素をオープンソースにする道を進んでいます。 そのすべてが、誰でも手に入れて活用することができます-それは実装に利用できます。

英国以外の企業であるCodeplayは、DPC ++のNvidia実装を発表しました。私たちは、すべてのハードウェアベンダーとソフトウェアベンダーに移植を行うことを本当に奨励しています。 私たちは、アクセラレータが複数のベンダーに一般的になりつつある業界でユニークなポイントにいます。 それが歴史の中で起こったとき、プロバイダーが1つしかないときは、その言語が支配的です。 ソフトウェア業界は、標準ソリューションと複数のプロバイダーを求めています。

ここで私たちがやろうとしているのは、約25年前にOpenMPで行ったことです。ここでは、複数の並列言語がありましたが、実際に支配的な言語は1つもありませんでした。 そのすべてを取り入れて標準に統合しました。これは、25年後のHPC向けプログラミング方法です。

Q:DPC ++は、今後数年間で多くの進化を遂げると言うのは正しいでしょうか? テンソルはどうですか、新しいハードウェアはどうですか?

はい、絶対に、あなたは正しいです。 登場する新しいハードウェアをサポートするには、言語を進化させる必要があります。 それがより高速な反復の目標です。 強調したいもう1つのポイントは、必要に応じてアーキテクチャ固有の拡張機能をプラグインできるように、データ並列C++を設計していることです。

そのため、複数のアーキテクチャにまたがって実行したい標準言語ですが、非常に重要なオーディエンスであるオーディエンスが可能な限り最高のパフォーマンスを必要とする場合があることも認識しています。 彼らは、必ずしもアーキテクチャに移植可能であるとは限らない非常に低レベルのプログラミングに飛び込みたいと思うかもしれません。 拡張機能とメカニズムを構築しているので、アーキテクチャ固有のテンソルなどの拡張機能を使用できます。

Q:開発者は、ハードウェア用に生成されたコードをどの程度制御できますか? システムとさまざまなアクセラレータ間のメモリ管理をどの程度制御できますか?

SYCLからバッファの概念を借用しています。これは、ユーザーに非常に明示的なメモリ制御を提供しますが、それに加えて、ユニファイドメモリの概念も追加しています。 私たちの目標は、メモリを管理するだけでなく、迅速なコードを生成するために、プログラマーが必要とするレベルの制御を可能にすることです。 SYCLに追加する拡張機能には、サブグループ、リダクション、パイプなどがあります。 これにより、さまざまなアーキテクチャ用にはるかに優れたコードを生成できます。

Q:興味深い点は、Python用のoneAPIディストリビューションです。IntelはNumPy、SciPy、SciKitLearnを具体的にリストしています。 oneAPIを介してロックを解除できるパフォーマンスの向上と生産性のメリットに興味があります。 それに関する指標はありますか?

それは素晴らしい質問です。 私たちはそのエコシステムをサポートしています。 Pythonがアクセラレータを使用したいのはなぜですか? 数学ライブラリ、分析ライブラリからパフォーマンスを引き出すことです。 私たちが行っているのは、NumPy、SciPy、SciKit Learnなどを「配管」することです。これにより、その上にあるライブラリを活用して優れたパフォーマンスを得ることができます。 NumPy、SciPy、SciKit Learnなどのデフォルトの実装は、最適化されたネイティブパッケージで適切に実装されたものと比較して、非常に大きな利益を得ることができます。 200倍、300倍などのオーダーで利益が見られました。

Pythonでの私たちの目標は、妥当な割合、2倍以内、おそらくネイティブコードのパフォーマンスの80%以内に収めたいということです。 今日の最先端技術は、あなたが頻繁に10倍以上にいるということです。 すべての高性能タスクを配管して、実際には2倍以内、実際にはそれよりはるかに高くなるようにすることで、このギャップを埋めたいと考えています。

Q:どのような種類のハードウェアについて話しているのですか? 開発者は通常のワークステーションでこの可能性を解き放つことができますか、それとももう少し強力なものが必要になるでしょうか?

いいえ、どこにでもあります。 あなたが利益がどこから来ているかについて考えるならば、あなたは理解するでしょう。 通常のPythonライブラリは、CPUの仮想化機能を使用していません。 彼らはCPUのマルチコア機能を使用していません。 それらは最適化されておらず、メモリシステムとすべてが最適化されていません。 つまり、単純なプログラマーによって作成され、最適化なしでコンパイラーによってコンパイルされた行列の乗算になり、それを専門家がアセンブリコードに書き込んだものと比較します。 これら2つを比較すると、100倍以上のゲインが見られます。Pythonの世界では、基本的に、それが起こっていることです。

Pythonインタープリターと標準ライブラリは非常に高レベルであるため、最終的に作成されるコードは非常に単純なコードになります。 最適化されたライブラリを適切に使用すると、これらの大きなメリットが得られます。 ラップトップにはすでに2〜6または8個のCPUコアがあり、マルチスレッドであり、かなり適切なベクトル化機能を備えています。おそらく256、512です。したがって、ラップトップやワークステーションには多くのパフォーマンスがあります。 それをGPUにスケールアップすると、グラフィックスが利用可能になったら、ゲインがどこから来ているのかを想像できます。

統合されたグラフィックスを見ると、それらも非常に強力になっています。 統合されたグラフィックスが前世代よりも大幅に優れているIceLakeGen11を見たことがあると思います。 ラップトップでも、メリットがどこから得られるかがわかります。

Q:DevCloudの可用性についてはどうですか? 正しく思い出せば、現時点では誰でも無料で使用できますが、来年ゴールドになった後もそのまま使用できますか?

それは良い質問です。 この時点で、私は正直になります、私は答えを知りません。 この時点での私たちの意図は、それが永遠に自由になることです。 それは開発のためであり、遊んでいるためであり、そこにはたくさんの馬力があるので、人々は実際に走ることができます。

Q:では、数千人の開発者に試してもらいてもかまいませんか?

ああ、絶対にありません。 私たちはそれが起こることを望んでいます!

私たちがやろうとしていることを要約することができます。 まず、oneAPIに非常に興奮しています。 現在、市場には複数のベンダーが存在するため、マルチベンダーソリューションが軌道に乗る時が来ました。 今後登場するGPUだけでなく、ますます強力な統合GPU、およびFPGAロードマップを見ると、これらすべての標準を構築するためのエキサイティングな時期です。 私たちの目標は、生産性、パフォーマンス、および業界インフラストラクチャに基づいて構築できるようにすることです。

私が話した3つのオーディエンスについては、アプリケーション開発者はすでに利用可能であるため、物事を簡単に活用できます。 ハードウェアベンダーはソフトウェアスタックを利用して新しいハードウェアをプラグインできますが、ツールおよび言語ベンダーはそれを簡単に使用できます。 インテルは、世界中のすべての言語とすべてのツールを構築できるわけではないため、他の人が非常に簡単に活用および構築できるオープンソースインフラストラクチャです。