CARMA_platform_compilation_and_testing - alalek/opencv GitHub Wiki
1. Install build suites
- Install gcc-4.5-arm-linux-gnueabi, g++-4.5-arm-linux-gnueabi, cmake, make, python
- Install CUDA Toolkit for CARMA
- Download Thrust library (it isn’t included in CUDA 4.2 for CARMA). Copy thrust directory with header files to /include
git clone git://github.com/thrust/thrust.git cp -r thrust/thrust <path to cuda toolkit>/include/thrust
2. Getting OpenCV sources and testdata:
git clone https://github.com/opencv/opencv.git git clone https://github.com/opencv/opencv_extra.git
3. Build OpenCV for CARMA
1. create <opencv_build> directory and go to there 2. cmake -DGCC_COMPILER_VERSION="4.5" -DSOFTFP=ON -DUSE_NEON=ON -DCMAKE_SKIP_RPATH=ON \ -DCUDA_TOOLKIT_ROOT_DIR=<cuda_dir> -DCUDA_ARCH_BIN="2.1(2.0)" -DCUDA_ARCH_PTX="" \ -DWITH_CUDA=ON -DWITH_CUBLAS=ON -DWITH_TBB=ON -DBUILD_opencv_python=OFF -DBUILD_TBB=ON \ -DBUILD_ZLIB=ON -DBUILD_TIFF=ON -DBUILD_JASPER=ON -DBUILD_JPEG=ON -DBUILD_PNG=ON -DBUILD_OPENEXR=ON \ -DCMAKE_TOOLCHAIN_FILE=<opencv_source>/platforms/linux/arm-gnueabi.toolchain.cmake <opencv_source> 3. make
Note: Form the listing above, OpenCV GPU will be compiled only for Fermi sm_21. To adjust target architectures, you need to modify CUDA_ARCH_BIN and CUDA_ARCH_PTX CMake variables, which control what to embed in output file as GPU binary and as PTX intermediate code.
For those who are familiar with NVCC command line interface
- -DCUDA_ARCH_BIN=“2.1(2.0)” is expanded to –gencode arch=compute_20,code=sm_21
- -DCUDA_ARCH_BIN=“3.0” is expanded to –gencode arch=compute_30,code=sm_30
- -DCUDA_ARCH_PTX=“3.0” is expanded to –gencode arch=compute_30,code=compute_30
You can specify several compute capabilities, but setting single architecture reduces output binary size and compilation time.
- -DCUDA_ARCH_BIN=“2.1(2.0) 3.0 3.5”
- -DCUDA_ARCH_PTX=“1.2 1.3”
4. Deploy OpenCV and test suite to CARMA
- Copy applications from opencv/build/bin directory.
- Copy libraries from opencv/build/lib directory.
- Copy directory opencv_extra/testdata to CARMA.
5. Run tests on CARMA and generating report
- Specify test data path by setting:
export OPENCV_TEST_DATA_PATH=<path to testdata folder>
- Execute accuracy tests. It will run on all CUDA devices installed
./opencv_test_gpu
- Execute performance tests on specified device.
./opencv_perf_gpu --gtest_output=xml:perf_report.xml [--perf_cuda_device=N]
- Generate human readable report file
copy perf_report.xml from CARMA to desktop. python opencv/modules/ts/misc/summary.py perf_report.xml -o html >report.html
- It’s possible to pass arbitrary number of another report files from another test runs on another hardware to compare all them in one summary final report.
python opencv/modules/ts/misc/summary.py fil1.xml fil2.xml fil3.xml -o html >report.html
- To run measure performance of CPU counterparts from OpenCV run the same performance framework in the following way:
./opencv_perf_gpu --gtest_output=xml:cpu_perf_report.xml --perf_run_cpu
- For partial test run, specify filter string via parameter. See more in GTest documentation
./opencv_perf_gpu --gtest_output=xml:perf_report.xml --gtest_filter=*GoodFeaturesToTrack*