Added code optimization for OpenCV compilation

- Changed -DCV_DISABLE_OPTIMIZATION to OFF
- This re-enable code optimization (dispatched code/intrinsics/loop unrolling/etc)
This commit is contained in:
Joachim
2020-03-26 09:16:22 +01:00
parent 66f9ed9bad
commit 50b4e6fc53
21 changed files with 193 additions and 13 deletions

View File

@ -17,6 +17,12 @@ The tests were done on the ESP32D0WDQ6 (revision 1):
## What works
TODO: Resume what works
## Installing esp-idf toolchain
First thing to do is to install the toolchain for the esp32 (see https://docs.espressif.com/projects/esp-idf/en/latest/get-started/index.html)
@ -74,7 +80,7 @@ cmake \
-DCMAKE_BUILD_TYPE=Release \
-DESP32=ON \
-DBUILD_SHARED_LIBS=OFF \
-DCV_DISABLE_OPTIMIZATION=ON \
-DCV_DISABLE_OPTIMIZATION=OFF \
-DWITH_IPP=OFF \
-DWITH_TBB=OFF \
-DWITH_OPENMP=OFF \
@ -86,6 +92,7 @@ cmake \
-DWITH_OPENCLAMDFFT=OFF \
-DWITH_OPENCLAMDBLAS=OFF \
-DWITH_VA_INTEL=OFF \
-DWITH_EIGEN=OFF \
\
-DWITH_GSTREAMER=OFF \
-DWITH_GTK=OFF \
@ -96,6 +103,7 @@ cmake \
-DBUILD_PNG=ON \
-DWITH_TIFF=OFF \
-DWITH_V4L=OFF \
-DWITH_LAPACK=OFF \
-DWITH_ITT=OFF \
-DWITH_PROTOBUF=OFF \
-DWITH_IMGCODEC_HDR=OFF \
@ -305,7 +313,7 @@ The `cmake` command is run, leading to the following errors:
**FIX:**
* Changed the file `cmake/checks/atomic_check.cpp` in OpenCV repo. The `std::atomic<long long>` was changed in `std::atomic<long>`, and also every `std::atomic<long long>` occurrence in the OpenCV files.
* Changed the file `cmake/checks/atomic_check.cpp` in OpenCV repo. The `std::atomic<long long>` was changed in `std::atomic<long>`, and also in file `modules/core/include/opencv2/core/utils/allocator_stats.impl.hpp` line 24.
* CMake Error at `/usr/share/cmake-3.16/Modules/TestBigEndian.cmake:50`. The ESP32 is in little endian.
@ -484,9 +492,7 @@ ESP_LOGI(TAG, "heap left: %d Bytes", esp_get_free_heap_size());
## Adding images codecs support
Things tried to read/writes images in JPEG, PNG, etc..
Things done to read/writes images in JPEG, PNG, etc..
#### PNG
@ -500,7 +506,7 @@ The library is compiled in the `3rdparty/` folder. Copy this folder into the esp
#### JPEG
* Remove `-DWITH_JPEG=OFF` and add `-DBUILD_JPEG=ON` of the cmake command
* => Problem at compilation time
* => Problem at compilation time. TODO

View File

@ -0,0 +1,87 @@
I (12398) SYSTEM: task stack left: 29028 Bytes
I (12408) SYSTEM: heap left: 4379580 Bytes
I (12678) opencv_tests: Image read of 399x473x3, with 0 pixel depth
I (12678) opencv_tests: ==================== Thresholding tests ====================
Time taken by Binary threshold: 26 [ms]
Time taken by Triangle threshold: 40 [ms]
Time taken by OTSU threshold: 43 [ms]
Time taken by To zero threshold: 26 [ms]
I (13138) SYSTEM: task stack left: 26124 Bytes
I (13138) SYSTEM: heap left: 3813264 Bytes
I (13138) opencv_tests: ==================== Blurring tests ====================
Time taken by GaussianBlur: 1068 [ms]
Time taken by medianBlur: 1592 [ms]
Time taken by bilateralFilter: 2774 [ms]
I (29458) SYSTEM: task stack left: 26124 Bytes
I (29458) SYSTEM: heap left: 3812992 Bytes
I (29458) opencv_tests: =========== Morphology transformations tests ===========
Time taken by erode: 279 [ms]
Time taken by dilate: 278 [ms]
Time taken by open: 533 [ms]
I (32748) SYSTEM: task stack left: 26124 Bytes
I (32748) SYSTEM: heap left: 3812992 Bytes
I (32748) opencv_tests: ==================== Resizing tests ====================
Time taken by linear resize: 105 [ms]
Time taken by cubic resize: 340 [ms]
Time taken by pyrUp: 498 [ms]
Time taken by pyrDown: 77 [ms]
I (35828) SYSTEM: task stack left: 936 Bytes
I (35828) SYSTEM: heap left: 3812992 Bytes
I (35828) opencv_tests: ================= Edge detection tests =================
Time taken by Sobel: 121 [ms]
Time taken by Canny: 317 [ms]
I (36568) SYSTEM: task stack left: 936 Bytes
I (36568) SYSTEM: heap left: 3812992 Bytes
OpenCV compiled with:
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DESP32=ON \
-DBUILD_SHARED_LIBS=OFF \
-DCV_DISABLE_OPTIMIZATION=OFF \
-DWITH_IPP=OFF \
-DWITH_TBB=OFF \
-DWITH_OPENMP=OFF \
-DWITH_PTHREADS_PF=OFF \
-DWITH_QUIRC=OFF \
-DWITH_1394=OFF \
-DWITH_CUDA=OFF \
-DWITH_OPENCL=OFF \
-DWITH_OPENCLAMDFFT=OFF \
-DWITH_OPENCLAMDBLAS=OFF \
-DWITH_VA_INTEL=OFF \
-DWITH_EIGEN=OFF \
\
-DWITH_GSTREAMER=OFF \
-DWITH_GTK=OFF \
-DWITH_JASPER=OFF \
-DWITH_JPEG=OFF \
-DWITH_WEBP=OFF \
-DBUILD_ZLIB=ON \
-DBUILD_PNG=ON \
-DWITH_TIFF=OFF \
-DWITH_V4L=OFF \
-DWITH_LAPACK=OFF \
-DWITH_ITT=OFF \
-DWITH_PROTOBUF=OFF \
-DWITH_IMGCODEC_HDR=OFF \
-DWITH_IMGCODEC_SUNRASTER=OFF \
-DWITH_IMGCODEC_PXM=OFF \
-DWITH_IMGCODEC_PFM=OFF \
\
-DBUILD_LIST=core,imgproc,imgcodecs \
-DBUILD_JAVA=OFF \
-DBUILD_opencv_python=OFF \
-DBUILD_opencv_java=OFF \
\
-DBUILD_opencv_apps=OFF \
-DBUILD_PACKAGE=OFF \
-DBUILD_PERF_TESTS=OFF \
-DBUILD_TESTS=OFF \
-DCV_ENABLE_INTRINSICS=OFF \
-DCV_TRACE=OFF \
-DOPENCV_ENABLE_MEMALIGN=OFF \
\
-DCMAKE_TOOLCHAIN_FILE=~/esp/esp-idf/tools/cmake/toolchain-esp32.cmake \
..

View File

@ -0,0 +1,85 @@
I (12395) SYSTEM: task stack left: 29028 Bytes
I (12395) SYSTEM: heap left: 4379580 Bytes
I (12695) opencv_tests: Image read of 399x473x3, with 0 pixel depth
I (12695) opencv_tests: ==================== Thresholding tests ====================
Time taken by Binary threshold: 30 [ms]
Time taken by Triangle threshold: 49 [ms]
Time taken by OTSU threshold: 52 [ms]
Time taken by To zero threshold: 30 [ms]
I (13235) SYSTEM: task stack left: 29028 Bytes
I (13235) SYSTEM: heap left: 3813264 Bytes
I (13235) opencv_tests: ==================== Blurring tests ====================
Time taken by GaussianBlur: 1102 [ms]
Time taken by medianBlur: 1596 [ms]
Time taken by bilateralFilter: 2773 [ms]
I (29665) SYSTEM: task stack left: 27340 Bytes
I (29665) SYSTEM: heap left: 3812992 Bytes
I (29665) opencv_tests: =========== Morphology transformations tests ===========
Time taken by erode: 355 [ms]
Time taken by dilate: 355 [ms]
Time taken by open: 686 [ms]
I (33875) SYSTEM: task stack left: 27340 Bytes
I (33875) SYSTEM: heap left: 3812992 Bytes
I (33875) opencv_tests: ==================== Resizing tests ====================
Time taken by linear resize: 109 [ms]
Time taken by cubic resize: 337 [ms]
Time taken by pyrUp: 499 [ms]
Time taken by pyrDown: 77 [ms]
I (36955) SYSTEM: task stack left: 936 Bytes
I (36955) SYSTEM: heap left: 3812992 Bytes
I (36955) opencv_tests: ================= Edge detection tests =================
Time taken by Sobel: 153 [ms]
Time taken by Canny: 324 [ms]
I (37805) SYSTEM: task stack left: 936 Bytes
I (37805) SYSTEM: heap left: 3812992 Bytes
OpenCV compiled with :
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DESP32=ON \
-DBUILD_SHARED_LIBS=OFF \
-DCV_DISABLE_OPTIMIZATION=ON \
-DWITH_IPP=OFF \
-DWITH_TBB=OFF \
-DWITH_OPENMP=OFF \
-DWITH_PTHREADS_PF=OFF \
-DWITH_QUIRC=OFF \
-DWITH_1394=OFF \
-DWITH_CUDA=OFF \
-DWITH_OPENCL=OFF \
-DWITH_OPENCLAMDFFT=OFF \
-DWITH_OPENCLAMDBLAS=OFF \
-DWITH_VA_INTEL=OFF \
\
-DWITH_GSTREAMER=OFF \
-DWITH_GTK=OFF \
-DWITH_JASPER=OFF \
-DWITH_JPEG=OFF \
-DWITH_WEBP=OFF \
-DBUILD_ZLIB=ON \
-DBUILD_PNG=ON \
-DWITH_TIFF=OFF \
-DWITH_V4L=OFF \
-DWITH_ITT=OFF \
-DWITH_PROTOBUF=OFF \
-DWITH_IMGCODEC_HDR=OFF \
-DWITH_IMGCODEC_SUNRASTER=OFF \
-DWITH_IMGCODEC_PXM=OFF \
-DWITH_IMGCODEC_PFM=OFF \
\
-DBUILD_LIST=core,imgproc,imgcodecs \
-DBUILD_JAVA=OFF \
-DBUILD_opencv_python=OFF \
-DBUILD_opencv_java=OFF \
\
-DBUILD_opencv_apps=OFF \
-DBUILD_PACKAGE=OFF \
-DBUILD_PERF_TESTS=OFF \
-DBUILD_TESTS=OFF \
-DCV_ENABLE_INTRINSICS=OFF \
-DCV_TRACE=OFF \
-DOPENCV_ENABLE_MEMALIGN=OFF \
\
-DCMAKE_TOOLCHAIN_FILE=~/esp/esp-idf/tools/cmake/toolchain-esp32.cmake \
..

View File

@ -81,7 +81,7 @@ void test_spiffs()
fgets(line, sizeof(line), f);
fclose(f);
printf("Read from file: '%s'", line);
printf("Read from file: '%s'\n", line);
/* Images reading/writing tests */
Mat src;
@ -203,7 +203,7 @@ void app_main(void)
ESP_LOGI(TAG, "Image read of %dx%dx%d, with %d pixel depth", src.rows, src.cols, src.channels(), src.depth());
/* Conversions and thresholds tests */
//test_thresholds(src);
test_thresholds(src);
disp_mem_infos();
/* Blurring tests */

View File

@ -21,7 +21,8 @@ class AllocatorStatistics : public AllocatorStatisticsInterface
{
protected:
#ifdef CV_CXX11
std::atomic<long> curr, total, total_allocs, peak; // ESP32 modification (from <long long> to <long>)
// std::atomic<long long> curr, total, total_allocs, peak;
std::atomic<long> curr, total, total_allocs, peak; // esp32 doesn't support hardware 64bit atomic. FIXME: add software support
#else
volatile long long curr, total, total_allocs, peak; // overflow is possible, CV_XADD operates with 'int' only
#endif

View File

@ -8,7 +8,7 @@
/* #undef CV_ENABLE_INTRINSICS */
/* OpenCV additional optimized code */
#define CV_DISABLE_OPTIMIZATION
/* #undef CV_DISABLE_OPTIMIZATION */
/* Compile for 'real' NVIDIA GPU architectures */
#define CUDA_ARCH_BIN ""

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -21,7 +21,8 @@ class AllocatorStatistics : public AllocatorStatisticsInterface
{
protected:
#ifdef CV_CXX11
std::atomic<long> curr, total, total_allocs, peak; // ESP32 modification (from <long long> to <long>)
// std::atomic<long long> curr, total, total_allocs, peak;
std::atomic<long> curr, total, total_allocs, peak; // esp32 doesn't support hardware 64bit atomic. FIXME: add software support
#else
volatile long long curr, total, total_allocs, peak; // overflow is possible, CV_XADD operates with 'int' only
#endif

View File

@ -8,7 +8,7 @@
/* #undef CV_ENABLE_INTRINSICS */
/* OpenCV additional optimized code */
#define CV_DISABLE_OPTIMIZATION
/* #undef CV_DISABLE_OPTIMIZATION */
/* Compile for 'real' NVIDIA GPU architectures */
#define CUDA_ARCH_BIN ""

View File

@ -40,7 +40,7 @@ else
fi
CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release -DESP32=ON -DBUILD_SHARED_LIBS=OFF -DCV_DISABLE_OPTIMIZATION=ON -DWITH_IPP=OFF -DWITH_TBB=OFF -DWITH_OPENMP=OFF -DWITH_PTHREADS_PF=OFF -DWITH_QUIRC=OFF -DWITH_1394=OFF -DWITH_CUDA=OFF -DWITH_OPENCL=OFF -DWITH_OPENCLAMDFFT=OFF -DWITH_OPENCLAMDBLAS=OFF -DWITH_VA_INTEL=OFF -DWITH_GSTREAMER=OFF -DWITH_GTK=OFF -DWITH_JASPER=OFF -DWITH_JPEG=OFF -DWITH_WEBP=OFF -DBUILD_ZLIB=ON -DBUILD_PNG=ON -DWITH_TIFF=OFF -DWITH_V4L=OFF -DWITH_ITT=OFF -DWITH_PROTOBUF=OFF -DWITH_IMGCODEC_HDR=OFF -DWITH_IMGCODEC_SUNRASTER=OFF -DWITH_IMGCODEC_PXM=OFF -DWITH_IMGCODEC_PFM=OFF -DBUILD_LIST=${OPENCV_MODULES_LIST} -DBUILD_JAVA=OFF -DBUILD_opencv_python=OFF -DBUILD_opencv_java=OFF -DBUILD_opencv_apps=OFF -DBUILD_PACKAGE=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF -DCV_ENABLE_INTRINSICS=OFF -DCV_TRACE=OFF -DOPENCV_ENABLE_MEMALIGN=OFF -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_CMAKE_PATH}"
CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release -DESP32=ON -DBUILD_SHARED_LIBS=OFF -DCV_DISABLE_OPTIMIZATION=OFF -DWITH_IPP=OFF -DWITH_TBB=OFF -DWITH_OPENMP=OFF -DWITH_PTHREADS_PF=OFF -DWITH_QUIRC=OFF -DWITH_1394=OFF -DWITH_CUDA=OFF -DWITH_OPENCL=OFF -DWITH_OPENCLAMDFFT=OFF -DWITH_OPENCLAMDBLAS=OFF -DWITH_VA_INTEL=OFF -DWITH_EIGEN=OFF -DWITH_GSTREAMER=OFF -DWITH_GTK=OFF -DWITH_JASPER=OFF -DWITH_JPEG=OFF -DWITH_WEBP=OFF -DBUILD_ZLIB=ON -DBUILD_PNG=ON -DWITH_TIFF=OFF -DWITH_V4L=OFF -DWITH_LAPACK=OFF -DWITH_ITT=OFF -DWITH_PROTOBUF=OFF -DWITH_IMGCODEC_HDR=OFF -DWITH_IMGCODEC_SUNRASTER=OFF -DWITH_IMGCODEC_PXM=OFF -DWITH_IMGCODEC_PFM=OFF -DBUILD_LIST=${OPENCV_MODULES_LIST} -DBUILD_JAVA=OFF -DBUILD_opencv_python=OFF -DBUILD_opencv_java=OFF -DBUILD_opencv_apps=OFF -DBUILD_PACKAGE=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF -DCV_ENABLE_INTRINSICS=OFF -DCV_TRACE=OFF -DOPENCV_ENABLE_MEMALIGN=OFF -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_CMAKE_PATH}"
### configure and build opencv ###