我想使用静态分配矩阵的常量内存。我宣布常数矩阵如下:静态矩阵传递给cudaMemCpyToSymbol
#define MASK_WIDTH 5
#define MAX_MASK_WIDTH 10
__constant__ float M[MAX_MASK_WIDTH][MAX_MASK_WIDTH];
在main()
功能有一个静态分配矩阵如下:
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
矩阵传递给后续功能:
cudaMemcpyToSymbol(M, h_M, sizeof(h_M));
定义如下:cudaMemCpyToSymbol
我该如何正确地做到这一点?考虑到我必须用特定的值初始化矩阵,所以我认为我不能动态地声明它并进行分配。 问题是cudaMemCopytosymbol
没有效果,M
中拷贝所有值都是零后。
如果您需要完整的源代码,它是通过以下链接:cached_convolution_2D_basic
您的链接已删除。另外,请发布代码的[最小,完整且可验证的示例](https://stackoverflow.com/help/mcve)。就目前而言,很难理解为什么你的结果可能与你期望的结果不符。 –
我添加了源代码,如果我在宿主代码中声明并初始化常量内存,它会很好地工作,所以问题出在cudaMemCpy中,当我将它传递给h_M矩阵时会失败。 – sgira
“cudaMemcpyToSymbol”链接不起作用 – Toby