-1

次の例に従いました: マルチ GPU の基本的な使用法

コードは合計を行っています:

受け入れられたとチェックされた人は、次のような追加機能を送信します。

for(int i=0;i<10000;++i) {
    for(int dev=0; dev<2; dev++) {
        cudaSetDevice(dev);
        add<<<NB,NT>>>( dev_a[dev], dev_b[dev], dev_c[dev], Ns[dev] );
    }
}

上記のコードではNS[dev]、関数を追加するためにも追加しましたが、質問の投稿を送信する人は、次のような関数を追加します。

__global__ void add( double *a, double *b, double *c){

    int tid = threadIdx.x + blockIdx.x * blockDim.x; 

    while(tid < N){
        c[tid] = a[tid] + b[tid];
        tid += blockDim.x * gridDim.x;
    }

}

上記の機能の機能は何ですか Ns[dev]。以下のコードで削除する Ns[dev]と、次のようになります。

add<<<NB,NT>>>( dev_a[dev], dev_b[dev], dev_c[dev]);

追加機能が動作しません。つまり、値を追加しません。

Ns[dev]ここで関数を追加するにはどうすればよい ですか?

4

1 に答える 1

1

リンクされた回答でNsは、各デバイスで処理する必要があるデータの量を指定する配列です。dev現在のデバイスの ID です。

カーネルで処理されるデータの長さを指定する引数をカーネルに追加する必要があります。

__global__ void add( double *a, double *b, double *c, const int N)
{
    int tid = threadIdx.x + blockIdx.x * blockDim.x; 

    while(tid < N){
        c[tid] = a[tid] + b[tid];
        tid += blockDim.x * gridDim.x;
    }
}
于 2013-05-06T11:33:20.497 に答える