// performs vector addition
// a, b, c are vectors and added values are stored in a and b, while the results are stored in c.
#define N 10
__global__ void add(int* a, int* b, int* c) {
int tid = threadIdx.x + blockIdx.x*blockDim.x;
while(tid < N) {
c[tid] = a[tid] + b[tid];
tid += blockDim.x * gridDim.x;
}
}
はこれのCPUバージョンです:
void add(int* a, int* b, int* c) {
int tid = 0; // start from CPU 0
while(tid < N) {
c[tid] = a[tid] + b[tid];
tid += 2; // assume there are 2 CPUs
}
}
私はいくつかのチュートリアルを行って、すべてのそれらはadd
カーネルで始まります。
tid
のストライドはどこから来ていますか?
EDIT
今、私は一種のストライドの値が何を意味し得ます。 CPUの場合、2つの実行スレッドのうちの1つが終了すると、別のコアでtid + 1
が処理されるため、tid
に2を追加する必要があります。
しかし、ここでの質問は、CPU2のtid
とは異なるCPU1のtid
ですか?私は彼らが同じ変数ではないと思うし、値はCPUの別々のメモリに格納されていますか?
あなたの編集はすべてCPUに関するものですが、あなたのフラグは 'cuda'と' gpgpu'です...そして、あなたはどこからCPUバージョンを持っていますか? CPU上でコードを並列化する方法を読んだことはありますか?チュートリアルのコードをペーストする場合は、チュートリアルへのリンクを追加してください。あなたは[プログラミングガイドNvidia](http://docs.nvidia.com/cuda/cuda-c-programming-guide/#axzz4iMq8V9Ae)を見てきましたか?非常にコンパクトですが、わかりやすく、より簡単な 'add'カーネルではじまりません。 – Shadow