2

誰かが同時Cudaストリームのデータ独立性要件を説明できますか?次のカーネルを8つの同時ストリームで実行したいとします

Kernel<<<blocks, threads>>>(float *readOnlyInput, float *output);

すべてのストリームが同じ*readOnlyInputを読み取り、異なる*出力配列に書き込むことができますか?

または、同時実行性を実現するために、異なるメモリ位置からもデータを読み取る必要がありますか?

上記の擬似コードスニペットは同時に実行されますか、それとも同時実行性を確保するために* readOnlyInput + i * sizeが必要ですか?

cudaStream_t stream[8];

int size = 1000;//some array size

int blocks =2, threads=256;//some grid dims

for (int i = 0; i < 8; ++i){

    cudaStreamCreate(&stream[i]);

}
for (int i = 0; i < 8; ++i){

    Kernel<<<blocks, threads, stream[i]>>>(float *readOnlyInput, float *output + i*size);

}
4

1 に答える 1

1

カーネルのいずれかが開始する前にデータが完全に書き込まれるように十分な同期が行われている限り、異なるストリームの複数の独立したカーネルから同じデータを安全に読み取ることができます。カーネルは終了しました。

于 2012-10-04T17:53:35.367 に答える