2016-03-23 4 views
2

のための最適なデバイスを選択します。私が本当に知りたいのは、GPUに搭載されているコア数(計算単位あたりのコア数)です。どのようにこれを正しく行うのですか?私は現在、計算単位と頻度を決定することができます。OpenCLのは、私がCloo、OpenCLのC#のライブラリで働いている、と私は最高の実行時に私のカーネルに使用するデバイスを決定することができますどのように思っていたスループット

EDIT: 私は、すべてのデバイス上で(スピードテストを実行します)プロファイリングし、結果を比較/保存しようと考えています。しかし、私の理解から、これは問題を提起します。なぜなら、あなたは、最適に/公平にすべてのデバイスを比較のために使用するプログラムを書くことができないからです。

これはまた、すべてのカーネル呼び出しに指定するワーカースレッドの最適な数を選択することが有用であろう。どんな助けでも大歓迎です。

+0

あなたがC#を使用して実装する場合は、ここについての良い記事です:http://stackoverflow.com/questions/1542213/how-to-find-the-number-of-cpu-coresは、 -via-net-c –

+0

申し訳ありませんが、私は具体的ではありませんでした.gpuコンピューティングユニットにコア数が必要なので、環境は私を不幸にも助けません。 – guitar80

答えて

1

コアカウントによるパフォーマンスの判断は非常に困難です。いくつかのコアはより広く、いくつかのコアはより速い。それらが同じであっても、異なるレジスタ空間/ローカルメモリの組み合わせにより、推測するのがさらに難しくなります。

アルゴリズムごとにOSごとにドライバごとに各グラフィックスカードのパフォーマンスのデータベースを用意し、現在の頻度でそれらを掛けたり、実際のアクセラレーションジョブを実行している間にすべてのデバイスの選択またはクエリパフォーマンスタイマーをベンチマークする必要があります。

A GTX680とHD7950は、コアの同様の番号を有するが、いくつかのアルゴリズムは、いくつかの他のコードのための余分な200%の性能と反対ためHD7950を好みます。

コア数を照会することはできません。計算ユニットの数と計算ユニットごとのスレッドの最大数を照会することはできますが、それらが同じアーキテクチャーでないとパフォーマンスに関係しません。

あなたは、ワークグループごとに最適なスレッド数を照会することができますが、あなたは、できるだけ多くの値を試してみる必要がありますので、それはあなたが使用するアルゴリズムを変更することができます。スカラー関数のベクトル化されたバージョンでも同じです。それがcpu(または任意のvliw gpu)であれば、同時に4または8の数字を掛けることができます。

時にはドライバーの自動コンパイラの最適化は、手チューニングの最適化と同じくらい良いです。

https://www.khronos.org/registry/cl/sdk/1.0/docs/man/xhtml/clGetDeviceInfo.html

+0

私はそれが完璧なテストではなかったことを知っていましたが、少なくとも推測することは有用かもしれないと思いました。どのように私は適切にすべての潜在的なデバイスに公正なベンチマークプログラムを書くだろうか?私はこれが同じ問題を引き起こしているように感じます。 (パフォーマンスを決定する処理能力は明らかに多く、その後は処理能力が明らかです) – guitar80

+1

ベンチマークは、使用可能なすべてのスレッドグループサイズ値(2,4,8,32,64、...、1024)をスイープし、適用することもできますベクトル化(float4、float16)とスカラー(float)バージョンの両方のパフォーマンスを考慮すると、他にも多くのオプションがありますが、これらは最も重要なものです。これらの最適値もまた、clGetDeviceInfo –

+0

で照会できます。だから、スレッドグループサイズの値の大部分で誰がうまく実行されたのかを比較するだけです。 – guitar80

関連する問題

 関連する問題