跳到主要内容

CUDA-编程

编程模型三层

  1. 领域层
  2. 逻辑层
  3. 硬件层

并行计算

指令和数据

数据相关性,

任务并行,数据并行。

  • 当可以同时处理许多数据时,就是数据并行。

计算机并行架构

  • 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*