同一CUDA源文件中的多个全局函数

同一CUDA源文件中的多个全局函数,cuda,Cuda,我可以在同一个CUDA源文件中编写两个单独的全局函数来计算不同的内容吗?大概是这样的: __global__ void Ker1(mpz_t *d,mpz_t *c,mpz_t e,mpz_t n ) { int i=blockIdx.x*blockDim.x + threadIdx.x; mpz_powm (d[i], c[i], e, n); } __global__ void Ker2(mpz_t *d,mpz_t *c,mpz_t d, mpz_t n) {

我可以在同一个CUDA源文件中编写两个单独的全局函数来计算不同的内容吗?大概是这样的:

__global__ void Ker1(mpz_t *d,mpz_t *c,mpz_t e,mpz_t n )
{
    int i=blockIdx.x*blockDim.x + threadIdx.x;

    mpz_powm (d[i], c[i], e, n);

}

__global__ void Ker2(mpz_t *d,mpz_t *c,mpz_t d, mpz_t n)
{
    int i=blockIdx.x*blockDim.x + threadIdx.x;
    mpz_powm(c[i], d[i],d, n);

}


int main()
{
    /* ... */
    cudaMemcpy(decode_device,decode_buffer,memSize,cudaMemcpyHostToDevice);
    Ker1<<<dimGrid , dimBlock >>>( d_device,c_device,e,n );
    Ker2<<<dimGrid , dimBlock>>>(c_device,d_device,d,n);
    cudaMemcpy(decode_buffer,decode_device,memSize,cudaMemcpyDeviceToHost);
}

如果不是,你会怎么做呢?

不清楚你在问什么,但在读了3遍之后,我想:我能在同一个源文件中写几个内核吗?。 您可以在主函数中编写任意数量的内核启动

第9页的示例如下:

...
cudaMemcpy( dev1, host1, size, H2D ) ;
kernel2 <<< grid, block, 0 >>> ( ..., dev2, ...  ) ;
kernel3 <<< grid, block, 0 >>> ( ..., dev3, ...  ) ;
cudaMemcpy( host4, dev4, size, D2H ) ;
...
发件人:

默认情况下,调用是异步的,因此一旦内核在GPU中启动,CPU就会处理随后的指令。 要强制同步,您必须使用cudaDeviceSynchronize,或任何通过cudaMemcpy强制同步的内存传输

资料来源:报告

问:CPU和GPU可以并行运行吗? CUDA中的内核调用是异步的,因此驱动程序将在启动内核后立即将控制权返回给应用程序

测量时应使用CUDAThreadsynchronizeAPI调用 性能,以确保所有设备操作在 停止计时器

CUDA功能,用于执行内存复制和控制图形 互操作性是同步的,隐式地等待所有内核 完成

顺便说一句,如果您不需要在内核之间进行同步,那么如果您的GPU具有所需的计算能力,它们可以并发执行

问:可以同时执行多个内核吗? 对计算能力为2.x或更高版本的GPU支持并发内核执行和启动


仍然阅读CUDA常见问题解答。

请尝试一下……我试图回答您关于在同一源文件中编写的不同内核的问题。但是,请考虑下一次改进你的问题。这是因为你的第二个内核有两个参数叫做D,即使其中一个是指针。这不能与任何编译器一起工作。我的回答仍然代表你在问题中提出的问题。顺便说一句,您似乎只是在粘贴错误,并没有努力解决它们,希望我们为您提供一个无错误的代码版本。这是一个非常令人筋疲力尽的行为,我将就此话题停下来。你完全正确,我不会为d评论它,我将为未来努力,也许我不会问愚蠢的问题。。。我以一种好的方式接受它,谢谢。