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 然后最后一个用来当临时变量 ?