Czy w procesorach M1 firma apple dodała instrukcję spoza zakresu instrukcji ARM?

0

Czy ktoś wie czy w Apple M1 dodano instrukcje mnożenia macierzy jako dodatkową instrukcję i przez to zestaw nie jest zgodny z ARM?
https://medium.com/swlh/apples-m1-secret-coprocessor-6599492fc1e1

0

Jak dodali a nic przy okazji nie usunęli, to moim zdaniem ciągle jest zgodny z ARM (po potrafi wykonać wszystkie jego instrukcje).

1

Standard Armv8 dopuszcza niestandardowe instrukcje w pewnych określonych formatach. Jest nawet projekt procesora, który ułatwia wprowadzanie własnych instrukcji - Cortex-M. Pewne informacje:
https://www.arm.com/why-arm/technologies/custom-instructions
https://developer.arm.com/architectures/instruction-sets/custom-instructions
https://www.forbes.com/sites/tiriasresearch/2019/10/08/arm-opens-up-cpu-cores-to-custom-instructions/

Dodatkowo, jak popatrzysz na https://old.hotchips.org/wp-content/uploads/hc_archives/hc28/HC28.22-Monday-Epub/HC28.22.10-GPU-HPC-Epub/HC28.22.131-ARMv8-vector-Stephens-Yoshida-ARM-v8-23_51-v11.pdf , to zauważysz, że przestrzeń instrukcji ma pewne segmenty nieużywane. Część z nich jest chyba przeznaczona dla niestandardowych instrukcji:
screenshot-20210404094222.png
screenshot-20210404094356.png

Tak w ogóle to co by miało znaczyć zgodny z ARM? AMD wprowadzało pewne instrukcje, np. 3DNow! które nie były implementowane przez inne firmy, a na końcu sobie odpuścili i np. Ryzeny już 3DNow! nie obsługują w ogóle. Czy to było niezgodne z x86?

0
Wibowit napisał(a):

Tak w ogóle to co by miało znaczyć zgodny z ARM? AMD wprowadzało pewne instrukcje, np. 3DNow! które nie były implementowane przez inne firmy, a na końcu sobie odpuścili i np. Ryzeny już 3DNow! nie obsługują w ogóle. Czy to było niezgodne z x86?

Ściśle rozumując, było niezgodne w tym sensie że dana sekwencja bajtów na zgodnym procku powinna wywalić wyjątek nieprawidłowej instrukcji, a nie wywalało tylko robiło określoną akcję..

Praktycznie każda nowa rodzina procesorów x86 ma jakieś nowe instrukcje. Póki stary kod działa w niezmieniony sposób, można powiedzieć że procek jest zgodny.

https://medium.com/swlh/apple[...]cret-coprocessor-6599492fc1e1

Bardzo, bardzo niefajnie że producent sobie robi instrukcje tylko dla siebie i swoich libek. To jest przenoszenie patologii od dawna istniejącej w świecie GPU na instrukcje CPU.

3

ARM ma w planach oficjalne dodanie instrukcje obsługujące macierze
https://en.wikichip.org/wiki/arm_holdings/microarchitectures/matterhorn
https://www.arm.com/company/news/2019/10/a-total-compute-approach

Evolving capabilities of Arm CPU IP by adding new ML instructions such as Matrix Multiply (MatMul) to boost performance

Intel też:
https://fuse.wikichip.org/news/3600/the-x86-advanced-matrix-extension-amx-brings-matrix-operations-to-debut-with-sapphire-rapids/
https://en.wikichip.org/wiki/x86/amx
https://software.intel.com/content/www/us/en/develop/documentation/cpp-compiler-developer-guide-and-reference/top/compiler-reference/intrinsics/intrinsics-for-intel-advanced-matrix-extensions-intel-amx-instructions.html

Bardzo, bardzo niefajnie że producent sobie robi instrukcje tylko dla siebie i swoich libek. To jest przenoszenie patologii od dawna istniejącej w świecie GPU na instrukcje CPU.

W x86 tego nie było? Podałem już przykład 3DNow! Popatrz jaką AVX-512 (prosto od Intela) jest patologią:
Venn_AVX512_v141.png

Knights Landing i Knight Mill to procesory wywodzące się z projektu Larrabee i nie będą już produkowane nowe modele. Instrukcje przeznaczone tylko dla nich prawdopodobnie nie będą już nigdy obsługiwane.

Nawet jak popatrzysz na https://en.wikipedia.org/wiki/AVX-512#CPUs_with_AVX-512 to jest dziwnie:
screenshot-20210404113441.png

Intel dodatkowo produkuje kompilator i biblioteki, które sprawdzają czy są uruchomione na procesorze Intela, zamiast sprawdzać jakie instrukcje procesor obsługuje. Efekt jest taki, że zoptymalizowany kod uruchamia się tylko na procesorach Intela, a nie na procesorach AMD, które też by taki kod obsłużyły i wykonały szybciej niż niezoptymalizowany. Z tego powodu ludzie łatają binarki wygenerowane przez kompilator Intela: https://github.com/jimenezrick/patch-AuthenticAMD

Tutaj jest obejście na sprawdzanie w bibliotekach od Intela producenta CPU: https://www.pugetsystems.com/labs/hpc/How-To-Use-MKL-with-AMD-Ryzen-and-Threadripper-CPU-s-Effectively-for-Python-Numpy-And-Other-Applications-1637/ (MKL_DEBUG_CPU_TYPE=5)

1 użytkowników online, w tym zalogowanych: 0, gości: 1