2

OpenCLの概要を読んだところ、CPU、GPGPU、DSPなどを実行するコードに適していると書かれています。ただし、コマンドリファレンスを見ると、すべて数学と画像タイプの操作のようです。文字列と言うものは何も見えませんでした。

これは、OpenCLを介してCPUで何を実行するのか疑問思いますか?

さらに、OpenCLを使用してGPGPUで並べ替えを実行できることも知っています。しかし、パターンマッチング、メタフォン抽出、辞書検索など、文字列の配列の処理を必要とする文字列処理を実行するために、これ(または、さらに言えば、現在のGPGPU)を使用することはありません。

編集 私は、Intelの今後のIvy Bridgeが、そのグラフィックスユニットに関して「OpenCL準拠」と宣伝されていることに気づきました。これは、CPUコアがOpenCLに準拠していないことを推測しますか、それともそのような推測はありませんか?

編集 非討論と建設性の利益のために、誰かが私の質問に答える公式の参考文献を私に指摘していただければ幸いです。

4

3 に答える 3

1

リンクはありませんが、これは、文字列を使用するアルゴリズムが多くの動的メモリ割り当てと分岐を行う可能性があるためだと思います。どちらもGPGPUには適していません。GPGPUはベクトル処理とも多くの共通点があるため、さまざまなサイズのメモリブロックで作業単位を実行すると(文字列アルゴリズムは通常機能しますが、通常は文字列の同種のグループはありません)、パフォーマンスが低下します。プログラムするのは難しい。

GPUは、同種のデータグループ(ベクトルごとまたはピクセルごとの操作など)で、分岐をほとんどまたはまったく行わずに同じ作業を実行するように設計されています。このタイプの動作を模倣できるアルゴリズムは、GPUに最適です。

于 2012-01-30T15:31:16.457 に答える
1

OpenCLは、ランタイム(デバイス検出、キューイング用)とCベースのプログラミング言語の組み合わせと考えることができます。このプログラミング言語には、ネイティブのベクトルタイプと、これらのベクトルに対してあらゆる種類の楽しいことを行うための組み込み関数と操作があります。これは、OpenCLでベクトル化されたカーネルを記述できるという点で優れており、それをハードウェアの実際のベクトルISAにマップするのは実装の責任です。

この2011年4月の記事から、消える可能性があります。

そこには2つの主要なCPUアーキテクチャ、x86とARMがあり、どちらもまもなくOpenCLコードを実行するはずです。

これらのアーキテクチャの両方を対象とするOpenCLアプリケーションを作成する場合、SSEとNEONの2つのバージョンを作成することを心配する必要はありません。OpenCL Cを書いて、それで終わりです。はい、知っています。これは、ベンダーが自分の仕事を完了し、基盤となるISAを完全に活用する堅固な実装を作成したことを前提としています。しかし、彼がそうしないなら、文句を言ってください!

さらに、一部のCL実装は、スカラーカーネルの自動ベクトル化を提供します。これは、通常、記述が簡単です。優れた自動ベクトル化機能を使用すると、簡単にパフォーマンスを確実に向上させることができます。CLカーネルは「オンライン」でコンパイルされるため、このような利点を得るために、再構築されたコードを出荷する必要はありません。

于 2012-01-31T00:59:12.430 に答える
1

これは、OpenCLを介してCPUで何を実行するのか疑問に思いますか?

私はoclを使用して、CPUからグラフィックハードウェアに作業をオフロードすることを好みます。ビデオカードに制限がある場合があるので、CPU用のバックアップカーネルを用意するのが好きです。このような制限は、メモリサイズ、メモリボトルネック、クロック速度の低下、またはpci-eバスが邪魔になる場合です。

すべてのカーネルをターゲットハードウェアで実行するように調整する必要があると思うので、CPUに個別のカーネルを使用するのが好きだと言います。私が使用するほとんどのアルゴリズムは事前にこの方法でテストされるため、openmpバックアップ計画を立てることも好きです。

CPUでGPUカーネルをテストして、期待どおりに実行されることを確認するのがベストプラクティスだと思います。ソフトウェアのユーザーがopenclをインストールしているが、CPU(またはローエンドのGPU)のみをインストールしている場合は、異なるデバイスで同じコードを実行できると便利です。

于 2012-01-31T14:13:13.583 に答える