34

私は、OpenCL エコシステムと、Vulkan がどのように機能するかを理解しようとしています。

  • OpenCL は、SPIR にコンパイルできるカーネルを使用して、GPU と CPU でコードを実行するためのフレームワークであることを理解しています。
  • Vulkan は、同じ SPIR 言語を使用してコンピューティング API としても使用できます。
  • SYCL は、OpenCL コードを適切な標準準拠の C++14 として記述できるようにする新しい仕様です。この仕様の無料の実装はまだないというのが私の理解です。

とすれば、

  • OpenCL は Vulkan とどのように関係していますか? OpenCL が高レベルでデバイスを抽象化していることは理解していますが、内部で Vulkan を使用していますか (または使用できますか?) (ベンダー固有のドライバーに依存する代わりに)

  • Vulkan はコンピューティング API とグラフィックス API の両方として宣伝されていますが、コンピューティング部分のリソースはほとんど見つかりませんでした。何故ですか ?

  • Vulkan には、OpenGL よりもパフォーマンス上の利点があります。Vulkan と OpenCl についても同じことが言えますか? (悲しいことに、OpenCL は CUDA より遅いことで有名です。)

  • SYCL は内部で OpenCL を使用していますか、それとも Vulkan を使用できますか? それとも、どちらも使用せず、代わりに実装される低レベルのベンダー固有の API に依存していますか?

4

2 に答える 2

28

OpenCL は vulkan とどのように関係していますか? OpenCL が高レベルでデバイスを抽象化することは理解していますが、内部で Vulkan を使用していますか (または使用できますか?)

それらは互いにまったく関係がありません。

技術的には同じ中間シェーダー言語を使用していますが、Vulkan はカーネル実行モデルを禁止し、OpenCL はシェーダー実行モデルを禁止しています。そのため、OpenCL 用のシェーダーをそのまま Vulkan に貼り付けたり、その逆にすることはできません。

Vulkan は計算 API とグラフィック API の両方として宣伝されていますが、計算部分のリソースがほとんど見つかりませんでした。なぜでしょうか?

クロノス グループは、誤解を招く宣伝文句が好きだからです。

Vulkan は、OpenGL と同じコンピューティング API ではありません。コンピュート シェーダーが含まれている場合がありますが、機能が制限されています。OpenCL 計算操作でできることは、OpenGL/Vulkan CS では利用できません。

Vulkan CS は、OpenGL の CS と同様に、1 つの目的で使用することを目的としています: グラフィック操作をサポートすることです。フラスタム カリングを行うには、間接グラフィックス コマンドを作成し、パーティクル システムを操作します。CS は、グラフィカル シェーダーと同じ数値精度で動作します。

Vulkan には、OpenGL よりもパフォーマンス上の利点があります。Vulkan と OpenCl についても同じことが言えますか?

計算システムのパフォーマンスは、主にその実装の品質に基づいています。遅いのは OpenCL ではありません。可能性よりも遅いのは、OpenCL の実装です。

この点では、Vulkan CS も例外ではありません。パフォーマンスは、ドライバーの成熟度に基づいています。

また、繰り返しますが、Vulkan CSでは実行できないOpenCL 計算操作で実行できることがたくさんあるという事実があります。

SYCL は内部で OpenCL を使用していますか、それとも vulkan を使用できますか?

クロノス・グループ より:

SYCL (「シックル」と発音) は、OpenCL の基本的な概念、移植性、および効率性に基づいて構築された、ロイヤリティ フリーのクロスプラットフォームの抽象化レイヤーです...

はい、OpenCL の上に構築されています。

于 2016-11-20T14:23:15.850 に答える
9

OpenCL は vulkan とどのように関係していますか?

どちらも、複数のスレッドを使用して通信オーバーヘッドを削減するために、キューを使用して、ホストから GPU および GPU からホストに分離可能な作業をパイプライン処理できます。Directx-opengl はできませんか?

  • OpenCL: 2009 年 8 月 28 日の初回リリース。より広範なハードウェア サポート。ポインターは許可されていますが、デバイスでのみ使用できます。スレッド間で共有されるローカル メモリを使用できます。hello world を開始する方がはるかに簡単です。コマンドがデバイス側でキューに入れられていない限り、コマンドの API オーバーヘッドがあります。暗黙的なマルチデバイス同期または明示的な管理を選択できます。バグは 1.2 でほぼ修正されていますが、バージョン 2.0 についてはわかりません。

  • Vulkan: 2016 年 2 月 16 日の初回リリース (ただし、2014 年からの進捗)。より狭いハードウェア サポート。SPIR-V はポインターを処理できますか? そうでないかもしれない?ローカル メモリ オプションはありませんか? ハローワールドを始めるのは難しい。API のオーバーヘッドが少ない。暗黙的なマルチデバイス管理を選択できますか? Dota-2 ゲームやその他のゲームではまだバグがあります。グラフィックスとコンピューティング パイプラインの両方を同時に使用すると、さらに多くのレイテンシを隠すことができます。

