【发布时间】:2017-09-17 07:41:30
【问题描述】:
我想将常量内存与静态分配的矩阵一起使用。我将常量矩阵声明如下:
#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));
我怎样才能正确地做到这一点?考虑到我必须用特定的值初始化矩阵,所以我认为我不能声明它并动态分配。
问题是cudaMemCopytosymbol没有效果,复制后M中的所有值都为零。
如果您需要完整的源代码,在以下链接:cached_convolution_2D_basic
【问题讨论】:
-
您的链接已失效。另外,请发布您的代码的minimal, complete and verifiable example。就目前而言,很难解释为什么您的结果可能与您的预期不同。
-
我添加了源代码,如果我声明并初始化我在主机代码中创建的常量内存,它会完美运行,所以问题出在当我将 h_M 矩阵传递给它时失败的 cudaMemCpy。
-
cudaMemcpyToSymbol的链接失效