2012-01-13 38 views
2

下面是一小段代碼,它將陣列中的4個元素複製到GPU。我真的不明白爲什麼cudaMemcpy在這種情況下拋出一個錯誤。請幫助cudaMemcpy簡單複製期間拋出錯誤

int size = 5; 
float *a = (float*)malloc(size * sizeof(float)); 
a[0] = 1.0; 
a[1] = 2.0; 
a[2] = 3.0; 
a[3] = 4.0; 
a[4] = 5.0; 

float *g; 
cudaMalloc((void**)g, 4 * sizeof(float)); 
float *tem = a+2; 
cudaError_t err = cudaMemcpy(g,a,4 * sizeof(float), cudaMemcpyHostToDevice); 
if(err !=0){ 
    printf("Cudamemcpy threw error\n"); 
    getchar(); 
} 
+0

是它扔了什麼錯誤,到底是什麼? 'cudaGetErrorString'將解析任何運行時API函數的返回狀態爲可讀的字符串。 – talonmies 2012-01-13 16:01:54

+0

我看到你正在GPU上分配一個大小爲4的浮點數組,並將大小爲5的浮點數組複製到它。 – nouveau 2012-01-15 17:38:22

+0

@Jay:內存拷貝只是將'4 * sizeof(float)'字節拷貝到數組中。它不是緩衝區溢出。 – talonmies 2012-01-17 16:17:02

回答

6

我認爲你缺少一個符號:

cudaMalloc((void**)&g, 4 * sizeof(float));