opencl に vulkan が含まれていた場合、それは 7 ~ 9 年間公開されていません。彼らがそれを追加できるなら、なぜ彼らはopenglのためにそれをしなかったのですか?(おそらくphysx/cudaによる圧力のため?)

Vulkan は計算 API とグラフィック API の両方として宣伝されていますが、計算部分のリソースがほとんど見つかりませんでした。なぜでしょうか?

opencl と同じように、もっと時間が必要です。

ここで計算シェーダーに関する情報を確認できます。

https://www.khronos.org/registry/vulkan/specs/1.0/xhtml/vkspec.html#fundamentals-floatingpoint

以下は、計算シェーダーによって管理されるパーティクル システムの例です。

https://github.com/SaschaWillems/Vulkan/tree/master/computeparticles

その下には、レイトレーサーと画像処理の例もあります。

Vulkan には、OpenGL よりもパフォーマンス上の利点があります。Vulkan と OpenCl についても同じことが言えますか?

  • Vulkan は別の API と同期する必要はありません。コマンドキュー間のコマンドバッファの同期についてです。
  • OpenCL は、共有バッファー (cl-gl または dx-cl 相互運用バッファー) を使用する前に、opengl または directx (または vulkan?) と同期する必要があります。これにはオーバーヘッドがあり、バッファーのスワッピングとパイプライン処理を使用して非表示にする必要があります。共有バッファーが存在しない場合は、opengl または directx を使用して最新のハードウェアで同時に実行できます。

OpenCL は悲しいことに CUDA より遅いことで悪名高い

それはそうでしたが、今では成熟し、cuda に挑戦しています。特に、バージョン 2.1 を使用するすべてのゲーム GPU から fpgas まで、はるかに幅広いハードウェアをサポートしています。たとえば、将来的に Intel は fpga を Core i3 に入れ、それを (soft-x86 core ip) で有効にすることができます。 ) メニーコア CPU モデルは、GPU パフォーマンスと CPU の間のギャップを埋めて、CPU-PHYSX ゲーム体験をアップグレードするか、単純に OpenCL 物理実装にそれを形成させ、ソフトコアの %10 の代わりに少なくとも %90 のダイ領域を使用します。 -%20 有効に使用された領域。

同じ価格で、AMD gpu は opencl でより高速に計算でき、同じ計算能力で Intel igpu は消費電力が少なくなります。(編集:Nvidiaが優勢であるアルゴリズムがキャッシュパフォーマンスに敏感な場合を除く)

その上、私は SGEMM opencl カーネルを作成し、HD7870 で 1.1 Tflops で実行し、インターネットをチェックしたところ、CUDA で人気のあるタイトルを使用して同じパフォーマンスの GTX680 で SGEMM ヘンチマークを見ました! (gtx680/hd7870 の価格比は 2 でした)。(編集: Nvidia の cc3.0 は、グローバル配列を読み取るときに L1 キャッシュを使用せず、カーネルは純粋にローカル/共有メモリ + いくつかのレジスタを「タイル状」にしました)

SYCL は内部で OpenCL を使用していますか、それとも vulkan を使用できますか? それとも、どちらも使用せず、代わりに実装される低レベルのベンダー固有の API に依存していますか?

ここ、

https://www.khronos.org/assets/uploads/developers/library/2015-iwocl/Khronos-SYCL-May15.pdf

言う

(まだ!) OpenCL を持たないターゲットを処理するためのメソッドを提供します。

フォールバック CPU 実装はデバッグ可能です!

そのため、純粋なスレッド バージョン (Java の aparapi に似ています) にフォールバックできます。

SYCL オブジェクトから OpenCL オブジェクトにアクセスできます OpenCL オブジェクトから SYCL オブジェクトを構築できます

OpenGL との相互運用性は SYCL のまま - 同じ構造/型を使用

それはopenclを使用します(おそらく直接ではなく、アップグレードされたドライバー通信を使用しますか?)、openclと並行して開発されますが、スレッドにフォールバックできます。

最小の OpenCL 1.2 組み込みデバイスから最先端の OpenCL 2.2 アクセラレータまで

于 2016-11-20T13:39:03.123 に答える