Skip to content

Commit a8a07e0

Browse files
committed
Algo ported
1 parent 2427e4f commit a8a07e0

File tree

9 files changed

+888
-0
lines changed

9 files changed

+888
-0
lines changed

.clang-format

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
BasedOnStyle: WebKit
3+
AlignAfterOpenBracket: Align
4+
AlignConsecutiveDeclarations: 'false'
5+
BreakBeforeBraces: Allman
6+
NamespaceIndentation: All
7+
8+
...

.github/workflows/linux.yml

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
name: Linux build
2+
on: [push, pull_request]
3+
concurrency:
4+
group: ${{ github.workflow }}-${{ github.job }}-${{ github.ref }}
5+
cancel-in-progress: true
6+
defaults:
7+
run:
8+
shell: bash -l {0}
9+
jobs:
10+
build:
11+
runs-on: ubuntu-latest
12+
name: '${{ matrix.sys.compiler }} ${{ matrix.sys.version }} - ${{ matrix.sys.flags }}'
13+
strategy:
14+
matrix:
15+
sys:
16+
- { compiler: 'gcc', version: '12', flags: 'force_no_instr_set' }
17+
- { compiler: 'gcc', version: '13', flags: 'enable_xtl_complex' }
18+
- { compiler: 'gcc', version: '14', flags: 'avx' }
19+
- { compiler: 'gcc', version: '13', flags: 'avx512' }
20+
- { compiler: 'gcc', version: '12', flags: 'i386' }
21+
- { compiler: 'gcc', version: '13', flags: 'avx512pf' }
22+
- { compiler: 'gcc', version: '13', flags: 'avx512vbmi' }
23+
- { compiler: 'gcc', version: '14', flags: 'avx512vbmi2' }
24+
- { compiler: 'gcc', version: '13', flags: 'avx512vnni' }
25+
- { compiler: 'clang', version: '16', flags: 'force_no_instr_set' }
26+
- { compiler: 'clang', version: '16', flags: 'enable_xtl_complex' }
27+
- { compiler: 'clang', version: '17', flags: 'avx' }
28+
- { compiler: 'clang', version: '17', flags: 'sse3' }
29+
- { compiler: 'clang', version: '18', flags: 'avx512' }
30+
steps:
31+
- name: Setup compiler
32+
if: ${{ matrix.sys.compiler == 'gcc' }}
33+
run: |
34+
GCC_VERSION=${{ matrix.sys.version }}
35+
sudo apt-get update
36+
sudo apt-get --no-install-suggests --no-install-recommends install g++-$GCC_VERSION
37+
sudo dpkg --add-architecture i386
38+
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
39+
sudo apt-get update
40+
sudo apt-get --no-install-suggests --no-install-recommends install gcc-$GCC_VERSION-multilib g++-$GCC_VERSION-multilib linux-libc-dev:i386
41+
CC=gcc-$GCC_VERSION
42+
echo "CC=$CC" >> $GITHUB_ENV
43+
CXX=g++-$GCC_VERSION
44+
echo "CXX=$CXX" >> $GITHUB_ENV
45+
- name: Setup compiler
46+
if: ${{ matrix.sys.compiler == 'clang' }}
47+
run: |
48+
LLVM_VERSION=${{ matrix.sys.version }}
49+
sudo apt-get update || exit 1
50+
sudo apt-get --no-install-suggests --no-install-recommends install clang-$LLVM_VERSION || exit 1
51+
sudo apt-get --no-install-suggests --no-install-recommends install g++ g++-multilib || exit 1
52+
sudo ln -s /usr/include/asm-generic /usr/include/asm
53+
CC=clang-$LLVM_VERSION
54+
echo "CC=$CC" >> $GITHUB_ENV
55+
CXX=clang++-$LLVM_VERSION
56+
echo "CXX=$CXX" >> $GITHUB_ENV
57+
- name: Checkout xsimd-algorithm
58+
uses: actions/checkout@v3
59+
# - name: Install mamba
60+
# uses: mamba-org/setup-micromamba@v1
61+
# with:
62+
# environment-file: environment.yml
63+
- name: Setup SDE
64+
if: startswith(matrix.sys.flags, 'avx512')
65+
run: sh install_sde.sh
66+
- name: Configure build
67+
env:
68+
CC: ${{ env.CC }}
69+
CXX: ${{ env.CXX }}
70+
run: |
71+
if [[ '${{ matrix.sys.flags }}' == 'enable_xtl_complex' ]]; then
72+
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DENABLE_XTL_COMPLEX=ON"
73+
fi
74+
if [[ '${{ matrix.sys.flags }}' == 'avx' ]]; then
75+
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=sandybridge"
76+
fi
77+
if [[ '${{ matrix.sys.flags }}' == 'sse3' ]]; then
78+
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=nocona"
79+
fi
80+
if [[ '${{ matrix.sys.flags }}' == 'avx512' ]]; then
81+
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=skylake-avx512"
82+
fi
83+
if [[ '${{ matrix.sys.flags }}' == 'avx512pf' ]]; then
84+
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=knl"
85+
fi
86+
if [[ '${{ matrix.sys.flags }}' == 'avx512vbmi' ]]; then
87+
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=cannonlake"
88+
fi
89+
if [[ '${{ matrix.sys.flags }}' == 'avx512vbmi2' ]]; then
90+
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=icelake-server"
91+
fi
92+
if [[ '${{ matrix.sys.flags }}' == 'avx512vnni' ]]; then
93+
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=knm"
94+
fi
95+
if [[ '${{ matrix.sys.flags }}' == 'i386' ]]; then
96+
CXX_FLAGS="$CXX_FLAGS -m32"
97+
fi
98+
if [[ '${{ matrix.sys.flags }}' == 'force_no_instr_set' ]]; then
99+
:
100+
else
101+
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DXSIMD_ENABLE_WERROR=ON"
102+
fi
103+
104+
# Cheap way of spotting uninitialized read
105+
CXX_FLAGS="$CXX_FLAGS -ftrivial-auto-var-init=pattern"
106+
107+
mkdir _build
108+
cd _build
109+
cmake .. -DBUILD_TESTS=ON \
110+
-DCMAKE_BUILD_TYPE=Release \
111+
-DCMAKE_C_COMPILER=$CC \
112+
-DCMAKE_CXX_COMPILER=$CXX \
113+
$CMAKE_EXTRA_ARGS \
114+
-DCMAKE_CXX_FLAGS='$CXX_FLAGS' \
115+
-G Ninja
116+
- name: Build
117+
run: ninja -C _build
118+
- name: Test
119+
run: |
120+
cd _build
121+
cd test
122+
if echo '${{ matrix.sys.flags }}' | grep -q 'avx512' ; then
123+
../../sde-external-9.48.0-2024-11-25-lin/sde64 -tgl -- ./test_xsimd_algorithm
124+
else
125+
./test_xsimd_algorithm
126+
fi

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,7 @@
3030
*.exe
3131
*.out
3232
*.app
33+
34+
# Build
35+
build/
36+
build_*/

