处理一个CUDA翘曲用多少个CUDA核?

问题描述 投票:0回答:1

我在阅读中寻找答案,有冲突的想法:在这个链接中 https:/www.3dgep.comcuda-thread-execution-model在一个SM(32个CUDA核)上,可以同时运行两个翘曲(64个线程)。所以,我的理解是,一个 warp 上的线程被分割开来,在 16 个 CUDA 内核上处理。这个想法对我来说是合理的,因为每个CUDA核心有1个32bitALU。

但是,在其他的链接中,他们声称1个CUDA核能够处理32个并发线程(与翘曲大小相同) (https:/cvw.cac.cornell.eduGPUsimt_warp。). 所以,1个CUDA经线只能由一个单一的CUDA核来处理。这也是有道理的,因为同一个翘曲上的所有线程使用同一个PC计数器。

所以,我的问题是,一个CUDA warp如何与CUDA核进行映射?

multithreading cuda nvidia core warp
1个回答
2
投票

CUDA GPU内部,有一些计算单元称为SM(Streaming Multiprocessor)。每一个SM都有各种硬件资源(经线调度器、指令获取解码、寄存器文件、执行功能单元、共享内存、L1缓存等),用来支持CUDA线程的执行。

每当发出一条指令时,都是全经线发出的。 因此,任何指令的发出都需要32个该类型指令的功能单元。 CUDA低级指令(SASS)可以分成许多类别,有一个功能单元类型将处理该指令或该类别的指令。 例如,从内存中加载的指令(如? LD)将由LDST单元(loadstore)处理。 这些指令处理单元有许多不同的种类。

一些额外的 特别是SP和DP单元. SP单元可以处理单精度浮点乘法、加法或乘加指令。 DP单元与之类似,但它处理的是双精度浮点类型的指令。

因此,要发出一条指令,经纬仪最终需要32个适合该指令类型的单元类型。 对于单精度浮点乘法运算,在该周期内,它将需要32个SP单元来接收该发出的指令。

其他类型的指令仍将需要32个单元(最终),但在SM中可能没有32个给定类型的单元。 当某一类型的单元少于32个时,翘曲调度器将在多个时钟周期内调度一条指令。 例如,假设某个GPU SM设计是这样的,只有4个DP单元。 那么翘曲调度器,当它有例如DP乘法操作指令要发出时,将在总共8个时钟周期(4x8=32)中使用这4个单元,以便在考虑每线程、翘曲范围时为每条指令提供一个功能执行单元。 每个线程最终需要一个功能单元。每个功能单元可以为一个线程,每个时钟处理一条指令。 为了处理在全经线范围内发出的指令,要么需要32个功能单元,这样指令就可以在一个时钟周期内发出,要么指令将在多个时钟周期内,向较少的功能单元发出。

CUDA中的 "核心 "一词一般是指上面定义的SP单元。 鉴于此,我们可以立即确定。

  1. CUDA的 "核 "其实和CPU的 "核 "不一样。
  2. 一个CUDA "核 "只会参与相对较少的指令类型的处理,包括SP浮点加法、乘法和乘加法。其他任何指令类型 将需要不同类型的功能单元,来处理该指令。 一个SM包含128个CUDA内核(即SP单元),并不意味着它也包含128个DP单元,或128个LDST单元,或任何其他功能单元类型的特定数量。 一个SM中的功能单元数量可以而且确实因功能单元类型而变化。 不同的GPU架构(Maxwell、Pascal、Volta)和架构内不同的计算能力,可能会有不同的功能单元类型的混合或数量。
© www.soinside.com 2019 - 2024. All rights reserved.