pytorch batch size exp 2
pytorch batch size exp 2
// 2023-08
torch batch size set to 16
slow 一次迭代 = 1.4 seconds ; 15 or 17 一次迭代 只需要 0.35 seconds ; cuda 占用都是 99% ; 显存都只用了一半 ; worker_num = 4 ;
batch size = 8 一次迭代要 0.5 seconds 比设为 15 or 17 慢
一说 : batch size 设成 2 的幂 , 方便显卡分配 但是现在事实说明 , 不设成 2 的幂反倒更快 ......
盲猜缓存问题,2 的整数次幂可能导致某些情况下缓存命中率下降 一个 kernel 内部会复用当前 batch 的数据
shared memory bank conflict 可能是某个 kernel 有 bank conflict
应该是,查了一下,还是 cuda 的经典问题
我记得有一种填充的方法,每行填充一个空格,就可以错开
CPU 的 cache 有类似的现象,读取 stride 是 cache 大小的倍数,导致一直出现缓存冲突 CSAPP 第六章,存储器层次结构
以前学信竞的时候 被教导过 数组 不要开 2 的次幂 最好开 质数 ?
然而 用 数组 造 循环队列 就是要 开 2 的幂 的长度 才能把 取模运算 优化成 位运算 2%n 可以被优化为 2&(n-1) 从而提高速度
开 2^n+1 然后最后一个用来当临时变量 ?