mirror of
https://github.com/sockspls/badfish
synced 2025-05-01 17:19:36 +00:00

This commit generalizes the feature transform to use vec_t macros that are architecture defined instead of using a seperate code path for each one. It should make some old architectures (MMX, including improvements by Fanael) faster and make further such improvements easier in the future. Includes some corrections to CI for mingw. closes https://github.com/official-stockfish/Stockfish/pull/3955 closes https://github.com/official-stockfish/Stockfish/pull/3928 No functional change
333 lines
10 KiB
YAML
333 lines
10 KiB
YAML
name: Stockfish
|
|
on:
|
|
push:
|
|
branches:
|
|
- master
|
|
- tools
|
|
- github_ci
|
|
- github_ci_armv7
|
|
pull_request:
|
|
branches:
|
|
- master
|
|
- tools
|
|
jobs:
|
|
Stockfish:
|
|
name: ${{ matrix.config.name }}
|
|
runs-on: ${{ matrix.config.os }}
|
|
env:
|
|
COMPILER: ${{ matrix.config.compiler }}
|
|
COMP: ${{ matrix.config.comp }}
|
|
CXXFLAGS: "-Werror"
|
|
strategy:
|
|
matrix:
|
|
config:
|
|
# set the variable for the required tests:
|
|
# run_expensive_tests: true
|
|
# run_32bit_tests: true
|
|
# run_64bit_tests: true
|
|
# run_armv8_tests: true
|
|
# run_armv7_tests: true
|
|
- {
|
|
name: "Ubuntu 20.04 GCC",
|
|
os: ubuntu-20.04,
|
|
compiler: g++,
|
|
comp: gcc,
|
|
run_expensive_tests: true,
|
|
run_32bit_tests: true,
|
|
run_64bit_tests: true,
|
|
shell: 'bash {0}'
|
|
}
|
|
- {
|
|
name: "Ubuntu 20.04 Clang",
|
|
os: ubuntu-20.04,
|
|
compiler: clang++,
|
|
comp: clang,
|
|
run_32bit_tests: true,
|
|
run_64bit_tests: true,
|
|
shell: 'bash {0}'
|
|
}
|
|
- {
|
|
name: "Ubuntu 20.04 NDK armv8",
|
|
os: ubuntu-20.04,
|
|
compiler: aarch64-linux-android21-clang++,
|
|
comp: ndk,
|
|
run_armv8_tests: true,
|
|
shell: 'bash {0}'
|
|
}
|
|
- {
|
|
name: "Ubuntu 20.04 NDK armv7",
|
|
os: ubuntu-20.04,
|
|
compiler: armv7a-linux-androideabi21-clang++,
|
|
comp: ndk,
|
|
run_armv7_tests: true,
|
|
shell: 'bash {0}'
|
|
}
|
|
- {
|
|
name: "MacOS 10.15 Apple Clang",
|
|
os: macos-10.15,
|
|
compiler: clang++,
|
|
comp: clang,
|
|
run_64bit_tests: true,
|
|
shell: 'bash {0}'
|
|
}
|
|
- {
|
|
name: "MacOS 10.15 GCC 10",
|
|
os: macos-10.15,
|
|
compiler: g++-10,
|
|
comp: gcc,
|
|
run_64bit_tests: true,
|
|
shell: 'bash {0}'
|
|
}
|
|
- {
|
|
name: "Windows 2022 Mingw-w64 GCC x86_64",
|
|
os: windows-2022,
|
|
compiler: g++,
|
|
comp: mingw,
|
|
run_64bit_tests: true,
|
|
msys_sys: 'mingw64',
|
|
msys_env: 'x86_64-gcc',
|
|
shell: 'msys2 {0}'
|
|
}
|
|
- {
|
|
name: "Windows 2022 Mingw-w64 GCC i686",
|
|
os: windows-2022,
|
|
compiler: g++,
|
|
comp: mingw,
|
|
run_32bit_tests: true,
|
|
msys_sys: 'mingw32',
|
|
msys_env: 'i686-gcc',
|
|
shell: 'msys2 {0}'
|
|
}
|
|
- {
|
|
name: "Windows 2022 Mingw-w64 Clang x86_64",
|
|
os: windows-2022,
|
|
compiler: clang++,
|
|
comp: clang,
|
|
run_64bit_tests: true,
|
|
msys_sys: 'clang64',
|
|
msys_env: 'clang-x86_64-clang',
|
|
shell: 'msys2 {0}'
|
|
}
|
|
|
|
defaults:
|
|
run:
|
|
working-directory: src
|
|
shell: ${{ matrix.config.shell }}
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Download required linux packages
|
|
if: runner.os == 'Linux'
|
|
run: |
|
|
sudo apt update
|
|
sudo apt install expect valgrind g++-multilib qemu-user
|
|
|
|
- name: Setup msys and install required packages
|
|
if: runner.os == 'Windows'
|
|
uses: msys2/setup-msys2@v2
|
|
with:
|
|
msystem: ${{matrix.config.msys_sys}}
|
|
install: mingw-w64-${{matrix.config.msys_env}} make git expect
|
|
|
|
- name: Download the used network from the fishtest framework
|
|
run: |
|
|
make net
|
|
|
|
- name: Extract the bench number from the commit history
|
|
run: |
|
|
git log HEAD | grep "\b[Bb]ench[ :]\+[0-9]\{7\}" | head -n 1 | sed "s/[^0-9]*\([0-9]*\).*/\1/g" > git_sig
|
|
[ -s git_sig ] && echo "benchref=$(cat git_sig)" >> $GITHUB_ENV && echo "Reference bench:" $(cat git_sig) || echo "No bench found"
|
|
|
|
- name: Check compiler
|
|
run: |
|
|
export PATH=$PATH:$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin
|
|
$COMPILER -v
|
|
|
|
- name: Test help target
|
|
run: |
|
|
make help
|
|
|
|
# x86-32 tests
|
|
|
|
- name: Test debug x86-32 build
|
|
if: ${{ matrix.config.run_32bit_tests }}
|
|
run: |
|
|
export CXXFLAGS="-Werror -D_GLIBCXX_DEBUG"
|
|
make clean
|
|
make -j2 ARCH=x86-32 optimize=no debug=yes build
|
|
../tests/signature.sh $benchref
|
|
|
|
- name: Test x86-32 build
|
|
if: ${{ matrix.config.run_32bit_tests }}
|
|
run: |
|
|
make clean
|
|
make -j2 ARCH=x86-32 build
|
|
../tests/signature.sh $benchref
|
|
|
|
- name: Test x86-32-sse41-popcnt build
|
|
if: ${{ matrix.config.run_32bit_tests }}
|
|
run: |
|
|
make clean
|
|
make -j2 ARCH=x86-32-sse41-popcnt build
|
|
../tests/signature.sh $benchref
|
|
|
|
- name: Test x86-32-sse2 build
|
|
if: ${{ matrix.config.run_32bit_tests }}
|
|
run: |
|
|
make clean
|
|
make -j2 ARCH=x86-32-sse2 build
|
|
../tests/signature.sh $benchref
|
|
|
|
- name: Test general-32 build
|
|
if: ${{ matrix.config.run_32bit_tests }}
|
|
run: |
|
|
make clean
|
|
make -j2 ARCH=general-32 build
|
|
../tests/signature.sh $benchref
|
|
|
|
# x86-64 tests
|
|
|
|
- name: Test debug x86-64-modern build
|
|
if: ${{ matrix.config.run_64bit_tests }}
|
|
run: |
|
|
export CXXFLAGS="-Werror -D_GLIBCXX_DEBUG"
|
|
make clean
|
|
make -j2 ARCH=x86-64-modern optimize=no debug=yes build
|
|
../tests/signature.sh $benchref
|
|
|
|
- name: Test x86-64-modern build
|
|
if: ${{ matrix.config.run_64bit_tests }}
|
|
run: |
|
|
make clean
|
|
make -j2 ARCH=x86-64-modern build
|
|
../tests/signature.sh $benchref
|
|
|
|
- name: Test x86-64-ssse3 build
|
|
if: ${{ matrix.config.run_64bit_tests }}
|
|
run: |
|
|
make clean
|
|
make -j2 ARCH=x86-64-ssse3 build
|
|
../tests/signature.sh $benchref
|
|
|
|
- name: Test x86-64-sse3-popcnt build
|
|
if: ${{ matrix.config.run_64bit_tests }}
|
|
run: |
|
|
make clean
|
|
make -j2 ARCH=x86-64-sse3-popcnt build
|
|
../tests/signature.sh $benchref
|
|
|
|
- name: Test x86-64 build
|
|
if: ${{ matrix.config.run_64bit_tests }}
|
|
run: |
|
|
make clean
|
|
make -j2 ARCH=x86-64 build
|
|
../tests/signature.sh $benchref
|
|
|
|
- name: Test general-64 build
|
|
if: matrix.config.run_64bit_tests
|
|
run: |
|
|
make clean
|
|
make -j2 ARCH=general-64 build
|
|
../tests/signature.sh $benchref
|
|
|
|
# x86-64 with newer extensions tests
|
|
|
|
- name: Compile x86-64-avx2 build
|
|
if: ${{ matrix.config.run_64bit_tests }}
|
|
run: |
|
|
make clean
|
|
make -j2 ARCH=x86-64-avx2 build
|
|
|
|
- name: Compile x86-64-bmi2 build
|
|
if: ${{ matrix.config.run_64bit_tests }}
|
|
run: |
|
|
make clean
|
|
make -j2 ARCH=x86-64-bmi2 build
|
|
|
|
- name: Compile x86-64-avx512 build
|
|
if: ${{ matrix.config.run_64bit_tests }}
|
|
run: |
|
|
make clean
|
|
make -j2 ARCH=x86-64-avx512 build
|
|
|
|
- name: Compile x86-64-vnni512 build
|
|
if: ${{ matrix.config.run_64bit_tests }}
|
|
run: |
|
|
make clean
|
|
make -j2 ARCH=x86-64-vnni512 build
|
|
|
|
- name: Compile x86-64-vnni256 build
|
|
if: ${{ matrix.config.run_64bit_tests }}
|
|
run: |
|
|
make clean
|
|
make -j2 ARCH=x86-64-vnni256 build
|
|
|
|
# armv8 tests
|
|
|
|
- name: Test armv8 build
|
|
if: ${{ matrix.config.run_armv8_tests }}
|
|
run: |
|
|
export PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH
|
|
export LDFLAGS="-static -Wno-unused-command-line-argument"
|
|
make clean
|
|
make -j2 ARCH=armv8 build
|
|
../tests/signature.sh $benchref
|
|
|
|
# armv7 tests
|
|
|
|
- name: Test armv7 build
|
|
if: ${{ matrix.config.run_armv7_tests }}
|
|
run: |
|
|
export PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH
|
|
export LDFLAGS="-static -Wno-unused-command-line-argument"
|
|
make clean
|
|
make -j2 ARCH=armv7 build
|
|
../tests/signature.sh $benchref
|
|
|
|
- name: Test armv7-neon build
|
|
if: ${{ matrix.config.run_armv7_tests }}
|
|
run: |
|
|
export PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH
|
|
export LDFLAGS="-static -Wno-unused-command-line-argument"
|
|
make clean
|
|
make -j2 ARCH=armv7-neon build
|
|
../tests/signature.sh $benchref
|
|
|
|
# Other tests
|
|
|
|
- name: Check perft and search reproducibility
|
|
if: ${{ matrix.config.run_64bit_tests }}
|
|
run: |
|
|
make clean
|
|
make -j2 ARCH=x86-64-modern build
|
|
../tests/perft.sh
|
|
../tests/reprosearch.sh
|
|
|
|
# Sanitizers
|
|
|
|
- name: Run under valgrind
|
|
if: ${{ matrix.config.run_expensive_tests }}
|
|
run: |
|
|
export CXXFLAGS="-O1 -fno-inline"
|
|
make clean
|
|
make -j2 ARCH=x86-64-modern debug=yes optimize=no build > /dev/null
|
|
../tests/instrumented.sh --valgrind
|
|
../tests/instrumented.sh --valgrind-thread
|
|
|
|
- name: Run with UB sanitizer
|
|
if: ${{ matrix.config.run_expensive_tests }}
|
|
run: |
|
|
export CXXFLAGS="-O1 -fno-inline"
|
|
make clean
|
|
make -j2 ARCH=x86-64-modern sanitize=undefined optimize=no debug=yes build > /dev/null
|
|
../tests/instrumented.sh --sanitizer-undefined
|
|
|
|
- name: Run with thread sanitizer
|
|
if: ${{ matrix.config.run_expensive_tests }}
|
|
run: |
|
|
export CXXFLAGS="-O1 -fno-inline"
|
|
make clean
|
|
make -j2 ARCH=x86-64-modern sanitize=thread optimize=no debug=yes build > /dev/null
|
|
../tests/instrumented.sh --sanitizer-thread
|