你能以编程方式知道 GPU 中每个块的最大块数和线程数吗?

Posted

技术标签:

【中文标题】你能以编程方式知道 GPU 中每个块的最大块数和线程数吗?【英文标题】:Can you programmatically know the max blocks and threads per block in a GPU? 【发布时间】:2021-08-09 02:57:36 【问题描述】:

我正在编写一个可能会在许多不同 GPU 上运行的 CUDA 程序。我想知道 CUDA 是否提供某种方式从代码中读取(运行时或编译时)当前 GPU 的功能,这意味着单个块可以包含的线程数以及最大块数,所以我可以定制启动内核以优化使用所有资源。

我知道这听起来像是一个愚蠢的问题,但我在网上找不到任何答案。

如果不可能的话,还有一个额外的问题:我看到 here 有人说他们知道 Jetson TX1 有

2 个 SM - 每个有 128 个内核。 我读到每个 SM(我知道有 2 个)最多可以有 16 个活动块和 64 个活动扭曲(或 2048 个活动线程)。

如何找到给定 GPU 的此信息?

【问题讨论】:

恕我直言,我会说不,因为所有不同的图形处理器和显示器之间没有标准。如有疑问,请查看目标 GPU 的数据表或程序员指南。 @ThomasMatthews:你的观点明显是错误的。自第一个 CUDA 测试版以来,已经有 API 向程序员公开了这些确切的硬件特性。 你能解释一下为什么我们店的显示器,使用I2C通信,不符合CUDA标准吗?我们的显示器有自己的内存和“显示列表”。我们必须发送命令,而不是直接访问寄存器和内存。是的,这是在嵌入式系统上。 整个问题是关于在 CUDA 中获取 NVIDIA GPU 的硬件特性,这适用于 NVIDIA 自 2007 年左右以来生产的所有 GPU。您的嵌入式系统是否使用 CUDA 兼容的 GPU?我猜不是…… 【参考方案1】:

我猜cudaGetDeviceProperties 似乎就是您要找的东西。

【讨论】:

以上是关于你能以编程方式知道 GPU 中每个块的最大块数和线程数吗?的主要内容,如果未能解决你的问题,请参考以下文章

每个 SM 的最大驻留块数?

CUDA 估计每个块的线程数和 2D 网格数据的块数

以编程方式检索每个多处理器的最大块数

你能以编程方式在iOS 8(w / Swift)中切换“请勿打扰”模式吗?

你能以编程方式修改 UICollectionView 滚动方向吗?

你能以编程方式访问当前的 Heroku dyno id/name 吗?