有关GPU分析计数器结果的问题

时间:2011-07-05 12:31:56

标签: cuda opencl gpu gpgpu nvidia

我一直在玩GPU(GTX580)分析计数器。谁能告诉我是什么导致了分析计数器结果的不确定性。我有一个非常简单的内核,它只是将缓冲区复制到另一个缓冲区。我分析了在这个内核中执行的指令。对于工作项计数和工作组大小的某些配置,结果在不同的运行中是稳定的。但对于其他一些配置,它在不同的运行之间存在显着差异。 我被告知,因为SMs映射的warps(和工作组)是非确定性的。但据我所知,至少,属于工作组的warp将仅在一个SM中执行,并且内核中没有分支,因此理论上无论warp如何映射到SM,结果仍应是相同。 任何帮助将不胜感激。


编辑:这是有问题的代码:

#pragma OPENCL EXTENSION cl_khr_byte_addressable_store : enable 
__kernel void histogram(__global float* x, __global float* y) 
{
    int id = get_global_id(0);
    y[id] = x[id];
}

1 个答案:

答案 0 :(得分:4)

探查器仅监视多处理器的子集以收集数据,然后将结果扩展到完整的GPU。如果您的代码没有使用相同数量的块均匀地“填充”每个MP,则生成的分析器输出可能会有变化,具体取决于在给定运行中收到的分析MP的工作量。在内核在大型GPU上运行极少数块的极端情况下,分析实际上无法收集任何统计信息,因为分析MP根本没有运行任何块。