【问题标题】:Working of CUDA schedulerCUDA调度器的工作
【发布时间】:2013-02-01 04:14:57
【问题描述】:

我如何知道 CUDA 调度程序的行为?除了在我的应用程序中通过改变网格大小、块大小等对其进行测试之外,是否有任何供应商提供的文档准确地解释了块的分布方式?

【问题讨论】:

    标签: cuda gpgpu nvidia pycuda


    【解决方案1】:

    这取决于您正在处理的架构。

    例如,在 Fermi 架构上,您有一个 GigaThread 全局调度程序,它将线程块分配给流式多处理器 (SM) 调度程序。对于每个 SM,Dual Warp 调度程序将线程调度为 32 个并行线程组,称为 warp。

    这在NVIDIA White Paper on Fermi 中有很好的解释。我建议也看看这个其他document

    【讨论】:

    • 好的。那是正确的。谢谢你。我实际上很想知道是否有任何方法可以找出调度程序最近将线程分发到哪些 SM。即,是否有任何日志文件(或维护的类似内容),调度程序每次都会使用此信息更新(以便通过查看日志文件我们可以找出所有 SM 当前正在工作)?
    • [继续..] 我正在使用 Tesla M2050 费米。那么,如果 GigaThread 全局调度器将线程块分配给 SM 调度器,那么究竟是哪个调度器决定了要使用多少个 SM 以及使用哪些 SM?当线程被调度到那些特定的 SM 上时,有没有办法找出这些 SM 的 ID?
    • 我不知道有什么方法可以知道哪些块或线程分配给了哪些 SM。关于您的问题,我想说 GigaThread 全局调度程序决定要使用的 SM 的数量和 ID。
    • 在内核中使用 %smid 有助于了解哪个线程在哪个 SM 中执行。我试过这个。但我想在没有应用程序帮助的情况下获取这些信息。我想从调度程序本身获取这些信息。根据您的说法,我需要与 GigaThread 全局调度程序进行通信。到底有没有可能?
    猜你喜欢
    • 2016-12-26
    • 2019-01-12
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多