
La instrucción única, datos múltiples ( SIMD ) es un tipo de computación paralela (procesamiento) en la taxonomía de Flynn . SIMD describe computadoras con múltiples elementos de procesamiento que realizan la misma operación en múltiples puntos de datos simultáneamente. SIMD puede ser interna (parte del diseño del hardware) y puede ser directamente accesible a través de una arquitectura de conjunto de instrucciones (ISA), pero no debe confundirse con una ISA.
Estas máquinas aprovechan el paralelismo a nivel de datos , pero no la concurrencia : se realizan cálculos simultáneos (en paralelo), pero cada unidad ejecuta exactamente la misma instrucción en cada momento (solo que con datos diferentes). Un ejemplo sencillo es sumar varios pares de números: todas las unidades SIMD realizan una suma, pero cada una tiene pares de valores diferentes para sumar. SIMD es especialmente útil para tareas comunes como ajustar el contraste de una imagen digital o el volumen del audio digital . La mayoría de los diseños modernos de unidades centrales de procesamiento (CPU) incluyen instrucciones SIMD para mejorar el rendimiento en aplicaciones multimedia . En las CPU recientes, las unidades SIMD están estrechamente integradas con jerarquías de caché y mecanismos de precarga, lo que minimiza la latencia durante operaciones con grandes bloques de datos. Por ejemplo, los procesadores compatibles con AVX-512 pueden precargar líneas de caché completas y aplicar operaciones de multiplicación y suma fusionadas (FMA) en un único ciclo SIMD.
Confusión entre SIMT y SIMD

