一、infra 相关
1.块访问和周期访问
块访问是一个线程访问一段连续的数据,而周期访问是指每个线程访问的数据是不连续的多个,可能属于多个块,每个线程访问同一个块中的不同元素。
2.为什么说 occupancy 不是越高越好?
占用率的意思是指在 sm 活跃的线程束数量除以sm 能容纳的最大线程束数量,如果追求过高的占用率程序员可能需要调低每个 block 共享内存的大小,可以使用的寄存器的数量,这些数据需要从 HBM 去读取造成数据移动的时延增加,性能下降,所以不是占用率越高越好。
3.存储层次
从寄存器 到共享内存 到 l1 和 l2cache 以及 HBM 也就是全局内存。
寄存器和 cache 是由编译器和硬件维护,而对共享内存的访问和对全局内存的访问由程序员维护。共享内存的速度比全局内存快。
4.为什么需要在 q 和 kt 计算点积的时候除以根号 dk
因为 q 和 kt 的点击结果方差随着 dk 的增加也会变得更大,而 softmax 对输入敏感,结果会更趋近于 0 或者 1,进入饱和领域,梯度接近 0,就会难以训练。
二、手撕
数组方面的
1.一比特和两比特字符
在遇到一的时候就加 2,遇到零就加 1
2.求离其他人最远距离
(小便池问题)单独讨论最左边和最右边,其他的就普通的 r-l 然后除以 2
3.求和别人不挨着允许插入的数量
最左侧初始化 len 为 1