【发布时间】:2015-09-28 08:09:43
【问题描述】:
假设我有三个全局数组,它们已使用 cudaMemcpy 复制到 gpu 中,但 c 中的这些 gloabl 数组尚未使用 cudaHostAlloc 分配,以便分配页面锁定的内存,而不是它们是简单的全局分配。
int a[100],b [100],c[100];
cudaMemcpy(d_a,a,100*sizeof(int),cudaMemcpyHostToDevice);
cudaMemcpy(d_b,b,100*sizeof(int),cudaMemcpyHostToDevice);
cudaMemcpy(d_c,c,100*sizeof(int),cudaMemcpyHostToDevice);
现在我有 10 个内核,它们在单独的流中启动,以便同时运行,其中一些使用在 gpu 中复制的全局数组。 现在这些内核运行了 1000 次迭代。 他们不必在迭代期间将任何内容复制回主机。
但问题是它们不是并行执行,而是采用串行方式。
cudaStream_t stream[3];
for(int i=0;i<3;i++)cudaStreamCreate (&stream[i]);
for(int i=0;i<100;i++){
kernel1<<<blocks,threads,0,stream[0]>>>(d_a,d_b);
kernel2<<<blocks,threads,0,strea[1]>>(d_b,d_c);
kernal3<<<blocks,threads,0,stream[2]>>>(d_c,d_a);
cudaDeviceSynchronize();
}
我不明白为什么?
【问题讨论】:
标签: cuda parallel-processing nvidia