Mar*_*son 10 cuda gpu gpgpu simd
我们来看看nVidia Fermi Compute Architecture.它说:
第一款基于Fermi的GPU采用30亿个晶体管实现,具有多达512个CUDA内核.CUDA核心为每个线程执行浮点或整数指令.512个CUDA内核由16个SM组成,每个内核32个内核.
[...]
每个CUDA处理器都有一个完全流水线的整数算术逻辑单元(ALU)和浮点单元(FPU).
[...]
在Fermi中,新设计的整数ALU支持所有指令的完整32位精度,符合标准编程语言要求.整数ALU也经过优化,可有效支持64位和扩展精度操作.V
据我所知,以及对我来说不清楚的是,GPU在所谓的warp中执行线程,每个warp由~32个线程组成.每个warp只分配给一个核心(是真的吗?).这是否意味着,单个SM的32个内核中的每一个都是SIMD处理器,其中一条指令处理32个数据部分?如果是这样,那么为什么我们说warp中有32个线程,而不是单个SIMD线程?为什么内核有时被称为标量处理器,而不是矢量处理器?
Rob*_*lla 15
每个warp只分配给一个核心(是真的吗?).
不,这不是真的.warp是32个执行线程的逻辑集合.要从单个warp执行单个指令,warp调度程序通常必须调度32个执行单元(或"核心",尽管"核心"的定义有些松散).
核心实际上是标量处理器,而不是矢量处理器.32个核心(或执行单元)由warp调度程序编组,以跨32个线程执行单个指令,这是"SIMT"名字来源的地方.
首先让我们回想一下,术语“ CUDA核心”是nVIDIA的营销口号。这些不是CPU具有内核的核心。同样,“ CUDA线程”与我们在CPU上已知的线程不同。
与GPU上的CPU内核等效的是“对称多处理器”:它具有自己的指令调度程序/调度程序,自己的L1高速缓存,自己的共享内存等。它是CUDA线程块,而不是翘曲分配给GPU内核(即流式多处理器)的对象。在SM中,将选择经纱以为整个经纱排定指令。从CUDA的角度来看,它们是32个独立的线程,这些线程是指令锁定的。但这与说warp就像单线程,只执行32通道宽的SIMD指令一样,没有什么不同。当然,这并不是一个完美的类比,但我觉得这很不错。您对CPU SIMD通道不太了解的是对正在执行的通道的掩盖,其中不活动的通道不会对有效通道的寄存器值设置,内存写入等产生影响。
我希望这对您有直觉的意义(或者您在过去两年中已经弄清楚了这一点)。
归档时间: |
|
查看次数: |
1883 次 |
最近记录: |