こんにちは、mex ファイルの CUDA カーネルで使用できるように、MATLAB の m 関数を C 関数にコンパイル (または「変換」した方がよい) する方法はありますか? どうもありがとう!
4 に答える
MATLAB Coderは mex ファイルの C コードを生成します。評価するコピーをまだ持っていないので、生成されたコードの品質と性質について権威者と話すことはできません.
ただし、推測する必要がある場合は、生成されたコードを GPU で動作させるには、多くのマッサージが必要になる可能性が高いと言えます。何をしているかにもよりますが、 Jacketのような製品の方が幸運かもしれません。
この関数呼び出しを使用して、C / fortranからmatlab(mまたはmex)関数を呼び出すことができます。次に、CUDAカーネルと一緒にそれをインターフェースすることができます。
しかし、それは物事を行うための最も効率的な方法ではないかもしれません。自分が持っているmファイル用に独自のCコードを作成するか、他の誰かが作成した場合はmatlabcentralで検索することができます。
これは実際にはあなたの質問に対する直接の答えではありませんが、MATLABコードをGPUで実行することだけが目標である場合、Parallel Computing Toolboxにアクセスできる場合は、 arrayfunでGPUArrayを使用できることがわかります。たとえば、多くのポイントで評価する関数が次のようになっている場合:
function y = myFcn( x )
y = 1;
for ii = 1:10
y = sin(x * y);
end
次に、GPUでこれを次のように呼び出すことができます。
gx = gpuArray( rand(1000) );
gy = arrayfun( @myFcn, gx );
C 関数は、最終的にデバイス変数のセットアップを呼び出し、CUDA カーネルを呼び出しますか?
最初にすべての MATLAB コードを C に変換するよりもこの方法の方が簡単だと思ったので、当初はプロジェクトでこれを試してみたかったのですが、とにかくそれを行うことになりました。
この機能を提供するためにユーザーが作成した MATLAB スクリプトがいくつかありますが、それらは Mathworks のものではないため、自己責任で使用する必要があります。私はそれらを試してみましたが、悪意のあるものは見つかりませんでしたが、あなたにはわかりません. 特定の複雑さのために、プロジェクトでそれらを機能させることができませんでしたが、より単純なタスクでは機能するはずです。
1) NvMEX: これは Nvidia から直接提供されています。http://developer.stage.nvidia.com/matlab-cuda http://www.mathworks.com/discovery/matlab-gpu.html
2) CUDA MEX: これはユーザーからのものです。http://www.mathworks.com/matlabcentral/fileexchange/25314-cuda-mex