CMakeLists.txt

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
cmake_minimum_required(VERSION 3.15..3.29)
2+
project(xsimd-algorithm CXX)
3+
4+
set(XSIMDALGO_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
5+
6+
# Dependencies
7+
# ============
8+
9+
set(xsimd_REQUIRED_VERSION 13.2.0)
10+
if(TARGET xsimd)
11+
set(xsimd_VERSION ${XSIMD_VERSION_MAJOR}.${XSIMD_VERSION_MINOR}.${XSIMD_VERSION_PATCH})
12+
if(${xsimd_VERSION} VERSION_LESS ${xsimd_REQUIRED_VERSION})
13+
message(ERROR "Mismatch xsimd versions. Found '${xsimd_VERSION}' but requires: '${xsimd_REQUIRED_VERSION}'")
14+
else()
15+
message(STATUS "Found xsimd v${xsimd_VERSION}")
16+
endif()
17+
else()
18+
find_package(xsimd ${xsimd_REQUIRED_VERSION} REQUIRED)
19+
message(STATUS "Found xsimd: ${xsimd_INCLUDE_DIRS}/xsimd")
20+
endif()
21+
22+
# Build
23+
# =====
24+
25+
set(XSIMDALGO_HEADERS
26+
${XSIMDALGO_INCLUDE_DIR}/xsimd_algo/algorithms.hpp
27+
)
28+
29+
add_library(xsimd-algorithm INTERFACE)
30+
31+
target_include_directories(xsimd-algorithm INTERFACE
32+
$<BUILD_INTERFACE:${XSIMDALGO_INCLUDE_DIR}>
33+
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
34+
$<INSTALL_INTERFACE:include>)
35+
36+
target_compile_features(xsimd-algorithm INTERFACE cxx_std_20)
37+
target_link_libraries(xsimd-algorithm INTERFACE xsimd)
38+
39+
OPTION(BUILD_TESTS "xsimd-algorithm test suite" OFF)
40+
41+
if(BUILD_TESTS)
42+
enable_testing()
43+
add_subdirectory(test)
44+
endif()
45+
46+
# Installation
47+
# ============
48+
49+
include(GNUInstallDirs)
50+
include(CMakePackageConfigHelpers)
51+
52+
install(TARGETS xsimd-algorithm
53+
EXPORT ${PROJECT_NAME}-targets)
54+
55+
# Makes the project importable from the build directory
56+
export(EXPORT ${PROJECT_NAME}-targets
57+
FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake")
58+
59+
install(DIRECTORY ${XSIMDALGO_INCLUDE_DIR}/xsimd_algo
60+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
61+
62+
set(XSIMDALGO_CMAKECONFIG_INSTALL_DIR "${CMAKE_INSTALL_DATADIR}/cmake/${PROJECT_NAME}" CACHE
63+
STRING "install path for xsimd-algorithmConfig.cmake")
64+
65+
configure_package_config_file(${PROJECT_NAME}Config.cmake.in
66+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
67+
INSTALL_DESTINATION ${XSIMDALGO_CMAKECONFIG_INSTALL_DIR})

0 commit comments

Comments
 (0)