【发布时间】:2020-12-25 21:27:29
【问题描述】:
我有一个使用 OpenCV 库的 c++ 项目。当我运行make 时,构建需要很长时间。如何加快构建时间?
我确实安装了支持 GPU 的 OpenCV,并认为这可能是瓶颈(因为它可能正在为不同的 GPU 架构进行编译?),所以我尝试使用 cmake -D WITH_CUDA=OFF .. 来构建我的项目。不幸的是,这并没有奏效……有什么建议吗?
注意:如果 GPU 显着加快编译时间,我可以禁用它。
这是我的 CMakeLists.txt 文件的样子:
cmake_minimum_required(VERSION 3.10)
project(Cruisin VERSION 1.0)
find_package( OpenCV REQUIRED)
find_package (Threads)
include_directories(include)
include_directories( ${OpenCV_INCLUDE_DIRS} )
file(GLOB SOURCES src/*.cpp app/main.cpp)
add_executable(main ${SOURCES})
target_link_libraries( main ${CMAKE_THREAD_LIBS_INIT} ) # Add threading lib
target_link_libraries( main ${OpenCV_LIBS} )
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
其他细节:
-
编译器:gcc
-
操作系统:虚拟 Ubuntu 20.04(Windows 10 上的 WSL2)
-
项目结构:
ROOT/app/有一个主cpp文件,ROOT/src/有2个源文件,ROOT/include/有2个对应的头文件 -
OpenCV 和我的项目文件位于常规 Windows 文件系统上(通过
/mnt/目录访问),但 CUDA 和 Make/CMake 位于虚拟 WSL 中
编辑:解决方案
问题似乎是在 Windows 文件系统中完成任何 I/O 时 WSL 非常慢。就我而言,我使用的是安装在 mnt/(Windows 文件系统)中某处的 OpenCV。我在 WSL 中 / 的某个地方重建了 OpenCV,并将我的项目也移到了那里,而且速度要快得多。
【问题讨论】:
-
我们是在谈 10 多分钟还是几个小时,还是什么?我没有注意到使用 OpenCV 的典型项目需要花费异常长的时间才能在具有 6 个或更多内核的现代 cpu 上构建。
-
我们谈了 10 多分钟。话虽如此,这个 cpp 项目还没有发生太多事情(文件很少,行不多),但是我能够在 1-2 分钟内编译一个大小相当的不同 OpenCV 项目......我不是确定为什么这个项目需要这么长时间
-
请发布构建过程的日志。我们需要看看正在建造什么,以及是否有必要。
-
CMakeLists.txt看起来不错,并且与该主题的许多其他脚本相似。细节可能在您的源文件、平台、编译器中……但您没有描述它们。那么,您希望我们提供哪些信息? -
好吧,你有几行来自 CMake/Make 执行构建和链接你的源文件。其中哪一行花费了最多的时间?这个金额是多少?由于您使用 WSL2,因此它对来宾文件系统(在您的情况下为 Ubuntu 20.04)内部和外部的文件具有不同的访问时间。那么,您的源代码和构建目录位于内部 Ubuntu 还是外部?