基础
-
CUDA(Compute Unified Device Architecture)是NVIDIA提出
-
CPU和GPU是的PCI-Express总线相连
-
cpu
CPU则负责管理设备端的资源;
CPU核心比较重,用来处理非常复杂的控制逻辑,以优化串行程序执行。
CPU线程:操作系统必须交替线程使用启用或关闭CPU执行通道以提供多线程处理功能。上下文的切换缓慢且开销大 -
gpu
GPU用来提高计算密集型应用程序中并行程序段的执行速度,
GPU代表了一种众核架构(many cores),包含多线程、MIMD(多指令多数据)、SIMD(单指令多数据),以及指令级并行。英伟达称:SIMT(单指令多线程)
GPU核心较轻,用于优化具有简单控制逻辑的数据并行任务,注重并行程序的吞吐量。
GPU线程,GPU上的线程是高度轻量级的。 -
GPU性能
GPU容量特征:1. CUDA核心数 2. 内存大小
GPU性能评估:
1. 峰值计算性能,用GFlops(每秒十亿次浮点运算),TFlops(每秒万亿次浮点运算)
2. 内存带宽读取或写入数据的比率,GB/s
带宽是单位时间内可处理的数据量,通常表示为MB/s或GB/s。
吞吐量是单位时间内成功处理的运算数量,通常表示为gflops(即每秒十亿次的浮点运算数量)
- 异构架构
异构应用包含:主机代码和设备代码
GPU不是一个独立运行的平台而是CPU的协处理器。GPU必须通过PCIe总线与基于CPU的主机相连来进行操作,么CPU所在的位置被称作主机端而GPU,所在的位置被称作设备端。
CPU计算适合处理控制密集型任务,GPU计算适合处理包含数据并行的计算密集型任务。
- 代码:
在CPU上运行的主机代码
在GPU上运行的设备代码
NVIDIA的CUDA nvcc编译器在编译过程中将设备代码从主机代码中分离出来
例子:
检查nvcc编译器是否安装which nvcc
# /usr/local/cuda/bin/nvcc
检查GPU加速卡ls -l /dev/nv*
CUDA C程序步骤
- 扩展名
.cu
- CUDA nvcc 编译器来编译程序
__global__ void helloFromGPU()//__global__指明该函数在GPU上执行
{
printf("Hello World from GPU!\n");
}
int main(int argc, char **argv)
{
printf("Hello World from CPU!\n");
helloFromGPU<<<1, 10>>>();//GPU函数调用,<<>>中是线程的个数,这里是10个
cudaDeviceReset();//释放GPU资源,清空缓冲区, 不然不会打印
return 0;
}
cuda程序执行5个步骤
- 分配GPU内存
- 从CPU拷贝数据到GPU
- 调用CUDA内核来完成程序的指定运算
- 数据从GPU拷贝回CPU内存
- 释放GPU内存空间
其他
·分布式内存的多节点系统:
每个处理器有自己的本地内存,而且处理器之间可以通过网络进行通信这种系统常被称作集群.
·共享内存的多处理器系统
多处理器和同一个物理内存相关联或共用一个低延迟的链路(如PCI-Express或PCIe)
来源:CSDN
作者:Claroja
链接:https://blog.csdn.net/claroja/article/details/103777019