一.CPU和GPU区别
其中绿色的是计算单元,橙红色的是存储单元,橙黄色的是控制单元。GPU采用了数量众多的计算单元和超长的流水线,但只有非常简单的控制逻辑并省去了Cache
1)性能(低延时性Latency)与吞吐量(Throughput)
■Cache, local memory: CPU > GPU
■Threads(线程数): GPU > CPU
Registers:GPU > CPU 多寄存器可以支持非常多的Thread,thread需要用到register,thread数目大,register也必须得跟着很大才行
2)CPU:基于低延时性设计(较大cache)
3)GPU:基于吞吐量设计
3. CUDA的结构
■CUDA软件体系可以分为三层结构
■CUDA函数库(CUDA Library)
■CUDA运行时API(Runtime API)
■CUDA驱动API(Driver API)
■CUDA应用程序可以通过直接调用底层的CUDA驱动来调用GPU硬件进行并行计算
■也可以使用对底层驱动进行了一定封装的CUDA运行时库来简化编程过程(二者不可混合使用)
■对一些标准的数学函数计算,也可以直接调用CUFFT、CUBLAS以及CUDPP等标准函数库进一步简化编程过程。
4.CUDA API
CUDA可以通过两种方式调用底层GPU硬件:驱动API和运行API
5 CUDA硬件模式
1.)线程块 :
Kernel核: 可以理解为C/C++中的一个函数function
2)GPU
■SM(streammultiprocessor): 流处理器
■GPU:每个GPU有若干个SM,最少有1个,目前16个算大的,每个SM并行而独立运行
注意三个概念 :一个线程块(线程组) SM(流式的多核处理器),
6.CUDA编程模型
1)CUDA编程模型的原则
2)内存模型
CPU和GPU分别使用各自的内存。在GPU中的线程块中存在一个共享内存
7同步性synchronisation和屏障barrier
1)不同的线程在共享和全局内存中读写数据需要有先后的控制,所以引入了同步性的概念。
2)屏障的作用:用来控制多个线程的停止与等待,当所有线程都到达了屏障点,程序才继续进行
8)CUDA编程模型—示意图
1)GPU程序一般步骤
■1. CPU分配空间给GPU(cudaMalloc)
■2. CPU复制数据给GPU(cudaMemcpy)
■3. CPU加载kernels给GPU做计算
■4. CPU把GPU计算结果复制回来