区分两种API的前缀
驱动: cu_
运行: cuda_
important:
CUDA函数库
全部库: http://developer.nvidia.com/gpu-accelerated-libraries
nvcc编译器,注意后缀
CUDA硬件环境:
芯片是对于架构的实现
并行计算:
深度学习适合并行编程
stencil是以某一固定模板的形式读取数据(只能是读相邻元素的关系)
编写CUDA程序
习惯:
h_ CPU
d_ GPU
分配内存空间
CPU的数据复制给GPU: cudoMEmcpy
此squeue的kernels:
CPU加载kernels给GPU做计算
square<<< 1,ARRAY_SIZE >>>(d_out,d_in);
加载到GPU上去运行
nvcc same as gcc
-o : object 目标程序
CUDA编程:
不保证原则:不保证何时何地线程块运行
内存速度比较:
barrier屏障:
kernel 都是一个一个完成的
硬件与软件相对应
读取内存:
cuda高效策略:
避免: 1.在kernel中做条件判断
2. 循环长度不一
核心: 在kernel中的线程运行有短板原则
共享内存要考虑用屏障
针对网格和block使用,主要用于通讯
并行化归约:
并行的加法:可以看成对折,不断的取二分之一
采用并行编程
流
CPU与GPU协同
主要是要进行单位的转化