Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
85 changes: 27 additions & 58 deletions .github/workflows/linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,28 +10,28 @@ defaults:
jobs:
build:
runs-on: ubuntu-latest
name: '${{ matrix.sys.compiler }} ${{ matrix.sys.version }} - ${{ matrix.sys.flags }}'
name: '${{ matrix.sys.compiler }} ${{ matrix.sys.version }} - ${{ matrix.sys.preset }} - ${{ matrix.sys.flags }}'
strategy:
matrix:
sys:
- { compiler: 'gcc', version: '12', flags: 'force_no_instr_set' }
- { compiler: 'gcc', version: '13', flags: 'enable_xtl_complex' }
- { compiler: 'gcc', version: '14', flags: 'avx' }
- { compiler: 'gcc', version: '14', flags: 'avx2' }
- { compiler: 'gcc', version: '13', flags: 'avx512' }
- { compiler: 'gcc', version: '10', flags: 'avx512' }
- { compiler: 'gcc', version: '12', flags: 'i386' }
- { compiler: 'gcc', version: '13', flags: 'avx512pf' }
- { compiler: 'gcc', version: '13', flags: 'avx512vbmi' }
- { compiler: 'gcc', version: '14', flags: 'avx512vbmi2' }
- { compiler: 'gcc', version: '13', flags: 'avx512vnni' }
- { compiler: 'clang', version: '16', flags: 'force_no_instr_set' }
- { compiler: 'clang', version: '16', flags: 'enable_xtl_complex' }
- { compiler: 'clang', version: '17', flags: 'avx' }
- { compiler: 'clang', version: '17', flags: 'sse3' }
- { compiler: 'clang', version: '18', flags: 'avx512' }
- { compiler: 'clang', version: '18', flags: 'avx_128' }
- { compiler: 'clang', version: '18', flags: 'avx2_128' }
- { compiler: 'gcc', version: '12', flags: 'force_no_instr_set', preset: 'native' }
- { compiler: 'gcc', version: '13', flags: 'enable_xtl_complex', preset: 'native' }
- { compiler: 'gcc', version: '14', flags: '', preset: 'avx' }
- { compiler: 'gcc', version: '14', flags: '', preset: 'avx2' }
- { compiler: 'gcc', version: '13', flags: '', preset: 'avx512' }
- { compiler: 'gcc', version: '10', flags: '', preset: 'avx512' }
- { compiler: 'gcc', version: '12', flags: 'i386', preset: 'native' }
- { compiler: 'gcc', version: '13', flags: '', preset: 'avx512pf' }
- { compiler: 'gcc', version: '13', flags: '', preset: 'avx512vbmi' }
- { compiler: 'gcc', version: '14', flags: '', preset: 'avx512vbmi2' }
- { compiler: 'gcc', version: '13', flags: '', preset: 'avx512vnni_avx512bw' }
- { compiler: 'clang', version: '16', flags: 'force_no_instr_set', preset: 'native' }
- { compiler: 'clang', version: '16', flags: 'enable_xtl_complex', preset: 'native' }
- { compiler: 'clang', version: '17', flags: '', preset: 'avx' }
- { compiler: 'clang', version: '17', flags: '', preset: 'sse3' }
- { compiler: 'clang', version: '18', flags: '', preset: 'avx512' }
- { compiler: 'clang', version: '18', flags: '', preset: 'avx128' }
- { compiler: 'clang', version: '18', flags: '', preset: 'avx2128' }
steps:
- name: Setup compiler
if: ${{ matrix.sys.compiler == 'gcc' }}
Expand Down Expand Up @@ -62,11 +62,11 @@ jobs:
- name: Checkout xsimd
uses: actions/checkout@v6
- name: Install mamba
uses: mamba-org/setup-micromamba@v2
uses: mamba-org/setup-micromamba@v3
with:
environment-file: environment.yml
- name: Setup SDE
if: startswith(matrix.sys.flags, 'avx512')
if: startswith(matrix.sys.preset, 'avx512')
run: sh install_sde.sh
- name: Configure build
env:
Expand All @@ -76,49 +76,18 @@ jobs:
if [[ '${{ matrix.sys.flags }}' == 'enable_xtl_complex' ]]; then
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DENABLE_XTL_COMPLEX=ON"
fi
if [[ '${{ matrix.sys.flags }}' == 'avx' ]]; then
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=sandybridge"
fi
if [[ '${{ matrix.sys.flags }}' == 'avx_128' ]]; then
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=sandybridge -DXSIMD_DEFAULT_ARCH=avx_128"
fi
if [[ '${{ matrix.sys.flags }}' == 'avx2' ]]; then
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=haswell"
fi
if [[ '${{ matrix.sys.flags }}' == 'avx2_128' ]]; then
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=haswell -DXSIMD_DEFAULT_ARCH=avx2_128"
fi
if [[ '${{ matrix.sys.flags }}' == 'sse3' ]]; then
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=nocona"
fi
if [[ '${{ matrix.sys.flags }}' == 'avx512' ]]; then
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=skylake-avx512"
fi
if [[ '${{ matrix.sys.flags }}' == 'avx512pf' ]]; then
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=knl"
fi
if [[ '${{ matrix.sys.flags }}' == 'avx512vbmi' ]]; then
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=cannonlake"
fi
if [[ '${{ matrix.sys.flags }}' == 'avx512vbmi2' ]]; then
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=icelake-server"
fi
if [[ '${{ matrix.sys.flags }}' == 'avx512vnni' ]]; then
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=knm"
fi
if [[ '${{ matrix.sys.flags }}' == 'i386' ]]; then
CXX_FLAGS="$CXX_FLAGS -m32"
export CXXFLAGS="$CXXFLAGS -m32"
fi
if [[ '${{ matrix.sys.flags }}' == 'force_no_instr_set' ]]; then
:
else
if [[ '${{ matrix.sys.flags }}' != 'force_no_instr_set' ]]; then
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DXSIMD_ENABLE_WERROR=ON"
fi

