Cuda sdk设备查询示例和占用率计算器之间的不同声明?

Cuda sdk设备查询示例和占用率计算器之间的不同声明?,cuda,Cuda,目前,我试图为我的内核获得更好的占用率,并使用占用率计算器和从sdk示例devicequery获得的设备信息。 我想知道一个稍微不同的块声明和流式多处理器sm。 在sdk示例中,它被称为 每个块的共享内存总量 及 每个块可用的寄存器总数 但在入住率计算器中,这些信息是每平方米的,这对我来说更有意义 这只是sdk示例中的错误声明吗?我同意你的看法 共享内存和寄存器是硬件资源,但块是软件编程模型的概念 另一方面,我认为我们可以说一个块可以使用的最大共享内存量等于一个GPU设备的每个多处理器的共享内存

目前,我试图为我的内核获得更好的占用率,并使用占用率计算器和从sdk示例devicequery获得的设备信息。 我想知道一个稍微不同的块声明和流式多处理器sm。 在sdk示例中,它被称为

每个块的共享内存总量

每个块可用的寄存器总数

但在入住率计算器中,这些信息是每平方米的,这对我来说更有意义

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

我同意你的看法

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

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


官方doc CUDA编程指南也使用术语“每个多处理器共享内存”,如本节所示

是的,就共享内存而言,我同意。但对于寄存器计数来说,这是不可能的。对于compute architecture 2.1,每个块可以有1536个线程,每个线程可以有63个寄存器。对于单个块,这将是96768寄存器,但每个块/sm只允许32768寄存器。一般来说,我也会说,这都是每个多处理器的。在编程设计期间,您将无法同时达到线程/块和寄存器/线程的最大值,因为max register/SM有一个硬件限制。您还可以在occ_calculator.xlsyes中验证这一点,这就是为什么我要说它是按sm而不是块的。@hubs threads/MP是一个硬件限制,对于设备2.1,它是1535。但max-thread/block是一个软件概念,在设备2.1上运行的内核代码仍然是1024