gpt4 book ai didi

c++ - 库达 |对多处理器数量的兴趣 - 与 SM 混淆

转载 作者:搜寻专家 更新时间:2023-10-31 01:47:32 24 4
gpt4 key购买 nike

我有一台 NVIDIA GT650M,具有以下属性:

( 2) Multiprocessors, (192) CUDA Cores/MP:     384 CUDA Cores
Maximum number of threads per multiprocessor: 2048

我刚从流式多处理器 (SM) 和实际多处理器之间的混淆中解脱出来。 SM 和多处理器是不同的东西,对吧?例如,使用可视化分析器,我有一个虚拟内核,它在以 1 个线程的 1 个 block 启动时只等待并持续 370 毫秒。我可以用一个 SM 用 4 个 1024 线程 block 启动它,它仍然持续 370 毫秒。这是正常的,因为该任务使用芯片的 2 个多处理器,每个处理器使用 2048 个并发线程(只要我使用 5 个 block x 1024,就需要 740 毫秒,正常)。同样,我可以使用 4 个 SM 在 1024 个线程的 block 中同时启动 4 次,它仍然需要 370 毫秒,好的。

问题的第一部分只是为了确保我们不应该混淆 SM 和多处理器?就像我有时甚至在这里的答案中看到的那样:CUDA - Multiprocessors, Warp size and Maximum Threads Per Block: What is the exact relationship?结果,无法通过多处理器显式控制任务的调度方式,因为(据我所知)没有运行时函数允许这样做,对吗?那么,如果我有一张卡有 2 个多处理器和每个多处理器 2048 个线程,或者另一张卡有 4 个多处理器,每个多处理器有 1024 个线程,给定的程序将以相同的方式执行吗?

其次,我想知道哪种用途更好,拥有更多的多处理器和更少的内核,还是相反?到目前为止,我的理解让我说更多的多处理器(对于每个多处理器给定的最大线程)和很少的内核将更适合更大规模的并行性,很少/简单的操作,而每个多处理器有更多的内核(现在我正在谈论我几乎不知道的东西)将会有更多专用的 ALU 用于加载/存储操作和复杂的数学函数,因此它将更适合每个线程需要更多操作的内核?

最佳答案

这似乎是对术语的混淆。

“SM”(SM = Streaming Multiprocessor)和“多处理器”指的是同一事物,是 GPU 上主要执行单元的硬件单元。这些术语指的是特定的硬件资源。不同的 GPU 可能有不同数量的 SM。可以使用 CUDA deviceQuery 找到特定 GPU 的 SM 数量 sample code :

cudaDeviceProp deviceProp;
cudaGetDeviceProperties(&deviceProp, 0); // 0-th device
std::cout << deviceProp.multiProcessorCount;

“启动”中的 CUDA 程序元素是线程 block 。 网格 是与内核启动 关联的所有线程 block 的集合。单独的线程 block 在单独的 SM 上执行。您可以在内核中启动大量线程 block ,或多或少与您运行的 GPU 无关。然后,线程 block 将以特定 GPU 及其 SM 提供的任何速率进行处理。

没有 API 函数可以直接控制线程 block 到 SM 的调度。可以通过使用 CUDA stream priorities 获得对同时运行的不同内核的线程 block 调度的某种程度的间接控制。 .

关于c++ - 库达 |对多处理器数量的兴趣 - 与 SM 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19083905/

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