Darknet在GPU上运行可以得到500倍的提速,编译使用GPU要求显卡是Nvidia卡并且正确安装了CUDA。

GPU环境下的编译配置都是在 /darknet/Makefile 文件中定义的,GPU环境的编译有3点更改需要注意。

1. 更改Makefile前两行GPU和CUDNN的配置:


GPU=1

CUDNN=1

2. 更改CUDA的路径

48~51行,在"ifeq ($(GPU), 1)"语句块中修改为自己的CUDA安装路径,更改前默认路径如下:

ifeq ($(GPU), 1)

COMMON+= -DGPU -I/usr/local/cuda/include/

CFLAGS+= -DGPU

LDFLAGS+= -L/usr/local/cuda/lib64 -lcuda -lcudart -lcublas -lcurand

例如修改为:

ifeq ($(GPU), 1)
COMMON+= -DGPU -I/usr/local/cuda-8.0/include/
CFLAGS+= -DGPU
LDFLAGS+= -L/usr/local/cuda-8.0/lib64 -lcuda -lcudart -lcublas -lcurand

23行,修改NVCC的路径:

NVCC=/usr/local/cuda-8.0/bin/nvcc

3. 修改ARCH配置

如果经过1和2的配置修改后编译的darknet运行可能会报以下错误:

Loadingweights from yolo.weights...Done!
CUDA Error:invalid device function
darknet: ./src/cuda.c:21: check_error: Assertion `0' failed.
Aborted (core dumped)

这是因为配置文件Makefile中配置的GPU架构和本机GPU型号不一致导致的。
更改前默认配置如下(不同版本可能有变):

ARCH= -gencode arch=compute_30,code=sm_30 \
      -gencode arch=compute_35,code=sm_35 \
      -gencode arch=compute_50,code=[sm_50,compute_50] \
      -gencode arch=compute_52,code=[sm_52,compute_52]
#      -gencode arch=compute_20,code=[sm_20,sm_21] \ This one is deprecated?
# This is what I use, uncomment if you know your arch and want to specify
# ARCH= -gencode arch=compute_52,code=compute_52

compute_30表示显卡的计算能力是3.0,几款主流GPU的compute capability列表:

  • GTX Titan x : 5.2
  • GTX 980      : 5.2
  • Tesla K80    : 3.7
  • Tesla K40    : 3.5
  • K4200         : 3.0

所以Tesla K80对应compute_30,Tesla K40c对应compute_35,Titan X对应compute_52,根据自己的GPU型号的计算能力进行配置,例如配置为:

ARCH= -gencode arch=compute_35,code=compute_35 \

重新编译即可。

CUDA官方说明文档:http://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html#virtual-architecture-feature-list

最新文章

  1. 那些VisualStudio隐藏的调试功能
  2. appium 常用api介绍(1)
  3. linux gksu用法
  4. HDOJ 1220 Cube
  5. POJ 2246 Matrix Chain Multiplication(结构体+栈+模拟+矩阵相乘)
  6. ubuntu安装kvm流程
  7. 2015北大夏令营day1 B:An Idea of Mr. A
  8. 【转】morgan stanley 电面面经新鲜出炉
  9. CSS学习笔记(1):选择器
  10. Uva 1061 The Morning after Halloween
  11. Tomcat启动一闪而过
  12. 利用ffmpeg做视频解码的顺序
  13. iOS中 项目开发易错知识点总结 韩俊强的博客
  14. 教小朋友学Linux
  15. echo 输入背景和字体常用方法
  16. Qt Designer问题(挖坑)
  17. ol3对地图上某些特定的经纬度进行标注
  18. springmvc源码解析(二)
  19. 为啥RESTFULL如此重要?
  20. node、npm的安装和环境变量的配置

热门文章

  1. Windows Thin PC体验 & 语言包更改(win 7 included)
  2. linux 静态库使用经验
  3. leetCode 61.Rotate List (旋转链表) 解题思路和方法
  4. Enumerate Combination C(k, n) in a bitset
  5. Hibernate demo之使用注解
  6. ASP.NET页面间传值的几种方式
  7. Linux下Kafka单机安装配置方法
  8. 编译webrtc for android库与apk
  9. javascript的defer和async(转载)
  10. python的安装及matplotlib安装