如何增加CUDA内核的计算利用



好吧,所以我的内核A正在从设备内存中读取两个变量。执行其前或将它们存储回设备内存。

但是,在这些变量上执行许多额外计算然后将它们存储回设备内存的其他内核B优于内核A等待内存访问完成而不是进行一些计算。但是,如何具有相同的内核B。每个线程的内存访问和额外的计算速度更快地执行所有操作?

另外,我试图在内核A中添加许多合成算术操作,但是探查器仍然显示出相同的计算利用?那里实际上发生了什么?

__global__ void A(int *dr,int p,int  q,int NORi)
{
    const int tid = blockDim.x * blockIdx.x + threadIdx.x;
    const int N = blockDim.x*gridDim.x;
    for(int i=0;i<NORi;i++)
    {
        dr[(i+p)*N +tid] = dr[i*N+tid] ^ dr[(i+q)*N+tid];
    }
}

内存访问是合并的。内核B是相同的,但是在存储结果之前,它在两个操作数上执行了更多的算术计算,而不仅仅是事实操作。

内核B是否也执行XOR?如果不是,则可能是各种操作的吞吐量的问题。在CUDA C编程指南中检查本机算术指令表的吞吐量。例如,在开普勒上,XOR上的吞吐量仅为整数乘法的吞吐量的1/5。

最新更新