【发布时间】:2020-05-07 19:15:08
【问题描述】:
我对 Cuda 编程很陌生。我正在尝试将字符数组从主机复制到统一设备内存。该代码不会抛出任何错误,而是将设备的内存显示为空行。
int main(int argc, char **argv)
{
int i = 0, n = 0;
unsigned char * buff;
char inp[512] = "abc";
n = 10;
while (i < n)
{
int num = i, size = 0;
while(num > 0)
{
++size;
num /= 10;
}
size += strlen(inp);
num = i;
inp[size--] = '\0';
while(num > 0)
{
inp[size--] = '0' + num%10;
num /= 10;
}
size = strlen(inp);
cudaMallocManaged(&buff, (size+1)*sizeof(char));
cudaMemcpyToSymbol(buff, &inp, sizeof(inp), 0, cudaMemcpyHostToDevice);
printf("%s\n", inp);
printf("%s\n", buff);
}
cudaDeviceReset();
return 0;
}
这是上面代码的输出:
abc
abc1
abc12
abc123
abc1234
abc12345
abc123456
abc1234567
abc12345678
abc123456789
请帮帮我。
【问题讨论】:
-
buff 不是设备符号,在这种情况下根本不需要 cudaMemcpyToSymbol,因为您使用的是托管内存
-
那么为此,我需要将 buff 设为设备符号吗?
-
没有。在这种情况下,您需要完全忘记设备符号。它们与您在这种情况下尝试做的事情完全无关
-
非常感谢。使用 memcpy 而不是 cudaMemcpyToSymbol 解决了这个问题。
-
您是否愿意为下一个人写一个简短的答案,详细说明您的解决方案。我会很高兴地支持它。然后,可以在添加后几天接受答案,将这个问题(由您)标记为已回答
标签: cuda