Skip to content
Snippets Groups Projects
Commit 414e47c3 authored by Miroslav Saur's avatar Miroslav Saur
Browse files

Merge branch 'LHCbMath-AddArmTestBuilds' into 'master'

LHCbMath: Enable VDT and math speed test applications on ARM

See merge request !4789
parents 1d503253 05c6d5a2
No related branches found
No related tags found
1 merge request!4789LHCbMath: Enable VDT and math speed test applications on ARM
Pipeline #9289700 passed
......@@ -106,6 +106,7 @@ set(SSE4_BUILD_FLAGS " -msse4.2 -mno-avx -mno-avx2 -mno-fma ${NO_AVX512_FLAGS
set(AVX_BUILD_FLAGS " -mavx -mno-avx2 -mno-fma ${NO_AVX512_FLAGS}" )
set(AVX2_BUILD_FLAGS " -mavx2 -mno-fma ${NO_AVX512_FLAGS}")
set(AVX2FMA_BUILD_FLAGS " -mavx2 -mfma ${NO_AVX512_FLAGS}")
set(NEON_BUILD_FLAGS " ")
# only use 'basic' avx512 options here..
set(AVX512_BUILD_FLAGS " -mavx512f -mavx512cd -mavx512dq")
execute_process(COMMAND ${CMAKE_CXX_COMPILER} -print-prog-name=as OUTPUT_VARIABLE _as OUTPUT_STRIP_TRAILING_WHITESPACE)
......@@ -221,21 +222,29 @@ if(BUILD_TESTING)
set(INSTRSET_AVX2 8)
set(INSTRSET_AVX2FMA 8) # AVX2 CPUs can always do FMA
set(INSTRSET_AVX512 9) # at the moment we only use basic AVX512
set(INSTRSET_NEON -1) # No values yet for ARM machines
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
foreach(instr_set IN ITEMS SSE4 AVX AVX2 AVX2FMA AVX512)
gaudi_add_executable(TestVDTMath${instr_set}
SOURCES tests/src/x86_64/TestVDTMath.cpp
LINK LHCb::LHCbMathLib
)
set_property(TARGET TestVDTMath${instr_set} APPEND_STRING PROPERTY COMPILE_FLAGS ${${instr_set}_BUILD_FLAGS})
set_property(TARGET TestVDTMath${instr_set} APPEND PROPERTY COMPILE_DEFINITIONS INSTRSET=${INSTRSET_${instr_set}})
gaudi_add_executable(TestMathSpeed${instr_set}
SOURCES tests/MathSpeedTests/main.cpp
LINK LHCb::LHCbMathLib rt
)
set_property(TARGET TestMathSpeed${instr_set} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-ignored-attributes ${${instr_set}_BUILD_FLAGS}" )
endforeach()
set(SIMD_ARCHES SSE4 AVX AVX2 AVX2FMA AVX512)
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
set(SIMD_ARCHES NEON)
else()
set(SIMD_ARCHES "")
endif()
foreach(instr_set IN ITEMS ${SIMD_ARCHES})
gaudi_add_executable(TestVDTMath${instr_set}
SOURCES tests/src/TestVDTMath.cpp
LINK LHCb::LHCbMathLib
)
set_property(TARGET TestVDTMath${instr_set} APPEND_STRING PROPERTY COMPILE_FLAGS ${${instr_set}_BUILD_FLAGS})
set_property(TARGET TestVDTMath${instr_set} APPEND PROPERTY COMPILE_DEFINITIONS INSTRSET=${INSTRSET_${instr_set}})
gaudi_add_executable(TestMathSpeed${instr_set}
SOURCES tests/MathSpeedTests/main.cpp
LINK LHCb::LHCbMathLib rt
)
set_property(TARGET TestMathSpeed${instr_set} APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-ignored-attributes ${${instr_set}_BUILD_FLAGS}" )
endforeach()
endif()
foreach(test IN ITEMS test_md5 test_deterministic_mixer test_matvec test_simdwrapper)
......
......@@ -164,23 +164,23 @@ BOOST_AUTO_TEST_CASE( test_MatSym ) {
bool isEqual = true;
auto shouldBeSomeMatrixInverse = someMatrix.invChol().second;
for ( auto i = 0u; i < someMatrixInverse.m.size(); ++i ) {
if ( fabs( someMatrixInverse.m[i] - shouldBeSomeMatrixInverse.m[i] ) > std::numeric_limits<float>::epsilon() ) {
isEqual = false;
break;
}
isEqual &= ( fabs( someMatrixInverse.m[i] - shouldBeSomeMatrixInverse.m[i] ) <= epsilon );
}
BOOST_CHECK( isEqual );
}
BOOST_AUTO_TEST_CASE( test_MatSym_vectorized ) {
using simd = SIMDWrapper::best::types;
using simd = SIMDWrapper::best::types;
const auto epsilon = std::numeric_limits<simd::float_v>::epsilon();
MatSym<simd::float_v, 3> someMatrix{2, -1, 2, 0, -1, 2};
MatSym<simd::float_v, 3> someMatrixInverse{0.75f, 0.5f, 1.f, 0.25f, 0.5f, 0.75f};
auto shouldBeSomeMatrixInverse = someMatrix.invChol().second;
bool isEqual = true;
for ( auto i = 0u; i < someMatrixInverse.n_rows; ++i ) {
for ( auto j = 0u; j < someMatrixInverse.n_cols; ++j ) {
BOOST_CHECK( !any( abs( someMatrixInverse( i, j ) - shouldBeSomeMatrixInverse( i, j ) ) >
simd::float_v{std::numeric_limits<float>::epsilon()} ) );
const auto diff = someMatrixInverse( i, j ) - shouldBeSomeMatrixInverse( i, j );
isEqual &= all( abs( diff ) <= epsilon );
}
}
BOOST_CHECK( isEqual );
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment