24 votes

Qu'est-ce qui remplacera les intrinsèques x86 pour C quand Apple abandonnera les processeurs Intel pour ses propres puces ?

Il existe des industries entières fondées sur l'utilisation d'Intel Intrinsics pour la parallélisation des CPU (avec SIMD). Par exemple, la communauté des physiciens de Lattice QCD en dépend pour améliorer l'efficacité des simulations de treillis.

Les macs à base d'Intel peuvent être et sont couramment utilisés par ces professionnels pour faire leur travail. Cependant, il y a des rumeurs selon lesquelles Apple remplacerait les processeurs Intel par des processeurs ARM dans les futurs Macs. Ces professionnels devront-ils remplacer leurs Macs par d'autres ordinateurs basés sur Intel, ou existe-t-il des alternatives à Intel Intrinsics for C qui sont supportées par les CPU ARM ?

26voto

Jose Chavez Points 645

Intel Intrinsics est en fait une bibliothèque qui facilite l'accès à un certain nombre de jeux d'instructions Intel, tels que SSE (Streaming SIMD Extensions), AVX, etc. - pour les programmeurs C. Le but est de pouvoir utiliser ces jeux d'instructions pour la parallélisation, etc. sans avoir à faire de la programmation assembleur de bas niveau à la main.

La plate-forme ARM possède des jeux d'instructions similaires qui répondent à de nombreux objectifs identiques. Par exemple, NEON est l'alternative ARM à SSE sur Intel. NEON vous donne des instructions SIMD que vous pouvez exploiter pour augmenter la parallélisation.

Et comme pour l'Intrinsèque Intel, vous avez l'Intrinsèque du compilateur ARM, qui sert le même objectif. Vous pouvez inclure "arm_neon.h" dans votre programme C pour pouvoir utiliser les instructions NEON avec une interface C sans avoir à recourir à la programmation assembleur de bas niveau.

Il convient toutefois de noter que les instructions disponibles sur Intel et ARM ne sont pas identiques. Ainsi, comme pour les "programmes ordinaires", vous ne pouvez pas utiliser directement les instructions SIMD pour Intel sur ARM (ou vice versa). En pratique, les programmeurs utilisent souvent des bibliothèques logicielles contenant des opérations de niveau supérieur prêtes à l'emploi, capables de tirer parti des instructions Intel et ARM. Un bon exemple est la bibliothèque de traitement d'images "Simd" ( https://github.com/ermig1979/Simd ) qui propose des opérations de haut niveau ayant des implémentations distinctes et optimisées pour SSE, AVX, VMX, VSX et NEON (c'est-à-dire Intel, PowerPC et ARM).

D'après ce que je peux voir, la croissance des nouvelles fonctions de parallélisation est très élevée sur les plates-formes Intel et ARM - elle est essentielle pour fournir des performances de nouvelle génération à certains utilisateurs. Sur les puces ARM plus récentes, vous avez par exemple accès au jeu d'instructions SVE (Scalable Vector Extensions, qui est essentiellement un jeu d'instructions SIMD encore meilleur pour les processeurs ARM 64 bits). Il n'y a pas d'avantage inhérent aux plates-formes Intel ou ARM en termes de fourniture de nouveaux jeux d'instructions SIMD améliorés pour les programmeurs à l'avenir.

Les processeurs d'Apple (par exemple dans les iPhones et les iPads) utilisent le jeu d'instructions NEON depuis de nombreuses années. Les processeurs A5 et ultérieurs disposent également du jeu d'instructions NEON avancé. Les processeurs A11 plus récents disposent des instructions SVE, et les tout derniers processeurs A12 ajoutent en plus le support SIMD pour les nombres complexes.

9voto

user1677899 Points 41

L'Apple M1 prend en charge les instructions SIMD Neon mais pas SVE. Vous pouvez utiliser sse2neon qui clone les SIMD intrinsèques de x86-64 (MMX, SSE, AES) avec leurs homologues Neon.

Voici quelques repères en utilisant ce programme simple . La seule modification apportée au code C pour permettre la compilation sur le M1 était cette conditionnelle :

#ifdef __x86_64__
 #include <immintrin.h>
#else   
 #include "sse2neon.h"
#endif

Cela vous permet d'utiliser les mêmes intrinsèques pour les deux architectures. Intel fournit un excellent guide pour utiliser les intrinsèques x86-64.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X