静的に割り当てられたマトリックスで定数メモリを使用したいと思います。スタティックマトリックスがcudaMemCpyToSymbolに渡されました
float h_M[MASK_WIDTH][MASK_WIDTH] = {
{ 1, 2, 3, 2, 1 },
{ 2, 3, 4, 3, 2 },
{ 3, 4, 5, 4, 3 },
{ 2, 3, 4, 3, 2 },
{ 1, 2, 3, 2, 1 }
};
そして、私は次の関数にh_M
行列を渡す必要があります:次のようにmain()
機能で
#define MASK_WIDTH 5
#define MAX_MASK_WIDTH 10
__constant__ float M[MAX_MASK_WIDTH][MAX_MASK_WIDTH];
は、静的に割り当てられた行列を持っている:私は次のように定数行列を宣言
cudaMemcpyToSymbol(M, h_M, sizeof(h_M));
これは、で定義されています。cudaMemCpyToSymbol
どうすれば正しく行うことができますか?行列を特定の値で初期化する必要があることを考慮して、それを宣言して動的に割り当てることはできないと思います。 cudaMemCopytosymbol
は、コピー後にすべての値がM
の0の場合、影響がありません。
あなたは完全なソースコードが必要な場合、それは次のリンクである:このようにcached_convolution_2D_basic
あなたのリンクは死んでいます。また、コードの[最小で完全で検証可能な例](https://stackoverflow.com/help/mcve)を投稿してください。今のように、あなたの結果があなたが期待しているものから外れている理由を理由づけるのは難しいでしょう。 –
ソースコードを追加しました。ホストコードで作成した定数メモリを宣言して初期化しても問題なく動作します。問題はh_M行列を渡すと失敗するcudaMemCpyにあります。 – sgira
'cudaMemcpyToSymbol'へのリンクが動作しません – Toby