質問

CUDAを使用して、Matlabで書かれたコードを最適化しようとします。私は最近、CUDAのプログラミングを開始しましたが、それがどのように機能するかについての一般的なアイデアを持っています。

だから、2つのマトリックスを一緒に追加したいとします。 CUDAでは、結果マトリックスの各要素の回答を計算するためにスレッドを使用するアルゴリズムを書くことができました。しかし、この手法はおそらくMatlabがすでに行っていることに似ているのではないでしょうか?その場合、効率は手法とは独立しており、ハードウェアレベルのみに起因するものではないでしょうか?

役に立ちましたか?

解決

この手法は似ているかもしれませんが、CUDAでは数百のスレッドが同時に実行されていることを覚えておいてください。 Matlabがスレッドを使用しており、それらのスレッドがQuad Coreで実行されている場合、同じクロックサイクルでCUDAで実行するために数百個のスレッドを達成する間、クロックサイクルごとに4個のスレッドのみが取得されます。

質問に答えるために、はい、この例の効率は手法とは無関係であり、ハードウェアのみに起因します。

他のヒント

答えは明確にはいです。すべての効率はハードウェアレベルです。 Matlabがどのように機能するかは正確にはありませんが、Cudaの利点は、Matlabとは異なり、Mutltipleスレッドを同時に実行できることです。

補足的には、問題が小さい場合、または多くの読み取り操作が必要な場合、Cudaはおそらく追加の頭痛のみになります。

CudaはMatlabを公式にサポートしています。

リンクが必要

MEXファイルを使用して、MATLABからGPUで実行できます。

ボトルネックは、データがCPU-RAMからGPUに転送される速度です。したがって、転送が最小化され、大きなチャンクで行われる場合、スピードアップは素晴らしいです。

簡単なことについては、Matlab PCTでGPUARRAYサポートを使用することをお勧めします。ここで確認できますhttp://www.mathworks.de/de/help/distcomp/using-gpuarray.html

gpuarray、乗算、mins、maxsなどを追加するなど、使用する実装は問題ない傾向があります。 ABS(Y-HX)のような小さなマトリックスのバッチ操作のようなものを作成するには、あなたのためにそれを行う小さなカーネルを書く方が良いことがわかりました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top