2011-07-02 112 views
2

可能重複:
Output of cuda program is not what was expected輸出爲空

我運行這個簡單的CUDA程序:

#include <cuda_runtime.h> 
#include <cuda.h> 
#include <stdio.h> 

__global__ void 
    display(char *t[]) 
{ 

    int v = blockIdx.x; 
    int p = blockIdx.y; 
    int offset = v+ p*gridDim.x; 
    t[offset] = "("; 
    // 
} 

void 
main() 
{ 
    int c = 5; 
    cudaGetDeviceCount(&c); 
    cudaDeviceProp prop; 
    cudaGetDeviceProperties(&prop,0); 
    printf("The device name is : %s\n", prop.name); 
    //bool value = prop.integrated; 
    char *x[6]; 
    int i; 
    for (i = 0; i<6; i++) 
     cudaMalloc((void**)&x[i], 20*sizeof(char)); 

    // Checking the meaning of grid(3,2) 
    dim3 grid(3,2); 
    display<<<grid,1>>>(x); 
    char y[30]; 
    cudaMemcpy(y, x[0], 20*sizeof(char), cudaMemcpyDeviceToHost); 
    printf("The values is :%s\n", y); 
    cudaFree(x[0]); 

    getchar(); 
} 

我不明白爲什麼數組在執行結束時,y仍然是空的。 ?難道不應該是「(」

+0

仍然面臨的問題...請幫助! – Programmer

+2

我們正在努力幫助!夥計,冷靜,給我們一些時間 – TimeToCodeTheRoad

回答

0

我已經回答了這個問題here

但我會離開這個建議,其他人誰在這個問題上首次降落。

在調試CUDA代碼,我強烈建議增加在強制同步,並檢查錯誤,正如我在your other post提到,以確保您的硬件設置,API設置,當前的天氣,不會搞亂的東西了:

/* Force Thread Synchronization */ 
cudaError err = cudaThreadSynchronize(); 

/* Check for and display Error */ 
if (cudaSuccess != err) 
{ 
    fprintf(stderr, "Cuda error in file '%s' in line %i : %s.\n", 
      __FILE__, __LINE__, cudaGetErrorString(err)); 
} 

釷OP代碼的一個關鍵問題在於,儘管x的成員居住在GPU上,x仍駐留在CPU上。再次看到我的回答here

+0

我試過了abve,但它只是顯示了未知的錯誤點。你可以嘗試在你的機器上運行這個,並讓我知道: – Programmer

+0

設備QUERY的作品沒關係。注意:如果在cuda memcpy中,我設置要複製到0的字節數,我不會出錯。所以這裏有一個問題 – Programmer