Toa*_*yen 1 cuda nvidia core warp
我正在阅读答案并且有冲突的想法:在此链接https://www.3dgep.com/cuda-thread-execution-model/ 中,两个经线(64 个线程)可以在 SM(32 个 CUDA)上同时运行核)。所以,我知道经纱上的线程被拆分并在 16 个 CUDA 核心上进行处理。这个想法对我来说很有意义,因为每个 CUDA 核心都有 1 个 32bitALU。
然而,在其他链接中,他们声称 1 个 CUDA 核心能够处理 32 个并发线程(与扭曲大小相同)(https://cvw.cac.cornell.edu/GPU/simt_warp)。因此,1 个 CUDA 扭曲只能由一个 CUDA 核心处理。这也是有道理的,因为同一经线上的所有线程都使用相同的 PC 计数器。
所以,我的问题是如何将 CUDA 扭曲与 CUDA 核心映射?
在 CUDA GPU 内部,有称为 SM(流式多处理器)的计算单元。每个 SM 都有用于支持 CUDA 执行线程的各种硬件资源(warp 调度程序、指令提取/解码、寄存器文件、执行/功能单元、共享内存、L1 缓存等)。
每当发出指令时,它都会在整个扭曲范围内发出。因此,发出的任何指令都需要 32 个用于该类型指令的功能单元。CUDA 低级指令 (SASS) 可以分为多个类别,并且有一个功能单元类型将处理该指令或该类别中的指令。例如,从内存加载指令(例如LD)将由 LD/ST 单元(加载/存储)处理。这些指令处理单元有多种不同的类型。
一些额外的特殊类型的单位是 SP 和 DP 单位。SP 单元可以处理单精度浮点乘法、加法或乘加指令。DP 单元与此类似,只是它处理处理双精度浮点类型的指令。
因此,要发出指令,warp-scheduler 最终需要 32 个适合该指令类型的单元类型。对于单精度浮点乘法运算,在该周期中需要 32 个 SP 单元来接收发出的指令。
其他类型的指令仍然需要 32 个单元(最终),但 SM 中可能没有 32 个给定类型的单元。当特定类型的单元少于 32 个时,warp 调度器将跨多个时钟周期调度单个指令。例如,假设一个特定的 GPU SM 设计只有 4 个 DP 单元。然后,warp 调度器,当它有一个 DP 乘法操作/指令要发布时,将使用这 4 个单元,总共 8 个时钟周期 (4x8=32),以便为每条指令提供一个功能/执行单元。 -线程,全经线。每个线程最终都需要一个功能单元。每个功能单元每个时钟可以为一个线程处理一条指令。为了处理整个经线发出的指令,
CUDA 中的术语“核心”通常用于指代以上定义的 SP 单元。鉴于此,我们可以立即确定:
| 归档时间: |
|
| 查看次数: |
458 次 |
| 最近记录: |