小编aku*_*ubs的帖子

在cuda中并行执行内核

可以说我有三个全局数组,这些全局数组已使用cudaMemcpy复制到了gpu中,但是c中的这些gloabl数组尚未使用cudaHostAlloc进行分配,因此无法分配页面锁定的内存,而是简单的gloabl分配。

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);
Run Code Online (Sandbox Code Playgroud)

现在我有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();
  }
Run Code Online (Sandbox Code Playgroud)

我不明白为什么?

parallel-processing cuda nvidia

3
推荐指数
1
解决办法
3175
查看次数

标签 统计

cuda ×1

nvidia ×1

parallel-processing ×1