# Cheap way of spotting uninitialized read
CXX_FLAGS="$CXX_FLAGS -ftrivial-auto-var-init=pattern"
# Cheap way of spotting uninitialized read; presets pick this up via $env{CXXFLAGS}.
export CXXFLAGS="$CXXFLAGS -ftrivial-auto-var-init=pattern"

cmake -B _build \
--preset ${{ matrix.sys.preset }} \
-DBUILD_TESTS=ON \
-DBUILD_BENCHMARK=ON \
-DBUILD_EXAMPLES=ON \
Expand All @@ -138,7 +107,7 @@ jobs:
export XSIMD_TEST_CPU_ASSUME_VSX="0"
export XSIMD_TEST_CPU_ASSUME_VXE="0"
cd _build/test
if echo '${{ matrix.sys.flags }}' | grep -q 'avx512' ; then
if echo '${{ matrix.sys.preset }}' | grep -q 'avx512' ; then
# Running with emulation, must have AVX512, lower tier are checked by implications in tests
export XSIMD_TEST_CPU_ASSUME_AVX512F="1"
../../sde-external-9.48.0-2024-11-25-lin/sde64 -tgl -- ./test_xsimd
Expand Down
202 changes: 202 additions & 0 deletions CMakePresets.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,202 @@
{
"version": 5,
"cmakeMinimumRequired": {
"major": 3,
"minor": 23,
"patch": 0
},
"configurePresets": [
{
"name": "native",
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=native"
}
},
{
"name": "sse2",
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64 -msse2 -mno-sse3"
}
},
{
"name": "sse3",
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64 -msse3 -mno-ssse3"
}
},
{
"name": "ssse3",
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64 -mssse3 -mno-sse4.1"
}
},
{
"name": "sse4.1",
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64 -msse4.1 -mno-sse4.2"
}
},
{
"name": "sse4.2",
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64 -msse4.2 -mno-avx"
}
},
{
"name": "avx",
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64 -mavx -mno-avx2"
}
},
{
"name": "avx_128",
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64 -mavx -mno-avx2 -DXSIMD_DEFAULT_ARCH=avx_128"
}
},
{
"name": "avx2",
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64 -mavx2 -mno-avx512f"
}
},
{
"name": "avx2_128",
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64 -mavx2 -mno-avx512f -DXSIMD_DEFAULT_ARCH=avx2_128"
}
},
{
"name": "avx512f",
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64 -mavx512f -mno-avx512cd -mno-avx512dq -mno-avx512bw -mno-avx512er -mno-avx512pf -mno-avx512ifma -mno-avx512vbmi -mno-avx512vnni"
}
},
{
"name": "avx512cd",
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64 -mavx512f -mavx512cd -mno-avx512dq -mno-avx512bw -mno-avx512er -mno-avx512pf -mno-avx512ifma -mno-avx512vbmi -mno-avx512vnni"
}
},
{
"name": "avx512dq",
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64 -mavx512f -mavx512cd -mavx512dq -mno-avx512bw -mno-avx512er -mno-avx512pf -mno-avx512ifma -mno-avx512vbmi -mno-avx512vnni"
}
},
{
"name": "avx512bw",
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64 -mavx512f -mavx512cd -mavx512dq -mavx512bw -mno-avx512er -mno-avx512pf -mno-avx512ifma -mno-avx512vbmi -mno-avx512vnni"
}
},
{
"name": "avx512er",
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64 -mavx512f -mavx512cd -mavx512dq -mno-avx512bw -mavx512er -mno-avx512pf -mno-avx512ifma -mno-avx512vbmi -mno-avx512vnni"
}
},
{
"name": "avx512pf",
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64 -mavx512f -mavx512cd -mavx512dq -mno-avx512bw -mavx512er -mavx512pf -mno-avx512ifma -mno-avx512vbmi -mno-avx512vnni"
}
},
{
"name": "avx512ifma",
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64 -mavx512f -mavx512cd -mavx512dq -mavx512bw -mno-avx512er -mno-avx512pf -mavx512ifma -mno-avx512vbmi -mno-avx512vnni"
}
},
{
"name": "avx512vbmi",
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64 -mavx512f -mavx512cd -mavx512dq -mavx512bw -mno-avx512er -mno-avx512pf -mavx512ifma -mavx512vbmi -mno-avx512vbmi2 -mno-avx512vnni"
}
},
{
"name": "avx512vbmi2",
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64 -mavx512f -mavx512cd -mavx512dq -mavx512bw -mno-avx512er -mno-avx512pf -mavx512ifma -mavx512vbmi -mavx512vbmi2 -mno-avx512vnni"
}
},
{
"name": "avx512vnni_avx512bw",
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64 -mavx512f -mavx512cd -mavx512dq -mavx512bw -mno-avx512er -mno-avx512pf -mno-avx512ifma -mno-avx512vbmi -mavx512vnni"
}
},
{
"name": "avx512vnni_avx512vbmi2",
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64 -mavx512f -mavx512cd -mavx512dq -mavx512bw -mno-avx512er -mno-avx512pf -mavx512ifma -mavx512vbmi -mavx512vbmi2 -mavx512vnni"
}
},
{
"name": "neon",
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=armv7-a -mfpu=neon -mfloat-abi=softfp"
}
},
{
"name": "neon64",
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=armv8-a"
}
},
{
"name": "sve128",
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=armv8.2-a+sve -msve-vector-bits=128"
}
},
{
"name": "sve256",
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=armv8.2-a+sve -msve-vector-bits=256"
}
},
{
"name": "sve512",
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=armv8.2-a+sve -msve-vector-bits=512"
}
},
{
"name": "rvv128",
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=rv64gcv_zvl128b_zba_zbb_zbs -mrvv-vector-bits=zvl"
}
},
{
"name": "rvv256",
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=rv64gcv_zvl256b_zba_zbb_zbs -mrvv-vector-bits=zvl"
}
},
{
"name": "rvv512",
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=rv64gcv_zvl512b_zba_zbb_zbs -mrvv-vector-bits=zvl"
}
},
{
"name": "vsx2",
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -mcpu=power8 -maltivec -mvsx"
}
},
{
"name": "vsx3",
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -mcpu=power9 -maltivec -mvsx"
}
},
{
"name": "vsx4",
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -mcpu=power10 -maltivec -mvsx"
}
}
]
}
Loading