Make python extension automatically enable AVX instructions if the host machine

supports them.
This commit is contained in:
Davis King 2018-05-21 21:21:40 -04:00
parent f21ac08063
commit 104ffddb4c
5 changed files with 64 additions and 1 deletions

View File

@ -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()

View 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()

View 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;
}
// ------------------------------------------------------------------------------------

View File

@ -0,0 +1,3 @@
#error "This file doesn't compile!"

View File

@ -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