簡體   English   中英

為什么AddVector CUDA c ++不起作用?

[英]Why AddVector CUDA c++ is not working?

我試圖使用CUDA添加2個數組,但它不起作用。

我做了所有應該做的事情:

1)我並行化了VectorAdd函數

2)我將內存分配給GPu並將數據移動到GPU

3)最后我修改了函數VectorAdd以在GPU上運行

這是代碼:

#define SIZE 1024

__global__ void VectorAdd(int *a, int *b, int *c, int n)
{
    int i = threadIdx.x ;

    if(i < n)
        c[i] = a[i] + b[i];
}

int main()
{
    int *a , *b , *c;
    int *d_a , *d_b , *d_c;

    a = (int *)malloc(SIZE * sizeof(int));
    b = (int *)malloc(SIZE * sizeof(int));
    c = (int *)malloc(SIZE * sizeof(int));

    cudaMalloc( &d_a , SIZE * sizeof(int) );
    cudaMalloc( &d_b , SIZE * sizeof(int) );
    cudaMalloc( &d_c , SIZE * sizeof(int) );

    for ( int i = 0 ; i < SIZE ; ++i)
    {
        a[i] = i ;
        b[i] = i ;
        c[i] = 0 ;
    }

    cudaMemcpy(d_a, a, SIZE *sizeof(int), cudaMemcpyHostToDevice);
    cudaMemcpy(d_b, b, SIZE *sizeof(int), cudaMemcpyHostToDevice);
    cudaMemcpy(d_c, c, SIZE *sizeof(int), cudaMemcpyHostToDevice);

    VectorAdd<<< 1, SIZE >>>(d_a, d_b, d_c, SIZE);

    cudaMemcpy(c, d_c, SIZE * sizeof(int), cudaMemcpyDeviceToHost);

    for(int i = 0 ; i < 10 ; ++i)
    {
        printf("C[%d] =  %d\n", i, c[i]);
    }

    free(a);
    free(b);
    free(c);

    cudaFree(d_a);
    cudaFree(d_b);
    cudaFree(d_c);

    return 0;
}

控制台上的輸出為: c[0] = 0 , c[1] = 0 , c[2] = 0 , c[3] = 0 , c[4] = 0 ....

為什么它應該是: c[0] = 0 ; c[1] = 2 ; c[2] = 4 .... c[0] = 0 ; c[1] = 2 ; c[2] = 4 ....

在您的情況下,問題取決於您使用的gpu。 你的內核每塊啟動1024個線程。 由於您的gpu具有計算能力1.x,因此每個塊僅支持512或768個線程。 詳細列表可在官方編程指南中找到 因為您沒有使用正確的cuda錯誤檢查,所以您無法獲得cuda運行時api返回的錯誤。 在這個SO答案/問題中 ,@talonmies給出了一個很好的cuda錯誤檢查指南。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM