CUDA-编程
编程模型三层
- 领域层
- 逻辑层
- 硬件层
并行计算
指令和数据
数据相关性,
任务并行,数据并行。
- 当可以同时处理许多数据时,就是数据并行。
计算机并行架构
- SSID 单指令,单数据
- SIMD 多核心,
- MISD 多指令,单数据 ,比较少见
- MIMID
延迟、带宽、吞吐量
根据内存划分:分布式内存多节点,共享内存多处理器
异构计算
主机代码,设备代码
峰会计算性能,内存带宽 GFLops (每秒十亿次浮点运算) TFlops(每秒万亿次浮点运算)
CPU 线程与GPU线程
CUDA
cuda 加速库,编译器指令,应用编程接口,行业标准程序语言扩展,
CUDA C
两层 API : 运行时,驱动API
CUDA 修饰符
__global__ 核函数,GPU上执行,CPU端调用
__device__ GPU端调用, GPU端执行
--host__ 主机端执行,主机端调用
__device__和__host__可以同时使用,这个函数会同时为主机端和设备端编译。
前面我们说到__device__会被编译器编译为内联函数;
__noinline__和 __forceinline__则指定编译器不要内联,和强制内联这些函数。
CUDA内存层次结构
全局、共享。
CUDA线程层次结构
thread --- sp
thread block --- SM
Grid 块组合 --- 设备
First CUDA Program "Hello World"
which nvcc
/usr/local/cuda/bin/nvcc
/dev/nv*