gpt4 book ai didi

cuda - 线程 block 数与计算机上的cuda内核之间的关系(在CUDA C中)

转载 作者:行者123 更新时间:2023-12-04 05:04:53 25 4
gpt4 key购买 nike

我的计算机上安装了CUDA 2.1,它具有带有64个cuda内核的图形卡。
我编写了一个程序,其中同时初始化了30000个块(每个块1个线程)。但是从gpu不能获得令人满意的结果(它的执行速度比cpu慢)

为了获得良好的性能,块的数量是否必须小于或等于内核的数量?还是性能与块数无关

最佳答案

CUDA内核并不是您在传统CPU上可以称呼的内核。确实,它们只不过是 ALU (算术和逻辑单元)而已,它们仅能计算现成的运算。

您可能知道,已定义块内的每个扭曲(32个线程的组)都会处理线程。当您的块被分配到不同的SM(流式多处理器,它们是GPU的实际核心)时,每个SM都会在一个块内调度扭曲,以根据获取线程输入所需的内存访问时间来优化计算时间。数据。

问题是线程始终通过其所属的线程束来处理,因此,如果每个块只有一个线程,则运行该线程的SM将无法通过线程束进行调度,并且您将无法利用多个可用的CUDA内核。您的CUDA内核将等待数据处理,因为 CUDA内核计算的速度比通过内存检索数据快得多。

GPU等待的不是很多线程少的块。在这种情况下,您将面临每个SM限制(此数字取决于您的设备)的块,这会迫使您的GPU花大量时间在SM上放置块,然后将其移除以处理下一个块。您应该增加块中的线程数,而不是增加应用程序中的块数。

关于cuda - 线程 block 数与计算机上的cuda内核之间的关系(在CUDA C中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6329885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com