【YOLOv4探讨 之六】Darknet Makefile文件解析

本文详细探讨了Darknet YOLOv4的Makefile,特别是针对CPU并行计算和加速的改进。文章指出原版Makefile基于NVIDIA模板,适合GPU、CUDA、cuDNN配置,并提供了修改建议。相比之下,通过cmake生成的Makefile不包含这些配置。作者还介绍了如何根据需求裁剪CFLAGS以实现模块化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Darknet YOLOv4 Makefile在YOLOv3基础上有调整,针对CPU并行计算,CPU加速都有改进。

上篇文章《【YOLOv4探讨 之五】darknet YOLOv4 编译出现cv::imread(cv::String const&, int)’..未定义的引用》(https://blog.youkuaiyun.com/qq_41736617/article/details/118256210)抛出一个问题:原版的makefile和使用cmakelist.txt重新cmake之后的makefile之间是什么对应关系呢?

这里分析后认为原版的makefile是直接使用了NVIDIA的makefile模板,当你把GPU、CUDA、cuDNN配置好了,就可以根据自己的代码略加修改完成makefile编写,需要修改的地方只有OBJ,其他的都是可以直接套用的。而使用cmakelist.txt重新cmake之后的makefile,不关心GPU、CUDA、cuDNN以及加速的配置,所有内容在cmakelist.txt都设置好了,导致生成的makefile差别巨大。

另外,makefile中,将Darknet、CUDA和OpenCV、cuDNN区分设置成DEPS、COMMON、CFLAGS三个变量,当不使用神经网络时,可以将CFLAGS直接裁减掉,便于模块化。

本人将解析注释放在了makefile代码中,如下:

#定义编译使用的变量
# 同时设置 GPU=1 和 CUDNN=1 可以使用 GPU 进行软件运行加速
GPU=1#是否使用cuda库
CUDNN=1#是否使用cuDNN库,cuDNN是用于深度神经网络的GPU加速库。它强调性能、易用性和低内存开销。
CUDNN_HALF=0#按照显卡架构选择架构,进而选择编译使用的库
# 设置 CUDNN_HALF=1 可以进一步完成3倍的显卡加速(张量核心采用混合精度,即非单一使用单精度、双精度,可以根据数据类型进行适配),适用的GPU: Volta, Xavier, Turing and higher
#架构排序(时间顺序):
   #Tesla:市面已经没有相关显卡
   #Fermi:GeForce 400, 500, 600, GT-630
   #Kepler:Tesla K40/K80, GeForce 700, GT-730
   #Maxwell:Tesla/Quadro M series GeForce 900, GTX-970
   #Pascal:Tesla p100,GTX 1080, GTX 1070, GTX 1060
   #Votal:Tesla V100, GTX 1180
   #Turing:T4,GTX 1660 Ti, RTX 2060
   #Ampere:A100

OPENCV=1#是否使用OpenCV库
#通过设置AVX和OPENMP确定是否使用CPU并行加速,(if error occurs then set AVX=0)
AVX=0
OPENMP=0
#OpenMP是一种用于共享内存并行系统的多线程程序设计方案,支持的编程语言包括C、C++和Fortran。OpenMP提
#供了对并行算法的高层抽象描述,特别适合在多核CPU机器上的并行程序设计。编译器根据程序中添加的pragma
#指令,自动将程序并行处理,使用OpenMP降低了并行编程的难度和复杂度。当编译器不支持OpenMP时,程序会退化成普通(串行)程序。程序中已有的OpenMP指令不会影响程序的正常编译运行。


#是否生成libdarknet.so动态链接库
LIBSO=0
#是否使用ZED立体相机,该相机和软件套件能让无人机、机器人和其他机器获得诸如室内/室外防撞、自动导航
#和3D测绘的能力。ZED相机的视觉能力来自于CUDA,也就是Nvidia顶级图形显卡的编程模型。它让运行相机配套
#软件的的计算机有能力以15fps的速度去处理最高4416x1242分辨率的实时景深地图。需要下载专用的SDK,这里
#不讨论。
ZED_CAMERA=0 # ZED SDK 3.0 and above
ZED_CAMERA_v2_8=0 # ZED SDK 2.X

USE_CPP=0#使用g++还是gcc
DEBUG=0#使用debug还是realse

#架构设置,需要对应特定的显卡
#--generate-code <specification>,...             (-gencode)                      
#        This option provides a generalization of the '--gpu-architecture=<arch> --gpu-code=<code>,
#        ...' option combination for specifying nvcc behavior with respect to code
#        generation.  Where u
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北溟客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值