SIMD (instrucción única, datos múltiples), como sugiere el nombre, es una instrucción única que procesa múltiples datos. Las instrucciones SIMD son de naturaleza muy similar a un procesador vectorial, que puede realizar la misma operación en un conjunto de datos (también conocido como "vector de datos") en el controlador al mismo tiempo para lograr el paralelismo espacial. SIMD es la clave para que la CPU realice DLP (paralelismo de nivel de datos), y DLP completa el cálculo de acuerdo con el modo SIMD. SSE y el MMX más antiguo y el 3DNow! de AMD son conjuntos de instrucciones SIMD. Puede aumentar efectivamente la velocidad de las operaciones de punto flotante mediante el procesamiento de múltiples puntos flotantes en paralelo con la tecnología de múltiples datos de una sola instrucción y un solo ciclo de reloj.
1, más popular
Biblioteca de aprendizaje automático y procesamiento de imágenes C++ con el uso de SIMD: SSE, AVX, AVX-512 para x86/x64, VMX (Altivec) y VSX (Power7) para PowerPC, NEON para ARM.
https://github.com/ermig1979/Simd
http://ermig1979.github.io/Simd/
#include <opencv2/core/core.hpp>
#define SIMD_OPENCV_ENABLE
#include "Simd/SimdLib.hpp"
cv::Point, cv::Size <--> Simd::Point
cv::Rect <--> Simd: :Rectángulo
cv::Mat <--> Simd::View
estándar::experimental::simd para GCC [ISO/IEC TS 19570:2018]
https://github.com/VcDevel/std-simd
Clases vectoriales SIMD para C++
https://github.com/VcDevel/Vc
https://web-docs.gsi.de/~mkretz/Vc-master/
MIPP es un contenedor portátil para instrucciones SIMD escritas en C++11. Es compatible con NEON, SSE, AVX y AVX-512.
https://github.com/aff3ct/MIPP
Envoltorios de C++ para SIMD intrínsecos y funciones matemáticas optimizadas y paralelizadas (SSE, AVX, NEON, AVX512)
https://github.com/xtensor-stack/xsimd
https://xsimd.readthedocs.io/en/latest/index.html
almohada
https://github.com/python-pillow/Almohada
almohada-simd
https://github.com/uploadcare/pillow-simd
2. Relativamente impopular
Biblioteca SIMD de bajo nivel de C++ de solo encabezado portátil
https://github.com/p12tic/libsimdpp
Biblioteca de vectorización Agenium Scale para CPU y GPU
https://github.com/agenium-scale/nsimd
UME::SIMD Una biblioteca para vectorización simd explícita.
https://github.com/edanor/umesimd
3. Envasado y reenvasado
El fractal de Mandelbrot: implementaciones secuenciales y SIMD.
https://gitlab.inria.fr/acassagn/mandelbrot
VecCore es una capa de abstracción simple sobre otras bibliotecas de vectorización.
https://gitlab.cern.ch/VecGeom/VecCore
4. Otras aplicaciones
Implementaciones de conjuntos de instrucciones SIMD para sistemas que no los admiten de forma nativa.
https://github.com/simd-everywhere/simde
Biblioteca SIMD para evaluar funciones elementales, libm vectorizado y DFT
https://github.com/shibatch/sleef
Biblioteca de ruido C++ SIMD
https://github.com/Auburn/FastNoiseSIMD
5. Tutorial SIMD
---
Intel CPU指令集
https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html
《Programación paralela moderna con C++ y lenguaje ensamblador: desarrollo SIMD X86 usando AVX, AVX2 y AVX-512 1ra ed. Edición"
"Método de programación paralela y práctica de optimización"
"Diseño de algoritmos paralelos y optimización del rendimiento"