caffe 支持 CUDA Dynamic Parallelism

CUDA从3.5开始就支持了动态并行,就是支持GPU线程再直接启动一组子计算线程,而在这个之前GPU计算线程都是由CPU线程启动的。
为了支持这个动态并行特性,需要链接 cudadevrt 库。

不过,caffe 始终没有应用这个CUDA特性。 我自己fork了一个分支启用了该特性 支持动态并行的caffe实现
为了启用该特性,还更改了cuda代码的编译链接过程,原来都是每个cu文件直出可链接的目标文件。这个分支时每个cu文件都先 device-c 到一个目标文件,再把所有的cu的目标文件 dlink 到一个可链接的目标文件。
启用这个特性的所有修改都在 Makefile 中,我定义了一个 CUDA_DYNAMIC_PARALLEL 标识控制是否启用, 在 Makefile.config 中定义 CUDA_DYNAMIC_PARALLEL := 1 即可启用。启用后也传递了一个 CUDA_DYNAMIC_PARALLEL 预定义变量到编译器以方便代码中据此控制区分下代码。

启用后即可在cuda代码中享用动态并行特性了。

至于能不能显著提高计算速度?对原有的层没有影响,这是要修改代码的啊,可能原有的部分层会受益于此功能,我没检查。对于新增层的话,如果层计算逻辑可以包含用GPU计算线程新起计算线程的话,就可受益,毕竟不必在绕回到CPU线程由CPU线程来启动下一轮GPU线程。

发表评论

电子邮件地址不会被公开。 必填项已用*标注