【问题标题】:Number of grids, blocks and threads in a GPUGPU 中的网格、块和线程的数量
【发布时间】:2018-07-29 13:41:43
【问题描述】:

我是 CUDA 和 GPU 架构的新手。 我跑了这个code

在结果中,我只得到了网格的尺寸。我知道每个网格都有 3 个维度,并且有很多块。并且在每个块中又有 xyz 个线程。我的问题是 GPU 中有多少个网格(或者它是否独立于 GPU),如果是,我如何找到它以及如何处理需要超过这些数量的线程的情况?

【问题讨论】:

    标签: cuda gpu nvidia


    【解决方案1】:

    网格有效地表示内核启动,即它包含要为特定内核启动运行的所有块(以及线程)。块和网格的尺寸有一定的限制,主要是特定于架构的(通常,对于同一代的所有 GPU 模型,它们在很大程度上是相同的)。您可以找到所有设备特定限制和功能的详细列表in the CUDA programming guide

    您选择块尺寸的方式主要取决于获得良好的内存访问模式(以一种旨在优化合并全局内存访问的方式划分工作)、哪些线程组可以通过共享内存进行通信以及达到理想的入住率。

    虽然最大块和可能的网格大小(尽管后者几乎不应该成为问题)会因此影响您编写和运行 CUDA 内核的方式,但通常只有在以下情况下才会关注最大网格数你使用Dynamic Parallelism。如果您的内核没有完全占用 GPU,驱动程序可能也会与内核执行重叠if possible,但是,您实际上并没有明确的控制权。

    【讨论】:

      【解决方案2】:

      CUDA 中的网格就像一个工作空间。在查询代码中,您获得的维度,即块中的维度 0,是指该块中的线程数。在大多数情况下,现代 GPU 为 1024*1024*64。网格维度显示 x、y 和 z 维度的块数。网格就像一个工作区,您可以在运行 __ global __ 函数时选择所需的块数和每个块所需的线程数。

      【讨论】:

        猜你喜欢
        • 2023-04-11
        • 2017-06-04
        • 2011-10-07
        • 2016-01-19
        • 2013-05-09
        • 1970-01-01
        • 2011-05-22
        • 2021-08-09
        相关资源
        最近更新 更多