Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

dotprod unsupported for apple-silicon #4408

Open
XInTheDark opened this issue Feb 25, 2023 · 11 comments
Open

dotprod unsupported for apple-silicon #4408

XInTheDark opened this issue Feb 25, 2023 · 11 comments
Labels
build needs-analysis Needs further analysis

Comments

@XInTheDark
Copy link
Contributor

XInTheDark commented Feb 25, 2023

Describe the issue

When building with make build ARCH=apple-silicon on an Apple M1 chip, I get the following error:

/var/folders/5m/v_lfr66s1mg7l9qhv3mjfkfc0000gn/T//ccCMWtGb.s:641:2: error: instruction requires: dotprod
        sdot    v0.4s, v1.16b, v2.16b
        ^
/var/folders/5m/v_lfr66s1mg7l9qhv3mjfkfc0000gn/T//ccCMWtGb.s:783:2: error: instruction requires: dotprod
        sdot    v0.4s, v3.16b, v4.16b
        ^

(etc.)

make[1]: *** [evaluate_nnue.o] Error 1
make: *** [build] Error 2

Expected behavior

Build should complete successfully.

Steps to reproduce

make build ARCH=apple-silicon

Anything else?

This seems to be caused by PR #4400, which claims to add support for apple-silicon dot product instructions, but this is not working properly.

Operating system

MacOS

Stockfish version

472e726

@vondele
Copy link
Member

vondele commented Feb 25, 2023

can you provide the output of cat /proc/cpuinfo (if the file exists on MacOS), and the version of the compiler used?

@Disservin
Copy link
Member

Cant reproduce on my M1 make -j build ARCH=apple-silicon and cat /proc/cpuinfo doesnt work. But theres this
sysctl -a | grep machdep.cpu which doesnt give you much information.

machdep.cpu.cores_per_package: 8
machdep.cpu.core_count: 8
machdep.cpu.logical_per_package: 8
machdep.cpu.thread_count: 8
machdep.cpu.brand_string: Apple M1

@XInTheDark
Copy link
Contributor Author

can you provide the output of cat /proc/cpuinfo (if the file exists on MacOS), and the version of the compiler used?

The file doesn't exist on my machine either. Compiler version is gcc version 12.2.0 (Homebrew GCC 12.2.0).

@vondele
Copy link
Member

vondele commented Feb 25, 2023

actually the error message might be coming from from the assembler or down the toolchain in binutils. Can you see what additional output you get with
CXXFLAGS="-v" make build ARCH=apple-silicon

@XInTheDark
Copy link
Contributor Author

Weirdly enough, after a restart of the machine the issue no longer occurs. I'll close this issue then.

@XInTheDark
Copy link
Contributor Author

I ran CXXFLAGS="-v" make build ARCH=apple-silicon before the restart though, and part of the output was this:

warning: MPC header version 1.2.1 differs from library version 1.3.1.
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring nonexistent directory "/opt/homebrew/Cellar/gcc/12.2.0/bin/../lib/gcc/current/gcc/aarch64-apple-darwin22/12/../../../../../../aarch64-apple-darwin22/include"
ignoring duplicate directory "/opt/homebrew/Cellar/gcc/12.2.0/bin/../lib/gcc/current/gcc/../../../../lib/gcc/current/gcc/aarch64-apple-darwin22/12/../../../../../../include/c++/12"
ignoring duplicate directory "/opt/homebrew/Cellar/gcc/12.2.0/bin/../lib/gcc/current/gcc/../../../../lib/gcc/current/gcc/aarch64-apple-darwin22/12/../../../../../../include/c++/12/aarch64-apple-darwin22"
ignoring duplicate directory "/opt/homebrew/Cellar/gcc/12.2.0/bin/../lib/gcc/current/gcc/../../../../lib/gcc/current/gcc/aarch64-apple-darwin22/12/../../../../../../include/c++/12/backward"
ignoring duplicate directory "/opt/homebrew/Cellar/gcc/12.2.0/bin/../lib/gcc/current/gcc/../../../../lib/gcc/current/gcc/aarch64-apple-darwin22/12/include"
ignoring nonexistent directory "/Library/Developer/CommandLineTools/SDKs/MacOSX13.sdk/usr/local/include"
ignoring duplicate directory "/opt/homebrew/Cellar/gcc/12.2.0/bin/../lib/gcc/current/gcc/../../../../lib/gcc/current/gcc/aarch64-apple-darwin22/12/include-fixed"
ignoring nonexistent directory "/opt/homebrew/Cellar/gcc/12.2.0/bin/../lib/gcc/current/gcc/../../../../lib/gcc/current/gcc/aarch64-apple-darwin22/12/../../../../../../aarch64-apple-darwin22/include"
ignoring nonexistent directory "/Library/Developer/CommandLineTools/SDKs/MacOSX13.sdk/Library/Frameworks"
#include "..." search starts here:
#include <...> search starts here:
 /opt/homebrew/Cellar/gcc/12.2.0/bin/../lib/gcc/current/gcc/aarch64-apple-darwin22/12/../../../../../../include/c++/12
 /opt/homebrew/Cellar/gcc/12.2.0/bin/../lib/gcc/current/gcc/aarch64-apple-darwin22/12/../../../../../../include/c++/12/aarch64-apple-darwin22
 /opt/homebrew/Cellar/gcc/12.2.0/bin/../lib/gcc/current/gcc/aarch64-apple-darwin22/12/../../../../../../include/c++/12/backward
 /opt/homebrew/Cellar/gcc/12.2.0/bin/../lib/gcc/current/gcc/aarch64-apple-darwin22/12/include
 /opt/homebrew/Cellar/gcc/12.2.0/bin/../lib/gcc/current/gcc/aarch64-apple-darwin22/12/include-fixed
 /Library/Developer/CommandLineTools/SDKs/MacOSX13.sdk/usr/include
 /Library/Developer/CommandLineTools/SDKs/MacOSX13.sdk/System/Library/Frameworks
