如何提高CUDA内核的计算利用率?

如何提高CUDA内核的计算利用率?,cuda,profiler,Cuda,Profiler,好的,我的内核A正在从设备内存中读取两个变量。执行它们的exor,并将它们存储回设备内存 然而,另一个内核B对这些变量执行大量额外计算,然后将它们存储回设备内存,其性能优于内核a。我知道,如果计算利用率较低,大多数时候,所有扭曲都将等待内存访问完成,而不是进行一些计算。但是为什么内核B每个线程都有相同数量的内存访问和额外的计算速度呢 另外,我尝试在内核a中添加许多合成算术运算,但是分析器仍然显示相同的计算利用率?那里到底发生了什么 __global__ void A(int *dr,int p,

好的,我的内核A正在从设备内存中读取两个变量。执行它们的exor,并将它们存储回设备内存

然而,另一个内核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];
    }
}
\uuuu全局\uuuuu无效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;

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

是否优于您是否意味着执行速度更快?或者在某个评测输出上表现更好,例如扭曲执行效率?请将内核A和内核B也发布在此处。如果看不到所讨论代码的最小示例,就不可能说任何事情。投票关闭。A对“B”怎么看内核?关于执行参数和你在代码上运行的设备呢。这些细节很重要。你想让我们告诉你为什么它比“A”快内核。但你不会显示代码。你认为有人会如何回答你的问题?我不是说内核B是一样的吗?只是对变量进行了一些像左移X等的操作。@LorinAhmed:你告诉过它是一样的,当然它是不一样的,因为你也告诉过我们“它在存储结果之前对两个操作数执行更多的算术计算,而不仅仅是一个Ex或运算”。因此,请发布代码。