En la taxonomía de Flynn de 1972 , SIMD tiene tres subcategorías distintas , una de las cuales es la instrucción única, hilos múltiples (SIMT). SIMT no debe confundirse con los hilos de software ni con los hilos de hardware , ya que ambos son de tiempo compartido (segmentación de tiempo). SIMT es una verdadera ejecución paralela simultánea a nivel de hardware, como en el ILLIAC IV .
No debe confundirse SIMD con el procesamiento vectorial , caracterizado por el Cray 1 y aclarado en la taxonomía de Duncan . La diferencia entre SIMD y los procesadores vectorialesSET VECTOR LENGTH radica principalmente en la presencia de una instrucción de estilo Cray .
Historia
El primer uso operativo conocido hasta la fecha de SIMD dentro de un registro fue el TX-2 , en 1958. Era capaz de realizar operaciones de 36 bits y dos operaciones de subpalabra de 18 bits o cuatro de 9 bits.
El primer uso comercial de las instrucciones SIMD se dio en el ILLIAC IV , que se completó en 1972.
Las supercomputadoras vectoriales de principios de la década de 1970, como la CDC Star-100 y la Texas Instruments ASC, podían operar con un "vector" de datos con una sola instrucción. El procesamiento vectorial fue especialmente popularizado por Cray en las décadas de 1970 y 1980. Actualmente, las arquitecturas de procesamiento vectorial se consideran independientes de las computadoras SIMD: la taxonomía de Duncan las incluye, mientras que la de Flynn no, debido a que el trabajo de Flynn (1966, 1972) es anterior al Cray-1 (1977). Sin embargo, la complejidad de los procesadores vectoriales inspiró una disposición más simple conocida como SIMD dentro de un registro .
La primera era de las computadoras SIMD modernas se caracterizó por supercomputadoras de procesamiento masivamente paralelo , como la Thinking Machines Connection Machine CM-1 y la CM-2. Estas computadoras contaban con numerosos procesadores de funcionalidad limitada que trabajaban en paralelo. Por ejemplo, cada uno de los 65 536 procesadores de un bit en una Thinking Machines CM-2 ejecutaba la misma instrucción simultáneamente, lo que permitía, por ejemplo, combinar lógicamente 65 536 pares de bits a la vez, utilizando una red conectada mediante hipercubos o memoria RAM dedicada al procesador para encontrar sus operandos. La supercomputación se alejó del enfoque SIMD cuando los enfoques MIMD ( instrucciones múltiples escalares, datos múltiples ) de bajo costo, basados en procesadores comerciales como el Intel i860 XP, se volvieron más potentes, y el interés en SIMD disminuyó. [ 3 ]
La era actual de los procesadores SIMD surgió del mercado de las computadoras de escritorio en lugar del mercado de las supercomputadoras. A medida que los procesadores de escritorio se volvieron lo suficientemente potentes como para soportar juegos en tiempo real y procesamiento de audio/video durante la década de 1990, creció la demanda de este tipo de potencia de cálculo, y los fabricantes de microprocesadores recurrieron a SIMD para satisfacer la demanda. [ 4 ] Este resurgimiento también coincidió con el auge de DirectX y los modelos de sombreado OpenGL, que aprovecharon en gran medida SIMD internamente. Las API gráficas animaron a los programadores a adoptar estilos de programación de datos en paralelo, acelerando indirectamente la adopción de SIMD en el software de escritorio. Hewlett-Packard introdujo las instrucciones Multimedia Acceleration eXtensions (MAX) en las computadoras de escritorio PA-RISC 1.1 en 1994 para acelerar la decodificación MPEG. [ 5 ] Sun Microsystems introdujo las instrucciones enteras SIMD en sus extensiones del conjunto de instrucciones " VIS " en 1995, en su microprocesador UltraSPARC I. MIPS siguió el ejemplo con su sistema MDMX similar .
La primera implementación generalizada de SIMD en computadoras de escritorio fue con las extensiones MMX de Intel para la arquitectura x86 en 1996. Esto impulsó la introducción del sistema AltiVec, mucho más potente , en los sistemas PowerPC de Motorola y POWER de IBM . Intel respondió en 1999 con la introducción del nuevo sistema SSE . Desde entonces, se han desarrollado varias extensiones para los conjuntos de instrucciones SIMD en ambas arquitecturas. Intel desarrolla las extensiones vectoriales avanzadas AVX, AVX2 y AVX-512 . AMD ofrece soporte para AVX, AVX2 y AVX-512 en sus productos actuales. [ 6 ]
Desventajas
Con SIMD, no es raro un aumento de un orden de magnitud en el tamaño del código, en comparación con el código escalar equivalente o el código vectorial equivalente, y se puede lograr una efectividad de un orden de magnitud o mayor (trabajo realizado por instrucción) con las ISA vectoriales. [ 7 ]
La extensión vectorial escalable de ARM adopta un enfoque diferente, conocido en la taxonomía de Flynn como SIMD "predicado" (enmascarado) . Este enfoque no es tan compacto como el procesamiento vectorial , pero sigue siendo mucho mejor que el SIMD no predicado. Se ofrecen ejemplos comparativos detallados en Procesador vectorial § Ejemplo de instrucción vectorial .
Cronología
Hardware
CPU
La SIMD de pequeña escala (64 o 128 bits) se popularizó en las CPU de propósito general a principios de la década de 1990 y continuó hasta 1997 y más tarde con las instrucciones de vídeo de movimiento (MVI) para Alpha . Las instrucciones SIMD se pueden encontrar, en mayor o menor medida, en la mayoría de las CPU, incluidas AltiVec y Signal Processing Engine (SPE) de IBM para PowerPC , PA-RISC Multimedia Acceleration eXtensions (MAX) de Hewlett-Packard (HP) , MMX e iwMMXt de Intel , Streaming SIMD Extensions (SSE), SSE2 , SSE3 , SSSE3 y SSE4.x , 3DNow! de AMD , el subsistema de vídeo ARC de ARC , VIS y VIS2 de SPARC , MAJC de Sun , la tecnología Neon de ARM , MDMX (MaDMaX) de MIPS y MIPS-3D .
Las instrucciones AVX-512 SIMD de Intel procesan 512 bits de datos a la vez.
Coprocesadores
El conjunto de instrucciones del Elemento de Procesamiento Sinérgico (SPE) del procesador Cell, desarrollado conjuntamente por IBM, Sony y Toshiba, se basa en gran medida en la arquitectura SIMD.
Algunas GPU, pero no todas, se basan en SIMD. Las GPU de AMD desde la microarquitectura TeraScale se basan en SIMD, una característica que se ha mantenido en las microarquitecturas RDNA y CDNA de la década de 2020, [ 8 ] con una capa de instrucción única, múltiples hilos (SIMT) por encima. [ 9 ] Por otro lado, las arquitecturas CUDA de Nvidia utilizan núcleos escalares con SIMT. [ 10 ]
Philips , ahora NXP , desarrolló varios procesadores SIMD llamados Xetal . El Xetal cuenta con 320 elementos de procesador de 16 bits especialmente diseñados para tareas de visión artificial.
Los chips M1 y M2 de Apple también incorporan unidades SIMD profundamente integradas con su GPU y Neural Engine, utilizando arquitecturas SIMD diseñadas por Apple y optimizadas para el filtrado de imágenes, la convolución y la multiplicación de matrices. Esta arquitectura de memoria unificada permite que las instrucciones SIMD operen de forma más eficiente en grupos de memoria compartida. (La CPU implementa NEON estándar).
Software


