1
当我在设备上定义一个数组(在本例中使用“Hello”字符串进行初始化)并尝试将其复制到主机时,出现错误代码cudaErrorInvalidValue
。但是,从内核中可以访问d_helloStr[]
。参考CUDA编程指南B.2.1章节,这个变量也应该可以通过运行时库访问。为什么这个示例代码不起作用?CUDA:cudaMemcpy为__device__数组返回cudaErrorInvalidValue
#include <cuda.h>
#include <stdio.h>
__device__ char d_helloStr[] = {'H','e','l','l','o','\0'};
// Host function
int
main(int argc, char** argv)
{
cudaError_t err;
char h_helloStr [sizeof(d_helloStr)];
// copy device string to host string:
err = cudaMemcpy(h_helloStr, d_helloStr, sizeof(d_helloStr), cudaMemcpyDeviceToHost);
printf("err = %d\n", err);
// result string:
printf("%s\n", h_helloStr);
return 0;
}
如果使用cudaMalloc获取设备中字符的内存,该怎么办? – InsertNickHere 2010-06-20 16:09:51
这将是在这个你好,世界演示(实际工作)中使用的机制:http://forums.nvidia.com/index.php?showtopic=90044 我也使用cudaMalloc在设备上分配了一些内存,复制从d_helloStr变量到此内存的字符串,并使用cudaMemcpy将该内存中的字符串复制回主机。这也适用。 但是,我想知道为什么我不能通过cudaMemcpy直接访问d_helloStr。 – t6d 2010-06-20 16:20:30