【问题标题】:diffrent declarations between sdk device query sample and occupancy calculator?sdk设备查询示例和占用计算器之间的不同声明?
【发布时间】:2013-01-24 07:39:02
【问题描述】:

目前,我尝试为我的内核获得更好的占用率,并使用占用率计算器和从 sdk 示例设备查询中获得的设备信息。 我想知道块和流式多处理器(sm)的声明略有不同。 在 sdk 示例中,它被称为

每个块的共享内存总量

每个块可用的寄存器总数

但在占用计算器中,这些信息是按 sm 计算的,这对我来说更有意义。

这只是 sdk 示例中的错误声明吗?

【问题讨论】:

    标签: cuda


    【解决方案1】:

    我同意你的看法。

    共享内存和寄存器是硬件资源,而块是软件编程模型的概念。

    另一方面,我认为我们可以说一个块可以使用的最大共享内存量等于 GPU 设备的每个多处理器的共享内存总量。

    官方文档 CUDA 编程指南也使用术语“每个多处理器共享内存”,如 Compute Capabilities 部分所示;

    【讨论】:

    • 是的,在共享内存的情况下我同意。但是对于寄存器计数,这是不可能的。对于计算架构 2.1,每个块可能有 1536 个线程,每个线程有 63 个寄存器。这将是单个块的 96768 个寄存器,但每个块/sm 只允许 32768 个寄存器。一般来说,我也会说,这都是每个多进程的。
    • @hubs 在您的编程设计过程中,您将无法同时达到 #threads/block 和 #register/thread 的最大值,因为 max register/ 存在硬件限制SM。您还可以验证这个 inc occ_calculator.xls
    • 是的,这就是为什么我会说这一切都是每sm而不是阻塞的原因。
    • @hubs threads/MP 是硬件限制,对于设备 2.1,它是 1535。但是最大线程/块是一个软件概念,对于运行在设备 2.1 上的内核代码,它仍然是 1024跨度>
    猜你喜欢
    • 1970-01-01
    • 2014-11-04
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多