End of search list.
GNU C++17 (Homebrew GCC 12.2.0) version 12.2.0 (aarch64-apple-darwin22)
	compiled by GNU C version 12.2.0, GMP version 6.2.1, MPFR version 4.1.0-p13, MPC version 1.2.1, isl version isl-0.25-GMP

warning: MPC header version 1.2.1 differs from library version 1.3.1.
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 92be565a621eebe8268e8cf75aa62159
COLLECT_GCC_OPTIONS='-v' '-Wall' '-Wcast-qual' '-fno-exceptions' '-std=c++17' '-Wpedantic' '-Wextra' '-Wshadow' '-Wmissing-declarations' '-mabi=darwinpcs' '-D' 'USE_PTHREADS' '-D' 'NDEBUG' '-O3' '-D' 'IS_64BIT' '-D' 'USE_POPCNT' '-D' 'USE_NEON=8' '-march=armv8.2-a+dotprod' '-D' 'USE_NEON_DOTPROD' '-D' 'GIT_SHA="472e726b"' '-D' 'GIT_DATE="20230224"' '-flto' '-flto-partition=one' '-c' '-o' 'evaluate_nnue.o' '-mmacosx-version-min=10.14'  '-nodefaultexport' '-mlittle-endian'
 as -arch arm64 -v -mmacosx-version-min=10.14 -o evaluate_nnue.o /var/folders/5m/v_lfr66s1mg7l9qhv3mjfkfc0000gn/T//ccIVQ4sn.s
Apple clang version 14.0.0 (clang-1400.0.29.202)
Target: arm64-apple-darwin22.2.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
 "/Library/Developer/CommandLineTools/usr/bin/clang" -cc1as -triple arm64-apple-macosx10.14.0 -filetype obj -main-file-name ccIVQ4sn.s -target-cpu apple-m1 -target-feature +v8.5a -target-feature +fp-armv8 -target-feature +neon -target-feature +crc -target-feature +crypto -target-feature +dotprod -target-feature +fp16fml -target-feature +ras -target-feature +lse -target-feature +rdm -target-feature +rcpc -target-feature +zcm -target-feature +zcz -target-feature +fullfp16 -target-feature +sm4 -target-feature +sha3 -target-feature +sha2 -target-feature +aes -fdebug-compilation-dir=/Users/jerry/Documents/Chess/Stockfish-dev-official/Stockfish/src -dwarf-debug-producer "Apple clang version 14.0.0 (clang-1400.0.29.202)" -dwarf-version=4 -mrelocation-model pic --mrelax-relocations -mllvm -disable-aligned-alloc-awareness=1 -o evaluate_nnue.o /var/folders/5m/v_lfr66s1mg7l9qhv3mjfkfc0000gn/T//ccIVQ4sn.s

/var/folders/5m/v_lfr66s1mg7l9qhv3mjfkfc0000gn/T//ccIVQ4sn.s:641:2: error: instruction requires: dotprod
        sdot    v0.4s, v1.16b, v2.16b

etc.

@XInTheDark
Copy link
Contributor Author

This issue occurs again with latest master.

@XInTheDark XInTheDark reopened this Mar 1, 2023
@TonHaver
Copy link

TonHaver commented Mar 3, 2023

Can't reproduce on Apple M1 Pro

$ sysctl -a | grep machdep.cpu
machdep.cpu.cores_per_package: 8
machdep.cpu.core_count: 8
machdep.cpu.logical_per_package: 8
machdep.cpu.thread_count: 8
machdep.cpu.brand_string: Apple M1 Pro

/Applications/Xcode.app/Contents/Developer/usr/bin/make ARCH=apple-silicon COMP=gcc all
g++ -v -Wall -Wcast-qual -fno-exceptions -std=c++17 -pedantic -Wextra -Wshadow -Wmissing-declarations -m64 -mmacosx-version-min=10.14 -arch arm64 -DUSE_PTHREADS -DNDEBUG -O3 -DIS_64BIT -DUSE_POPCNT -DUSE_NEON=8 -march=armv8.2-a+dotprod -DUSE_NEON_DOTPROD -flto=full -c -o misc.o misc.cpp
Apple clang version 13.1.6 (clang-1316.0.21.2.5)
Target: arm64-apple-darwin21.4.0
Thread model: posix

$ ./stockfish
Stockfish dev-20230303-nogit by the Stockfish developers (see AUTHORS file)

@vondele
Copy link
Member

vondele commented Mar 4, 2023

I believe this is not a Stockfish issue, but probably some issue with how the toolchain is setup on the user's machine. If anybody wants to help, probably best to have that exchange on discord.

@vondele vondele closed this as completed Mar 4, 2023
@9srnm
Copy link

9srnm commented Jan 4, 2024

I don't know if this would be helpful, but I had the same issue. I solved it via changing Makefile, in specific, this line:
CXXFLAGS += -march=armv8.2-a+dotprod -DUSE_NEON_DOTPROD
To this:
CXXFLAGS += -march=armv8-a+dotprod -DUSE_NEON_DOTPROD

@vondele vondele reopened this Jan 9, 2024
@vondele
Copy link
Member

vondele commented Jan 9, 2024

OK, this latest suggestion might require a closer look, I'm reopening this issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
build needs-analysis Needs further analysis
Projects
None yet
Development

No branches or pull requests

6 participants
@vondele @Disservin @XInTheDark @9srnm @TonHaver and others