本文从软硬件层面讲一下CUDA的结构,应用,逻辑和接口。分为以下章节:
(一)、GPU与CPU
(二)、CUDA硬件层面
(三)、CUDA安装
(四)、CUDA 结构与接口
4.1 Kernels
4.2 Thread,Block, Grid
4.3 Memory
4.4 Execution
(五)、码HelloWorld——数组求和
希望感兴趣的同学可以一起讨论。
(一)、GPU与CPU
对于浮点数操作能力,CPU与GPU的能力相差在GPU更适用于计算强度高,多并行的计算中。因此,GPU拥有更多晶体管,而不是像CPU一样的数据Cache和流程控制器。这样的设计是因为多并行计算的时候每个数据单元执行相同程序,不需要那么繁琐的流程控制,而更需要高计算能力,这也不需要大cache。
(二)、CUDA硬件层面:
Nvidia于2006年引入CUDA,一个GPU内嵌通用并行计算平台。CUDA支持C, C++, Fortran, Java, Python等语言。
那么一个多线程CUDA程序如何执行的呢?
GPU建立在一组多处理器(SMX,Streaming Multiprocessors)附近。
一个SMX的配置:
- 192 cores(都是SIMT cores(Single Instruction Multiple Threads) and 64k registers(如下图所示)
GPU中的SIMT对应于CPU中的SIMD(Single Instruction Multiple Data)
- 64KB of shared memory / L1 cache
- 8KB cache for constants
- 48KB texture cache for read-only arrays
- up to 2K threads per SMX
不同显卡有不同配置(即SMX数量不同),几个例子: