时隔两个月的记录
gpu栈空间大小问题
gpu每个线程的寄存器数量和空间是有限的,默认大小好像是1024字节。当遇到函数内有很多临时变量时会直接崩,这时候使用cudaDeviceSetLimit函数增加栈空间
cudaDeviceSetLimit(cudaLimitMallocHeapSize,4*1024);
gpu数据同步问题
类似于cpu的volatile关键字
gpu不同grid,block对同一块空间进行数据读写是需要数据同步的,
对于block内部的同步使用
__syncthreads();
这个会阻塞线程
对于全局的同步需要使用
__threadfence():
这个不会阻塞线程,一个比较具体的例子就是如果在gpu上写个缓存池,所有grid和block都要对缓存池读写,那么每次写完后都要用__threadfence()同步一下,不然其他线程拿到的会是错误的数据
…我被这玩意卡了一个多月…