Intel Ctベータ-何、なぜ、どのように

2週間前、彼はクライアントがIntel Ctベータ版を使い始めるのを手伝いました。 同時に、いつものように、彼はそれを少し理解しました、そして今私はそれを共有したいと思います。



最近、 サイトに登録してCtベータをダウンロードできるようになりました。 これまでのところ、Windowsのみですが、しばらくするとLinuxのベータ版が表示されるはずです。



ウィキペディアでIntel Ctの記事を注意深く読んだら... Ctの本質については何も学ぶことができません。 ロシア語でも情報はほとんどありません。 残念なことに、個人的には便利でエレガントなように思える多くのテクノロジーがあります。



ひと言で言えば、Intel Ctは、プログラマーが多くの形式で最新かつ有望なハードウェアの並列処理を十分に透過的に利用できるようにするテクノロジーです。 地形はかなり損なわれています-CUDA、OpenCL、Cilk ++、TBB、OpenMP、MPIなど それぞれのアプローチには、独自の適用分野、長所と短所、支援者、独自の開発分野があります。 Ctの範囲は、データ並列アルゴリズムの実装です。 したがって、上記のCtのタスクのリストから最も近いのはCUDAとOpenCLです。



Ct DSLを呼び出します。 C ++で実装された独自のランタイムがあります(テンプレート、演算子のオーバーロード、すべてが非常に理想的です)。 当然、CtプログラムはIntelコンパイラーによってコンパイルされます。 最新のgccもトリックを行います。



メインタイプはVecです。 そのインスタンスは不変で、値で渡され、演算子は新しいインスタンスを返します。 したがって、機能的な後味、およびマルチスレッドの正確さを提供する際の顕著な利点。 データの競合やデッドロックの問題はありません(設計上)。

Vecは異なります-1次元、2次元、3次元、スパース。 それらの要素は、ベクトルを含むさまざまなタイプになります。 例えば

Vec charArray(ソース、幅); //ベクトルを作成して初期化します

Vec2D intArray(ソース、幅、高さ);

rcall(ct_foo)(charArray、1); //サンプルCtコードを呼び出します。



プログラムは、C ++エリアとCtエリアの2つのエリアに分かれています。 同じ.cppファイルで可能です。 C ++のフィールドでは、ベクトルを宣言および初期化できます。Ctのフィールドでは、それらに対して演算を実行できます。 たとえば、上記のコードはC ++エリアです(ここでは少し簡略化しています)。

そして、ここにCtエリアがあります:

void ct_foo(VecおよびcharArray、int t)

{

charArray + = t; //すべてのベクトルデータをスカラーで更新します。

}



サンプルディレクトリまたはここで、ささいな例が見つかります



コンパイルには、デバッグとリリースの2種類があります。 主な違いは、異なるライブラリとのリンクです。 デバッグライブラリとリンクした後、すべてがインテルデバッガー(およびgdbでも)で透過的に動作し、通常のC ++コードのようにデバッグできます。

リリースバージョンはそのランタイムとリンクしています(実際には仮想マシンがあります-GC、JITがあります)。 起動中に、実行されるアーキテクチャの再コンパイルが行われます。 十分に速い再コンパイル。 ベータ版でさえ、これはそれほど長いプロセスではありません-計算問題の平均サイズで約300ミリ秒を測定しました。



このような比較的複雑な内部アーキテクチャの利点は何ですか? そして、開発者に上位互換性を提供する他の方法は?

たとえば、突然:)プロセッサが表示された場合、複数の「ワイド」x86コアと、共有メモリ上にある多数の単純なx86コアで構成されます。 または、SIMDとマルチコアを同時に使用する必要があります。 異種カーネルがかなり遠い将来の問題である場合、SIMDレジスタはすぐに256ビット拡張されます。 そこに、あなたは見て、512ビットがすぐそこにあります。 また、再コンパイルは必要ありません-動的ライブラリにリンクするだけです。 さて、ランタイムで。

Ctのコードは、計算タスクの観点からアルゴリズムを表現しており、実行可能なプラットフォームに対して完全に透過的です。 Rantimeはプラットフォームを理解しているため、実装を変更したり、ブロック/ワープ/スレッドを心配したりする必要はありません。



この製品はまだ正式にリリースされていないため、機能を詳細に説明することはできません。とにかく変更されます。 しかし、急進的である可能性は低く、これが発生した場合、書かれたソフトウェアをリリースに適合させるのに役立つスクリプト/ドキュメントが利用できる可能性が高いです。 ベータ版を今すぐダウンロードすると、Docディレクトリに素晴らしいファイルct_userguide.pdfがあります。 すべてがそこにあります。 今回は、テクニカルライターが特に良い仕事をしました。 もちろん、すべてが私たちの言語で書かれているわけではありませんが、誰がやめたのでしょうか? さらに多くの情報がリリースの近くに表示され、コメントでいくつかの質問に答えることができます。



対象分野に論理的に関連する1つの製品に言及することなく、非常に多くの手紙を書くことは困難でした。 ここのラボではそれほど遠くありませんが、残念ながら、まだ新しいことは言えません。



All Articles