小编Gam*_*mma的帖子

CUDA内核融合如何提高GPU上的内存绑定应用程序的性能?

我一直在研究流数据集,该流数据集大于GPU上用于设备进行基本计算的内存。主要限制之一是以下事实:PCIe总线通常限制在8GB / s左右,并且内核融合可以帮助重用可以重用的数据,并且可以利用GPU中的共享内存和局部性。我发现的大多数研究论文都很难理解,并且大多数都在诸如https://ieeexplore.ieee.org/document/6270615之类的复杂应用程序中实现了融合。我读过许多论文,它们都无法解释将两个内核融合在一起的一些简单步骤。

我的问题是融合实际上是如何工作的?。将普通内核更改为融合内核需要执行哪些步骤?同样,有必要使用多个内核来融合它,因为融合只是消除某些内存绑定问题以及利用局部性和共享内存的一个很好的名词。

我需要了解如何将内核融合用于基本CUDA程序,例如矩阵乘法或加减内核。一个非常简单的示例(代码不正确,但应该给出一个想法),例如:

int *device_A;
int *device_B;
int *device_C;

cudaMalloc(device_A,sizeof(int)*N);

cudaMemcpyAsync(device_A,host_A, N*sizeof(int),HostToDevice,stream);

KernelAdd<<<block,thread,stream>>>(device_A,device_B); //put result in C
KernelSubtract<<<block,thread,stream>>>(device_C);

cudaMemcpyAsync(host_C,device_C, N*sizeof(int),DeviceToHost,stream); //send final result through the PCIe to the CPU
Run Code Online (Sandbox Code Playgroud)

cuda

0
推荐指数
1
解决办法
701
查看次数

标签 统计

cuda ×1