23 votos

¿Qué sustituirá a los intrínsecos x86 para C cuando Apple abandone las CPU Intel por sus propios chips?

Existen industrias enteras basadas en el uso de Intel Intrinsics para la paralelización de CPU (con SIMD). Por ejemplo, la comunidad de físicos de QCD en celosía depende de ello para aumentar la eficiencia de las simulaciones en celosía.

Los mac basados en Intel pueden ser y son utilizados habitualmente por estos profesionales para realizar su trabajo. Sin embargo, se rumorea que Apple sustituirá la CPU Intel por cpus ARM en los futuros Mac. ¿Tendrán estos profesionales que sustituir los Mac por otros ordenadores basados en Intel, o existen alternativas a Intel Intrinsics para C que sean compatibles con las CPU basadas en ARM?

1 votos

Los comentarios no son para extender la discusión; esta conversación ha sido movido al chat .

25voto

Jose Chavez Puntos 645

Intel Intrinsics no es más que una biblioteca que facilita el acceso a una serie de conjuntos de instrucciones de Intel, como SSE (Streaming SIMD Extensions), AVX, etc. - para los programadores de C. El objetivo es poder utilizar estos conjuntos de instrucciones para la paralelización, etc. sin tener que hacer programación en ensamblador de bajo nivel a mano.

La plataforma ARM tiene conjuntos de instrucciones similares que sirven para muchos de los mismos propósitos. Por ejemplo, NEON es la alternativa de ARM a SSE en Intel. NEON proporciona instrucciones SIMD que se pueden aprovechar para aumentar la paralelización.

Y similar al Intel Intrinsics, tienes el ARM Compiler Intrinsics, que sirve para el mismo propósito. Puedes incluir "arm_neon.h" en tu programa C para poder utilizar las instrucciones NEON con una interfaz C sin tener que recurrir a la programación en ensamblador de bajo nivel.

No obstante, cabe señalar que las instrucciones disponibles en Intel y ARM no son idénticas. Por tanto, al igual que ocurre con los "programas ordinarios", no se pueden utilizar instrucciones SIMD para Intel en ARM (o viceversa) directamente. En la práctica, los programadores de software suelen utilizar bibliotecas de software con operaciones de alto nivel ya preparadas que son capaces de aprovechar tanto las instrucciones Intel como las ARM. Un buen ejemplo es la biblioteca de procesamiento de imágenes "Simd" ( https://github.com/ermig1979/Simd ) que ofrece operaciones de alto nivel con implementaciones optimizadas independientes para SSE, AVX, VMX, VSX y NEON (es decir, Intel, PowerPC y ARM).

Por lo que veo, el crecimiento de las nuevas funciones de paralización es muy elevado tanto en plataformas Intel como ARM: es esencial para ofrecer un rendimiento de nueva generación a algunos usuarios. En los chips ARM más recientes se tiene acceso, por ejemplo, al conjunto de instrucciones SVE (Scalable Vector Extensions, que es esencialmente un conjunto de instrucciones SIMD aún mejor para los procesadores ARM de 64 bits). No hay ninguna ventaja inherente a las plataformas Intel o ARM en términos de proporcionar nuevos y mejorados conjuntos de instrucciones SIMD para los programadores en el futuro.

Los propios procesadores de Apple (por ejemplo, en iPhones y iPads) han tenido el conjunto de instrucciones NEON durante muchos años. Las CPU A5 y posteriores también tienen el conjunto NEON avanzado. Las nuevas CPU A11 incorporan las instrucciones SVE, y las últimas CPU A12 añaden soporte SIMD para números complejos.

5 votos

Vale la pena señalar que los intrínsecos SIMD de ARM no son en absoluto compatibles con los intrínsecos SSE/AVX/AVX512. Existen algunas librerías SIMD multiplataforma que intentan exponer de forma portable las operaciones más simples como la suma/suma/fma vertical, pero los diferentes conjuntos de instrucciones asm proporcionan diferentes barajados y otras operaciones. Portar intrínsecos x86 a AArch64 no siempre es sencillo, y es mucho trabajo incluso cuando es simple. Pero probablemente la mayoría de los científicos están usando librerías que ya tienen código x86 y ARM SIMD, en lugar de usar intrínsecos directamente.

1 votos

Sí, no son compatibles con el código fuente; por eso he escrito que son similares en su propósito, pero definitivamente no son "idénticos". Es realmente difícil intentar hacerlos multiplataforma, ya que al hacerlo se perdería probablemente la ganancia de rendimiento que se intentaba conseguir en primer lugar. Y sí, ya existen muchas bibliotecas de software con código SIMD para CPUs ARM, incluso para matemáticas estándar como álgebra lineal, pero también para fines específicos de aprendizaje automático, visión por ordenador, etc.

1 votos

Sí, exactamente. Dado que se trata de una pregunta de Apple, no de Stack Overflow, pensé que era importante decirlo de forma más clara y explícita para las personas que no escriben código utilizando intrínsecos y que podrían pasar por alto esa frase. Es un punto bastante obvio para las personas que entienden cómo C compila a asm y se ejecuta en CPUs, pero entonces no estarían haciendo la pregunta. (Buena actualización, exactamente lo que estaba pensando)

8voto

user1677899 Puntos 21

El Apple M1 soporta instrucciones Neon SIMD pero no SVE. Puede utilizar sse2neon que clona los intrínsecos SIMD de x86-64 (MMX, SSE, AES) con sus homólogos Neon.

He aquí algunas puntos de referencia utilizando este programa sencillo . El único cambio realizado en el código C para permitir la compilación en el M1 fue este condicional:

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

Esto permite utilizar los mismos intrínsecos para ambas arquitecturas. Intel proporciona una gran guía para utilizar los intrínsecos x86-64.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X