NLP中词嵌入(embedding)是非常重要的一环,embedding算子在反向计算时不同的线程会写入同一个结果,面对这类写冲突问题,高效的多线程计算必然要无锁化设计。而NVIDIA的加速卡本身支持了atomicAdd
等原子计算。
当我们使用较低精度在一些训推任务中量化加速模型时(如:FP16精度),CUDA底层会调用诸如 atomicAdd(half*, half)
这类原子指令。但是当前的硬件对这条指令的支持不够好,所以我们需要借助一些内存对齐的技术以应用效率更高的 atomicAdd(half2*, half2)
指令。本文重点讲述如何利用软件来弥补硬件的缺陷这样的实例。