【问题标题】:Questions about GPU profiling counters results关于 GPU 分析计数器结果的问题
【发布时间】:2011-07-05 12:31:55
【问题描述】:

我一直在玩 GPU (GTX580) 分析计数器。谁能告诉我是什么导致分析计数器结果的不确定性。我有一个非常简单的内核,它只是将一个缓冲区复制到另一个缓冲区。我分析了在这个内核中执行的指令。对于工作项计数和工作组大小的一些配置,结果在不同的运行中是稳定的。但对于其他一些配置,不同运行之间的差异显着。 有人告诉我,因为扭曲(和工作组)到 SM 的映射是不确定的。但据我所知,至少,属于一个工作组的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];
}

【问题讨论】:

    标签: cuda opencl gpu gpgpu nvidia


    【解决方案1】:

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

    【讨论】:

    • 好的。我得到了它。但我认为我将内核平均分配给了 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];我使用了 5120 个工作项,组大小为 64。所以 80 个工作组平均分为 16 个 SM,对吗?此外,我认为结果并没有像您所说的那样“放大”到完整的 GPU。本例中执行指令100条,发出指令130条,ptx文件中已有13条指令。
    • 很抱歉搞砸了编辑,但是内核真的很简单,只有一条复制指令(从 x 到 y)
    • 您可以在可视分析器输出中检查 CTA 启动字段。这将告诉您实际运行了多少块来收集统计信息。 如果变化,那就是罪魁祸首。
    • 哦是的,就是这样!线程块(或工作组)的实际数量一直不稳定。你知道它有时与程序员指定的预期线程块数不同吗?
    猜你喜欢
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    • 1970-01-01
    • 2019-06-01
    • 2011-09-12
    • 1970-01-01
    相关资源
    最近更新 更多