こんにちは、Habraコミュニティの皆さん。
おそらく、異機種混合システム向けのアプリケーション開発の新しい標準であるOpenCLについて、多くの人がハブで聞いたり読んだりしています。 そうです、これはGPU用のアプリケーションを開発するための標準ではありません。多くの人が考えるように、OpenCLはもともとはもっと何かとして考えられていました。
OpenCLの前提条件
異種システムを見つけることができる主な場所は、高性能コンピューティングです。境界層での物理プロセスのモデリングから、3次元シーンのビデオコーディングとレンダリングまでです。 以前は、スーパーコンピューターまたは非常に強力なデスクトップシステムを使用して、同様のタスクが解決されていました。 NVidia CUDA / AMD Streamテクノロジーの登場により、GPUの計算能力を使用するプログラムを比較的簡単に作成できるようになりました。
同様のプログラムが以前に作成されたことは注目に値しますが、GPGPUアプリケーションの作成プロセスを促進することでGPGPUをより一般的にしたのはNVidia-CUDAでした。 コアとしての最初のGPGPUアプリケーション(CUDAおよびOpenCLのカーネル)はシェーダーを使用し、データはテクスチャにパックされました。 そのため、OpenGLまたはDirectXに精通する必要がありました。 少し後にBrook言語が登場し、プログラマーの生活が少し簡素化されました(AMD Streamはこの言語に基づいて作成されました(Brook +を使用))。
CUDAは勢いを増し始めましたが、その間(またはむしろ少し前に)、富士山のふもとの地下深くにある鍛造で、日本のエンジニア
同じ頃(約1年前)に、S3 Graphics(実際にはVIA)も復活し、新しいS3 Graphics Chrome 500グラフィックアダプターを公開しました。会社自体によると、このアダプターはあらゆる種類の計算を高速化する方法も知っています。 ソフトウェア製品(グラフィックエディター)が付属しており、このような高速化の魅力をすべて使用しています。 メーカーのウェブサイトにある技術の説明。
それで、私たちには何がありますか:計算が実行されるマシンには、x86、x86-64、Itanium、SpursEngine(Cell)、NVidia GPU、AMD GPU、VIA(S3 Graphics)GPUが含まれる場合があります。 これらのタイプのプロセスごとに、独自のSDK(VIAを除く)、独自のプログラミング言語、およびプログラミングモデルがあります。 つまり、レンダリングエンジンまたはボーイング787の翼荷重計算プログラムを単純なワークステーション、BlueGeneスーパーコンピューター、または2つのNVidia Teslaアクセラレーターを搭載したコンピューターで動作させる場合、各プラットフォームはかなりの部分を書き換える必要があります。そのアーキテクチャには厳しい制限があります。
プログラマーは怠け者であり、すべての機能を考慮に入れて5つの異なるプラットフォームに同じことを書きたくないため、さまざまなソフトウェアツールとモデルの使用方法を学びます。顧客は貪欲な人々であり、各プラットフォームのプログラムに別個の製品として支払いたくないのですまた、プログラマー向けのトレーニングコースの費用を支払うために、異種環境で実行されるプログラムの単一の標準を作成することが決定されました。 これは、一般的に言えば、プログラムは、NVidiaとAMD GPU、Toshiba SpursEngineなどの両方がインストールされているコンピューターで実行できる必要があることを意味します。
問題解決
オープンスタンダードを開発するために、我々はそのようなスタンダードの開発にすでに経験がある(非常に成功している)人々を引き付けることを決めました。KhronosGroup、その良心にはすでにOpenGLとOpenMLなどがあります。 OpenCLは、Khronos Group Webサイトに記載されているApple Inc.の商標です。 「OpenCLはApple Inc.の商標であり、Khronosのライセンスに基づいて使用されています。 適合製品に関連するOpenCLロゴおよびその使用に関するガイドラインは、次の場所にあります。
http://developer.apple.com/softwarelicensing/agreements/opencl.html 。 " 開発(そしてもちろん資金調達)では、Appleのほかに、AMD、IBM、Activision Blizzard、Intel、NVidiaなどのITの大物が参加しました。 (全リストはこちら )。
NVidiaは、プロジェクトへの参加を特に公表せず、CUDAの機能とパフォーマンスを急速に向上させました。 一方、複数の主要なNVidiaエンジニアがOpenCLの作成に参加しました。 おそらく、OpenCLとCUDAの構文的およびイデオロギー的な類似性を大幅に決定したのは、NVidiaの参加でした。 ただし、プログラマはこの恩恵を受けるだけでした。必要に応じて、CUDAからOpenCLに切り替える方が簡単です。
この規格の最初のバージョンは2008年末に公開され、その後いくつかの改訂が行われました。
NVidiaは、標準が公開されて間もなく、OpenCLのサポートは難しくなく、すぐにCUDAドライバーAPIを介してGPUコンピューティングSDKの一部として実装されると発表しました。 NVidiaの主要なライバルであるAMDからそのようなことは聞かれませんでした。
OpenCLのドライバーはNVidiaによってリリースされ、標準との互換性のテストに合格しましたが、限られた範囲の人々-登録開発者のみが引き続き利用可能です(私の場合、誰でも登録申請を提出できますが、検討には2週間かかり、その後メールで招待状が送信されました) 。 SDKとドライバーへのアクセスの制限により、現時点では修正できない問題やエラーがあると考えられます。つまり、製品はまだベータテスト中です。
NVidiaにOpenCLを実装するのは非常に簡単なタスクでした。主なアイデアは似ているため、CUDAとOpenCLはどちらもC言語の拡張機能であり、同様の構文で、メインプログラミングモデルと同じプログラミングモデルを使用しています:データパラレル(SIMD)、OpenCLはタスクパラレルプログラミングもサポートしていますmodel-さまざまなカーネルを同時に実行できるモデル(ワークグループには1つの要素が含まれます)。 2つのテクノロジーの類似性は、NVidiaがCUDA向けの記述方法に関する特別なドキュメントをリリースしたという事実によってさえ示され、後でOpenCLに簡単に切り替えることができます。
現在の状況は?
NVidiaの主なOpenCL実装の問題は、CUDAと比較してパフォーマンスが低いことですが、新しいドライバーがリリースされるたびに、CUDAでのOpenCLのパフォーマンスはCUDAアプリケーションのパフォーマンスに近づいています。 開発者によると、CUDAアプリケーション自体のパフォーマンスは、ドライバーの初期バージョンの比較的低いものから現在の印象的なものまで、同じように変化しています。
そのときAMDは何をしていましたか? 結局のところ、AMD Streamが少なくともNVidia CUDAとの人気で競うことができないことを考慮して、新しいテクノロジーに大きな賭けをしたのは、AMD(クローズドPhysX対オープンHavoc、高価なIntel Thread Profiler対無料のAMD CodeAnalyst)でした-技術的には、CUDAからのStreamの遅れが原因だと思います。
2009年の夏に、AMDはStream SDKの新しいバージョンのOpenCL標準へのサポートとコンプライアンスの声明を発表しました。 実際、サポートはCPUに対してのみ実装されていることが判明しました。 はい、そうです、それは何も矛盾しません-OpenCLは異種システムの標準であり、CPUでカーネルを実行することを妨げるものは何もありません。さらに、システムに他のOpenCLデバイスがなければ非常に便利です。 この場合、プログラムは引き続き動作しますが、速度は遅くなります。 または、コンピューターのすべての計算能力を使用できます-GPUとCPUの両方、実際にはこれはあまり意味がありませんが、CPUで実行されるカーネルの実行時間はGPUで実行されるカーネルよりもはるかに長いため、速度CPUがボトルネックになります。 しかし、アプリケーションのデバッグには、これは便利です。
AMDグラフィックアダプター用のOpenCLのサポートにも時間がかかりませんでした-同社の最新レポートによると、グラフィックチップのバージョンは現在、規格の仕様への準拠を確認している段階です。 その後、すべての人が利用できるようになります。
OpenCLは鉄固有のシェルの上で動作する必要があるため、この規格がさまざまな異種システムで実際に同じになるためには、IBM CellとIntel Larrabieの両方で対応するシェル(ドライバー)をリリースする必要があります。 これまでのところ、これらの巨人からは何も聞いていません。そのため、OpenCLは、CUDA、Stream、DirectX ComputeとともにGPUの別の開発ツールのままです。
AppleはOpenCLのサポートも主張していますが、これはNVidia CUDAによって提供されます。
また、サードパーティの開発者は現在以下を提供しています:
- OpenTKは、OpenGL、OpenAL、およびOpenCL for .Netのラッパーライブラリです。
- PyOpenCL - Pyton用のOpenCLのラッパー。
- OpenCLのJavaラッパー。
おわりに
OpenCLテクノロジーは、ゲーム開発者からチップメーカーまで、さまざまなIT企業にとって興味深いものです。つまり、この分野の大手CUDAからこのタイトルを取得することで、高性能コンピューティングを開発するための事実上の標準になるチャンスがあります。
将来的には、この技術とは何か、その機能、長所と短所について説明する、OpenCL自体に関するより詳細な記事を計画しています。
ご清聴ありがとうございました。
興味深いリンク:
www.khronos.org/opencl-Khronos Group WebサイトのOpenCLページ
www.nvidia.com/object/cuda_opencl.html-NVidia OpenCL(ページの下部にあるさまざまなドキュメントへのリンク:OpenCLプログラミングガイドなど)
forums.amd.com/devforum/categories.cfm?catid=390&entercat=y-AMD OpenCLフォーラム
habrahabr.ru/blogs/CUDA/55566-オタク雑誌のOpenCLの小さな概要
developer.amd.com/GPU/ATISTREAMSDKBETAPROGRAM/Pages/default.aspx-AMD Stream SDK v2.0ベータページ
ati.amd.com/technology/streamcomputing/gpgpu_history.html-AMD GPGPU開発履歴