cuda编程学习笔记
Gloabal 和device函数
- 尽量少用递归
- 不要用静态变量
- 少用malloc(现在允许但不鼓励)
- 小心通过指针实现的函数调用
向量数据类型
- 同时适用于host和device
- 通过函数make_< type name>构造
int2 i2=make_int2(1,2);
float4 f4=make_float4(1.0f,2.0f,3.0f,4.0f);
数学函数
Instrinsic function内建函数
- 仅面向Device设备端
- 更快,但精度降低
- 以__为前缀,例如:
__exp,__log,__sin,__pow,...
线程同步
块内线程可以同步
- 调用__syncthreads创建一个barrier栅栏
- 每个线程在调用点等待块内所有线程执行到这个地方,然后所有线程继续执行后续指令
Mds[i]=Md[j];
__syncthreads();
func(Mds[i],Mds[i+1]);
- 要求线程的执行时间尽量接近
- 如果不能同步到一点,会导致死锁,避免使用条件语句
内存模型
Atomic Functions 原子函数
atomicAdd()
atomicSub()
atomicExch()
atomicMin()
atomicMax()
atomicDec()
atomicCAS()
atomicAnd()
atomicOr()
atomicXor()