mirror of
https://github.com/davisking/dlib.git
synced 2024-11-01 10:14:53 +08:00
Make python extension automatically enable AVX instructions if the host machine
supports them.
This commit is contained in:
parent
f21ac08063
commit
104ffddb4c
@ -0,0 +1,19 @@
|
||||
# This script checks if your compiler and host processor can generate and then run programs with AVX instructions.
|
||||
|
||||
cmake_minimum_required(VERSION 2.8.12)
|
||||
|
||||
# Don't rerun this script if its already been executed.
|
||||
if (DEFINED AVX_IS_AVAILABLE_ON_HOST)
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Set to false unless we find out otherwise in the code below.
|
||||
set(AVX_IS_AVAILABLE_ON_HOST 0)
|
||||
|
||||
try_compile(test_for_avx_worked ${PROJECT_BINARY_DIR}/avx_test_build ${CMAKE_CURRENT_LIST_DIR}/test_for_avx
|
||||
avx_test)
|
||||
|
||||
if(test_for_avx_worked)
|
||||
message (STATUS "AVX instructions can be executed by the host processor.")
|
||||
set(AVX_IS_AVAILABLE_ON_HOST 1)
|
||||
endif()
|
23
dlib/cmake_utils/test_for_avx/CMakeLists.txt
Normal file
23
dlib/cmake_utils/test_for_avx/CMakeLists.txt
Normal file
@ -0,0 +1,23 @@
|
||||
|
||||
cmake_minimum_required(VERSION 2.8.12)
|
||||
project(avx_test)
|
||||
|
||||
set(USE_AVX_INSTRUCTIONS ON CACHE BOOL "Use SSE4 instructions")
|
||||
|
||||
# Pull this in since it sets the AVX compile options by putting that kind of stuff into the active_compile_opts list.
|
||||
include(../set_compiler_specific_options.cmake)
|
||||
|
||||
|
||||
try_run(run_result compile_result ${PROJECT_BINARY_DIR}/avx_test_try_run_build ${CMAKE_CURRENT_LIST_DIR}/avx_test.cpp
|
||||
COMPILE_DEFINITIONS ${active_compile_opts})
|
||||
|
||||
message(STATUS "run_result = ${run_result}")
|
||||
message(STATUS "compile_result = ${compile_result}")
|
||||
|
||||
if (${run_result} EQUAL 0 AND compile_result)
|
||||
message(STATUS "Ran AVX test program successfully, you have AVX available.")
|
||||
else()
|
||||
message(STATUS "Unable to run AVX test program, you don't seem to have AVX instructions available.")
|
||||
# make this build fail so that calling try_compile statements will error in this case.
|
||||
add_library(make_this_build_fail ${CMAKE_CURRENT_LIST_DIR}/this_file_doesnt_compile.cpp)
|
||||
endif()
|
13
dlib/cmake_utils/test_for_avx/avx_test.cpp
Normal file
13
dlib/cmake_utils/test_for_avx/avx_test.cpp
Normal file
@ -0,0 +1,13 @@
|
||||
|
||||
#include <immintrin.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
__m256 x;
|
||||
x = _mm256_set1_ps(1.23);
|
||||
x = _mm256_add_ps(x,x);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------
|
||||
|
@ -0,0 +1,3 @@
|
||||
|
||||
#error "This file doesn't compile!"
|
||||
|
@ -3,10 +3,15 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8.12)
|
||||
|
||||
set(USE_SSE4_INSTRUCTIONS ON CACHE BOOL "Use SSE4 instructions")
|
||||
|
||||
include(../../dlib/cmake_utils/check_if_avx_instructions_executable_on_host.cmake)
|
||||
if (AVX_IS_AVAILABLE_ON_HOST)
|
||||
set(USE_AVX_INSTRUCTIONS ON CACHE BOOL "Use AVX instructions")
|
||||
endif()
|
||||
|
||||
# Set this to disable link time optimization. The only reason for
|
||||
# doing this to make the compile faster which is nice when developing
|
||||
# new modules.
|
||||
set(PYBIND11_LTO_CXX_FLAGS "")
|
||||
# set(PYBIND11_LTO_CXX_FLAGS "")
|
||||
|
||||
|
||||
# Avoid cmake warnings about changes in behavior of some Mac OS X path
|
||||
|
Loading…
Reference in New Issue
Block a user