Created by: jiweibo
【描述】 lite cuda 支持fp16 kernel运行模式。
经过多次实验验证,发现tensor core对于满足特定条件的 mul和conv具有可观的加速,但是对于一个给定的计算shape,无法保证fp16运算一定快于fp32模式。tensor core启用默认条件请参考nvidia文档
此外发现,将其它kernel写成half或half2类型,实际过程中收益甚微,与kernel的计算逻辑有关。模型中还很有可能由于fp32和fp16 kernel之间插入的cast节点 导致耗时更长性能下降
【fp16权重处理】 kernel的weights设置为PRECISION(kFP16)的方式,编译期图分析阶段会默认插入io_copy_once和calib_once op,将cpu上的fp32权重先加载到cuda中,之后进行precision cast操作得到fp16的权重,最后显示删掉cuda fp32中间权重,已经验证支持权重共享的特殊方式。
该Pr仅是框架支持fp16的必要改动,并添加了conv fp16 kernel,方便实验。