Las instrucciones SIMD se utilizan ampliamente para procesar gráficos 3D, aunque las tarjetas gráficas modernas con SIMD integrado han asumido en gran medida esta tarea de la CPU. Algunos sistemas también incluyen funciones de permutación que reempaquetan elementos dentro de vectores, lo que las hace especialmente útiles para el procesamiento y la compresión de datos. También se utilizan en criptografía. [ 11 ] [ 12 ] [ 13 ] La tendencia de la computación de propósito general en GPU ( GPGPU ) puede conducir a un uso más amplio de SIMD en el futuro. Los compiladores recientes como LLVM , GNU Compiler Collection (GCC) e ICC de Intel ofrecen opciones agresivas de autovectorización. Los desarrolladores a menudo pueden habilitarlas con indicadores como -O3o -ftree-vectorize, que guían al compilador para reestructurar bucles para compatibilidad con SIMD.
La adopción de sistemas SIMD en el software de computadoras personales fue inicialmente lenta debido a diversos problemas. Uno de ellos era que muchos de los primeros conjuntos de instrucciones SIMD tendían a ralentizar el rendimiento general del sistema debido a la reutilización de registros de punto flotante existentes. Otros sistemas, como MMX y 3DNow!, ofrecían soporte para tipos de datos que no resultaban de interés para un público amplio y requerían costosas instrucciones de cambio de contexto para alternar entre el uso de la FPU y los registros MMX . Además, los compiladores a menudo carecían de soporte, lo que obligaba a los programadores a recurrir a la codificación en lenguaje ensamblador .
La implementación de SIMD en x86 tuvo un comienzo lento. La introducción de 3DNow! por parte de AMD y SSE por parte de Intel generó cierta confusión, pero hoy en día el sistema parece haberse estabilizado (tras la adopción de SSE por parte de AMD) y los compiladores más recientes deberían dar como resultado un software más compatible con SIMD. Intel y AMD ahora ofrecen bibliotecas matemáticas optimizadas que utilizan instrucciones SIMD, y han comenzado a aparecer alternativas de código abierto como libSIMD , SIMDx86 y SLEEF (véase también libm ). [ 14 ]
Apple Computer tuvo algo más de éxito, a pesar de haber entrado en el mercado SIMD más tarde que los demás. AltiVec ofrecía un sistema completo y podía programarse con compiladores cada vez más sofisticados de Motorola , IBM y GNU , por lo que rara vez era necesario programar en lenguaje ensamblador. Además, muchos de los sistemas que se beneficiarían de SIMD eran suministrados por la propia Apple, como iTunes y QuickTime . Sin embargo, en 2006, los ordenadores Apple pasaron a utilizar procesadores Intel x86. Las API y las herramientas de desarrollo de Apple ( Xcode ) se modificaron para admitir SSE2 y SSE3 , así como AltiVec. Apple fue el principal comprador de chips PowerPC de IBM y Freescale Semiconductor . Aunque Apple ha dejado de utilizar procesadores PowerPC en sus productos, el desarrollo de AltiVec continúa en varios diseños PowerPC y Power ISA de Freescale e IBM.
La instrucción SIMD dentro de un registro ( SWAR ) es un conjunto de técnicas y trucos que se utilizan para implementar SIMD en registros de propósito general en hardware que no ofrece soporte directo para instrucciones SIMD. Esto permite aprovechar el paralelismo en ciertos algoritmos incluso en hardware que no admite SIMD directamente.
Interfaz del programador
Es habitual que los desarrolladores de conjuntos de instrucciones SIMD creen sus propias extensiones para C y C++ con funciones intrínsecas o tipos de datos especiales (con sobrecarga de operadores ) que garantizan la generación de código vectorial. Intel, AltiVec y ARM NEON ofrecen extensiones ampliamente adoptadas por los compiladores para sus CPU. (Las operaciones más complejas son responsabilidad de las bibliotecas de álgebra vectorial).
Tipos de datos genéricos
El compilador GNU C lleva las extensiones un paso más allá al abstraerlas en una interfaz universal que puede usarse en cualquier plataforma al proporcionar una forma de definir tipos de datos SIMD. [ 15 ] El compilador LLVM Clang también implementa la característica, con una interfaz análoga definida en el IR. [ 16 ] La crate de Rust packed_simd(y la experimental std::simd) usa esta interfaz, al igual que Swift 2.0+.
C++ tiene una interfaz experimental std::experimental::simdque funciona de forma similar a la extensión de GCC. Parece que la implementa libcxx de LLVM. Para GCC y libstdc++, está disponible una biblioteca envoltorio que se basa en la extensión de GCC. [ 17 ]
Microsoft agregó SIMD a .NET en RyuJIT. [ 18 ] El System.Numerics.Vectorpaquete, disponible en NuGet, implementa tipos de datos SIMD. [ 19 ] Java también tiene una nueva API propuesta para instrucciones SIMD disponible en OpenJDK 17 en un módulo incubador. [ 20 ] También tiene un mecanismo de reserva seguro para CPU no compatibles con bucles simples.
Sugerencias de vectorización
En lugar de proporcionar un tipo de datos SIMD, también se puede sugerir a los compiladores que vectoricen automáticamente algunos bucles, tomando potencialmente algunas aserciones sobre la falta de dependencia de datos. Esto no es tan flexible como manipular variables SIMD directamente, pero es más fácil de usar. OpenMP 4.0+ tiene una #pragma omp simdsugerencia. [ 21 ] Esta interfaz OpenMP ha reemplazado un amplio conjunto de extensiones no estándar, incluidas las de Cilk#pragma simd , [ 22 ] las de GCC #pragma GCC ivdepy muchas más. [ 23 ]
"SIMD everywhere", una colección de encabezados C/C++ que implementan funciones intrínsecas específicas de la plataforma para otras plataformas (por ejemplo, funciones intrínsecas SSE para ARM NEON), incluye el uso de funciones intrínsecas específicas de la plataforma, interfaces vectoriales genéricas y sugerencias de vectorización. Puede utilizarse como una "piedra Rosetta" para comparar estos diferentes paradigmas de programación SIMD. [ 24 ]
SPMD en SIMD
Otro enfoque es SPMD : escribir un programa que parezca operar con un solo elemento a la vez, y luego hacer que un compilador lo amplíe para que coincida con el ancho del vector SIMD. Este es el enfoque utilizado por los sombreadores gráficos y adoptado más recientemente por herramientas orientadas a la CPU como Intel IPSC. [ 25 ]
Multiversión SIMD
Normalmente, se espera que el software para consumidores funcione en una variedad de CPU de diferentes generaciones, lo que podría limitar la capacidad del programador para usar nuevas instrucciones SIMD y mejorar el rendimiento computacional del programa. La solución consiste en incluir varias versiones del mismo código que utilicen tecnologías SIMD más antiguas o más recientes, y elegir la que mejor se adapte a la CPU del usuario en tiempo de ejecución ( despacho dinámico ). Existen dos enfoques principales para estas soluciones:
- Multiversión de funciones (FMV): una subrutina del programa o de una biblioteca se duplica y se compila para varias extensiones del conjunto de instrucciones, y el programa decide cuál usar en tiempo de ejecución.
- Multiversión de bibliotecas (LMV): toda la biblioteca de programación se duplica para muchas extensiones del conjunto de instrucciones, y el sistema operativo o el programa decide cuál cargar en tiempo de ejecución.
FMV, codificado manualmente en lenguaje ensamblador, se usa con bastante frecuencia en varias bibliotecas críticas para el rendimiento, como glibc y libjpeg-turbo. El compilador Intel C++ , la colección de compiladores GNU desde GCC 6 y Clang desde clang 7 permiten un enfoque simplificado, donde el compilador se encarga de la duplicación y selección de funciones. GCC y clang requieren target_clonesetiquetas explícitas en el código para "clonar" funciones, [ 26 ] mientras que ICC lo hace automáticamente (bajo la opción de línea de comandos /Qax). El lenguaje de programación Rust también admite FMV. La configuración es similar a la de GCC y Clang en que el código define para qué conjuntos de instrucciones compilar, pero la clonación se realiza manualmente mediante inlining. [ 27 ]
Dado que el uso de FMV requiere la modificación del código en GCC y Clang, los proveedores suelen utilizar el control de versiones múltiples de las bibliotecas: esto es más fácil de lograr, ya que solo es necesario cambiar las opciones del compilador. Glibc admite LMV y esta funcionalidad es adoptada por el proyecto Clear Linux, respaldado por Intel. [ 28 ]
SIMD en la web
En 2013, John McCutchan anunció que había creado una interfaz de alto rendimiento para conjuntos de instrucciones SIMD para el lenguaje de programación Dart , llevando por primera vez los beneficios de SIMD a los programas web. La interfaz consta de dos tipos: [ 29 ]
- Float32x4, 4 valores de punto flotante de precisión simple.
- Int32x4, 4 valores enteros de 32 bits.
Las instancias de este tipo son inmutables y, en código optimizado, se asignan directamente a registros SIMD. Las operaciones expresadas en Dart generalmente se compilan en una sola instrucción sin sobrecarga. Esto es similar a las funciones intrínsecas de C y C++. Las pruebas de rendimiento para la multiplicación de matrices de 4×4 , la transformación de vértices en 3D y la visualización del conjunto de Mandelbrot muestran una aceleración cercana al 400 % en comparación con el código escalar escrito en Dart.
Intel anunció en IDF 2013 que estaba implementando la especificación de McCutchan tanto para V8 como para SpiderMonkey . [ 30 ] Sin embargo, en 2017, SIMD.js fue retirado de la cola del estándar ECMAScript en favor de buscar una interfaz similar en WebAssembly . [ 31 ]
Se añadió soporte para SIMD a la especificación WebAssembly 2.0, que se finalizó en 2022 y se hizo oficial en diciembre de 2024. [ 32 ] El vectorizado automático de LLVM, al compilar C o C++ a WebAssembly, puede apuntar a WebAssembly SIMD para hacer uso automático de SIMD, mientras que las funciones intrínsecas de SIMD también están disponibles. [ 33 ]
Aplicaciones comerciales
En general, ha resultado difícil encontrar aplicaciones comerciales sostenibles para los procesadores exclusivamente SIMD en la informática de propósito general.
Una que ha tenido cierto éxito es la GAPP , desarrollada por Lockheed Martin y comercializada por su filial Teranex . Las versiones recientes de la GAPP se han convertido en una herramienta poderosa para aplicaciones de procesamiento de video en tiempo real , como la conversión entre diversos estándares de video y velocidades de fotogramas ( NTSC a/desde PAL , NTSC a/desde formatos de televisión de alta definición (HDTV), etc.), el desentrelazado , la reducción de ruido de imagen, la compresión de video adaptativa y la mejora de imagen.
Una aplicación más común de SIMD se encuentra en los videojuegos : casi todas las consolas modernas desde 1998 han incorporado un procesador SIMD en su arquitectura. La PlayStation 2 fue singular porque una de sus unidades de punto flotante vectorial podía funcionar como un procesador de señal digital (DSP) autónomo, ejecutando su propio flujo de instrucciones, o como un coprocesador controlado por instrucciones de CPU convencionales. Las aplicaciones de gráficos 3D suelen prestarse bien al procesamiento SIMD, ya que dependen en gran medida de operaciones con vectores de cuatro dimensiones. Direct3D 9.0 de Microsoft ahora selecciona en tiempo de ejecución implementaciones específicas del procesador para sus propias operaciones matemáticas, incluyendo el uso de instrucciones compatibles con SIMD.
Un procesador posterior que utilizaba procesamiento vectorial es el procesador Cell de la PlayStation 3, desarrollado por IBM en colaboración con Toshiba y Sony . Este procesador emplea varios procesadores SIMD (una arquitectura de acceso a memoria no uniforme (NUMA), cada uno con almacenamiento local independiente y controlado por una CPU de propósito general) y está diseñado para manejar los enormes conjuntos de datos que requieren las aplicaciones de procesamiento de vídeo y 3D. Se diferencia de las arquitecturas de conjunto de instrucciones tradicionales por ser SIMD desde su concepción, sin registros escalares independientes.
Ziilabs produjo un procesador de tipo SIMD para su uso en dispositivos móviles, como reproductores multimedia y teléfonos móviles. [ 34 ]
ClearSpeed Technology, Ltd. y Stream Processors, Inc. ofrecen procesadores SIMD comerciales de mayor tamaño. El CSX600 (2004) de ClearSpeed cuenta con 96 núcleos, cada uno con dos unidades de coma flotante de doble precisión, mientras que el CSX700 (2008) tiene 192. Stream Processors está dirigida por el arquitecto informático Bill Dally . Su procesador Storm-1 (2007) contiene 80 núcleos SIMD controlados por una CPU MIPS .
Véase también
- Extensiones SIMD de transmisión , MMX , SSE2 , SSE3 , Extensiones vectoriales avanzadas , AVX-512
- Arquitectura del conjunto de instrucciones
- La taxonomía de Flynn
- SIMD dentro de un registro ( SWAR )
- Programa único, datos múltiples (SPMD)
- OpenCL
Referencias
- ↑ Flynn, Michael J. (septiembre de 1972). "Algunas organizaciones informáticas y su eficacia" (PDF) . IEEE Transactions on Computers . C-21 (9): 948–960 . doi : 10.1109/TC.1972.5009071 .
- ↑ "Copia archivada" (PDF) . Archivado del original (PDF) el 27/04/2024.
{{cite web}}: CS1 mantenimiento: copia archivada como título ( enlace ) - ↑ "MIMD1 - XP/S, CM-5" (PDF) .
- ↑ Conte, G.; Tommesani, S.; Zanichelli, F. (2000). "El largo y sinuoso camino hacia el procesamiento de imágenes de alto rendimiento con MMX/SSE". Actas del Quinto Taller Internacional IEEE sobre Arquitecturas de Computadoras para la Percepción de Máquinas . doi : 10.1109/CAMP.2000.875989 . hdl : 11381/2297671 . S2CID 13180531 .
- ↑ Lee, RB (1995). "Vídeo MPEG en tiempo real mediante descompresión por software en un procesador PA-RISC". Resumen de ponencias de Compcon '95. Tecnologías para la autopista de la información . págs. 186–192 . doi : 10.1109/CMPCON.1995.512384 . ISBN 0-8186-7029-0. S2CID 2262046 .
- ↑ "Análisis del rendimiento de AMD Zen 4 AVX-512 en la reseña del Ryzen 9 7950X" . www.phoronix.com . Consultado el 13 de julio de 2023 .
- ↑ Patterson, David; Waterman, Andrew (18 de septiembre de 2017). "Las instrucciones SIMD se consideran perjudiciales" . SIGARCH .
- ↑ Lam, Chester. "GCN, la modernización de la arquitectura de GPU de AMD" . chipsandcheese.com .
- ↑ Lam, Chester. "Hot Chips 34 – Arquitectura Instinct MI200 de AMD" . chipsandcheese.com .
Tanto en NVIDIA como en AMD, las instrucciones de matriz rompen el modelo de abstracción SIMT y funcionan a través de todo un frente de onda (o "warp" en NVIDIA).
- ↑ "Versión 2.3 27/08/2009 Guía de programación OpenCL para la arquitectura CUDA" (PDF) .
- ↑ RE: Velocidad de SSE2 , mostrando cómo se utiliza SSE2 para implementar algoritmos hash SHA
- ↑ Velocidad de Salsa20; software Salsa20 , que muestra un cifrado de flujo implementado usando SSE2.
- ↑ Asunto: hasta 1,4 veces el rendimiento de RSA usando SSE2 , mostrando RSA implementado usando una instrucción de multiplicación de enteros SSE2 que no es SIMD.
- ↑ "Funciones matemáticas de la biblioteca SIMD" . Stack Overflow . Consultado el 16 de enero de 2020 .
- ↑ "Extensiones vectoriales" . Uso de la colección de compiladores GNU (GCC) . Consultado el 16 de enero de 2020 .
- ↑ "Extensiones del lenguaje Clang" . Documentación de Clang 11. Consultado el 16 de enero de 2020 .
- ↑ "VcDevel/std-simd" . VcDevel. 6 de agosto de 2020.
- ↑ "RyuJIT: El compilador JIT de próxima generación para .NET" . 30 de septiembre de 2013.
- ↑ "El JIT finalmente propuso matrimonio. JIT y SIMD se casan" . 7 de abril de 2014.
- ↑ "JEP 338: API de vectores" .
- ↑ "Directivas SIMD" . www.openmp.org .
- ↑ "Tutorial pragma simd" . CilkPlus . 18 de julio de 2012. Archivado del original el 4 de diciembre de 2020. Consultado el 9 de agosto de 2020 .
- ↑ Kruse, Michael. "OMP5.1: Transformaciones de bucles" (PDF) .
- ↑ "simd-everywhere/simde: Implementaciones de conjuntos de instrucciones SIMD para sistemas que no las admiten de forma nativa" . GitHub . SIMD Everywhere. 6 de noviembre de 2025.
- ↑ Pharr, Matt; Mark, William R. (mayo de 2012). ispc: Un compilador SPMD para programación de CPU de alto rendimiento (PDF) . 2012 Innovative Parallel Computing (InPar). pp. 1–13 . doi : 10.1109/InPar.2012.6339601 .
- ↑ "Multiversión de funciones en GCC 6" . lwn.net . 22 de junio de 2016.
- ↑ "2045-target-feature" . El libro de RFC de Rust .
- ↑ "Uso transparente de paquetes de bibliotecas optimizados para la arquitectura Intel®" . Proyecto Clear Linux* . Consultado el 8 de septiembre de 2019 .
- ↑ John McCutchan. "Llevando SIMD a la web a través de Dart" (PDF) . Archivado del original (PDF) el 3 de diciembre de 2013.
- ↑ "SIMD en JavaScript" . 01.org . 8 de mayo de 2014.
- ↑ "tc39/ecmascript_simd: Tipo numérico SIMD para EcmaScript" . GitHub . Ecma TC39. 22 de agosto de 2019. Consultado el 8 de septiembre de 2019 .
- ↑ "Wasm 2.0 completado - WebAssembly" .
- ↑ "Uso de SIMD con WebAssembly" . Documentación de Emscripten 4.0.11-git (desarrollo) .
- ↑ "Procesador multimedia ZiiLABS ZMS-05 ARM 9" . ZiiLabs . Archivado del original el 18 de julio de 2011. Consultado el 24 de mayo de 2010 .
Enlaces externos
- Arquitecturas SIMD (2000)
- Descifrando el Pentium 3 (1999)
- Extensiones de vectores cortos en microprocesadores comerciales
- Artículo sobre la optimización del pipeline de renderizado de modelos animados mediante las extensiones Intel Streaming SIMD.
- "¡Yeppp!": biblioteca SIMD multiplataforma de código abierto del Instituto Tecnológico de Georgia.
- Introducción a la computación paralela del Laboratorio Nacional Lawrence Livermore (LLNL). Archivado el 10 de junio de 2013 en Wayback Machine.
- Clases de computadoras
- Procesamiento digital de señales
- La taxonomía de Flynn
- Computación paralela
- computación SIMD