2010-06-20 84 views
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; 
} 
+0

如果使用cudaMalloc获取设备中字符的内存,该怎么办? – InsertNickHere 2010-06-20 16:09:51

+0

这将是在这个你好,世界演示(实际工作)中使用的机制:http://forums.nvidia.com/index.php?showtopic=90044 我也使用cudaMalloc在设备上分配了一些内存,复制从d_helloStr变量到此内存的字符串,并使用cudaMemcpy将该内存中的字符串复制回主机。这也适用。 但是,我想知道为什么我不能通过cudaMemcpy直接访问d_helloStr。 – t6d 2010-06-20 16:20:30

回答

1

您应该使用cudaMemcpyFromSymbol。