2009-03-09 5 views

答えて

3

ターゲットアーキテクチャがnVidiaチップを使用していることがわかっている場合は、おそらくCUDAが適しています。データ転送、命令パス、および操作の順序を完全に制御できます。下位レベルで作業しているときには、__syncthreadsの呼び出し回数を大幅に減らすこともできます。

DirectX 10はインターフェイスとのやりとりが簡単ですが、スピードの最適化を実際に行いたい場合は余分なレイヤーをバイパスする必要があります。 DirectX 10では、テクスチャメモリと共有メモリのどちらを使用するのか、共有メモリを使用するのか、特定のアルゴリズムに依存するのかはわかりません。

もしあなたがTesla C1060などにアクセスできるなら、CUDAははるかに良い選択肢です。 GPGPUの仕様を知っていれば、実際にスピードアップが可能です.Teslaとデスクトップで、特定のアルゴリズムで188倍のスピードアップが見られました。

0

まあ、CUDAは私がCUDAは厄介見つける...あなたは私に言わせればそれは大きな勝利だ...

+0

CUDAはWindowsからLinuxに移植可能です。 NVidia GPUからATIへ –

1

ポータブルです。それはCではなく、その一部です。ネイティブに倍精度浮動小数点をサポートせず、エミュレートされます。単精度の場合は大丈夫です。それはあなたがそれに投げるタスクのタイプに依存します。あなたは、それを使う価値があるためにデータを渡すのに費やす時間よりも、並列で計算に費やさなければなりません。しかし、その問題はCUDA特有の問題ではありません。

アップルのOpenCLがパラレル・コンピューティングの業界標準となるように思えます。

+0

倍精度については確かですか? –

0

CUDAは、倍精度浮動小数点演算のサポートについて何もしていません。 これは使用可能なハードウェアによって異なります。 9,100,200およびTeslaシリーズは、倍精度浮動小数点演算teslaをサポートしています。

0

これらの間で決めるのは簡単です。

あなたのアプリがWindows固有であることを許容できる場合、DirectX Computeを引き続き検討することができます。それ以外の場合は、CUDAまたはOpenCLを使用します。

あなたのアプリがNVIDIAのベンダーロックを容認できない場合、CUDAは使用できませんので、OpenCLまたはDirectX Computeを使用する必要があります。

アプリがDirectX interopを実行している場合、CUDA/OpenCLはグラフィックスAPIのinteropを実行するコンテキストスイッチのオーバーヘッドを招き、DirectX Computeはそうでないと考えてください。

これらの基準の1つ以上がアプリケーションに影響を及ぼさない限り、超並列ツールチェーンCUDAを使用してください。

関連する問題