2016-07-20 10 views
-1

私はCUDAコードを含むMEX関数を書いています。ホストの関数Aの値をすべてfloatにリセットする必要があります0.0。これは、破壊し、アレイを再作成することで動作しているようです:はmexcuda関数で配列の値を0に設定しました

mxGPUDestroyGPUArray(A); 
    A = mxGPUCreateGPUArray(1, &dims, mxSINGLE_CLASS, mxREAL, MX_GPU_INITIALIZE_VALUES); 

同じ結果を達成するために、より自然な/エレガントな方法はありますか?

+2

(コメントから '移行' の質問は)**あなたは[ 'cudaMemset'](HTTPを使用することができるはずです。 com/cuda/cuda-runtime-api/group__CUDART__MEMORY.html#group__CUDART__MEMORY_1gf7338650f7683c51ee26aadc6973c63a)。 –

+0

私の配列Aはサイズ[K、K、K]の3D配列です。私はcudaMemset(A、0.0、(K * K * K)* sizeof(float))を使ってみました。しかしこれは実行時にエラーの束を返します –

+0

私はかなり 'cudaMemset'が使用できると確信しています。あなたのケースでなぜそれがうまくいかないのかを説明するために、より完全な説明が必要になるでしょう。 –

答えて

0

cudaMemsetはデバイスポインタが必要ですが、mxGPUCreateGPUArraymxGPUobjectを返します。ドキュメントによると、mxGPUGetDataを使用してこのポインタを取得できるはずです。また、valueパラメータは、与えている浮動小数点数ではなく、int型である必要があります。幸いにも0.0の浮動小数点値は0という2進(整数)表現に対応しています。 //docs.nvidia:あなたがそれをしたい場合はMEXのCUDA機能で**

関連する問題