Una biblioteca rápida y ergonómica de tensores N-dimensionales en Nim, con backends para CPU, CUDA y OpenCL, orientada al cálculo numérico y al deep learning.
- Estrellas
- 1,451
- Forks
- 133
- Issues abiertos
- 22
- Último commit
- hace 19 horas
¿Qué es?
MatX es una biblioteca de computación numérica en C++20 que permite escribir código para arreglos con un estilo similar al de NumPy. Incluye broadcasting, slicing, reducciones, álgebra lineal, FFT, solvers y generación de números aleatorios. Las expresiones son lazy y solo se evalúan al ejecutarlas con un executor elegido, como el executor CUDA para GPU NVIDIA, un executor JIT o un executor multinúcleo para CPU.
Con MathDx habilitado, el executor CUDA JIT puede fusionar expresiones compatibles —incluidas operaciones compatibles de multiplicación de matrices, FFT, solver y generación de números aleatorios— en un solo kernel generado. Esto elimina temporales intermedios y lanzamientos de kernels adicionales. El proyecto es header-only, requiere una toolchain de C++20 y CUDA Toolkit para las compilaciones para GPU, y es compatible con Linux, además de ofrecer compatibilidad alfa con Windows.
La ejecución en CPU puede delegar las operaciones de FFT, BLAS y LAPACK a backends optimizados para CPU, como NVPL, FFTW, OpenBLAS y BLIS, cuando esas opciones se habilitan durante la compilación.
Funciones clave
- 01Arreglos similares a los de NumPy, con rango arbitrario, vistas, slicing y broadcasting.
- 02Expresiones lazy elemento a elemento que se ejecutan mediante executors intercambiables para GPU o CPU.
- 03Fusión de kernels JIT para operaciones compatibles de FFT, BLAS, solver y generación de números aleatorios.
- 04Uso optimizado de bibliotecas CUDA y backends para CPU, como NVPL, FFTW, OpenBLAS y BLIS.
- 05Integración header-only con CMake y empaquetado para Conan.
Casos de uso
- Portar código numérico al estilo NumPy de Python a C++ sin renunciar al rendimiento de la GPU.
- Crear pipelines de procesamiento de señales que combinen FFT con operaciones matemáticas elemento a elemento en GPU NVIDIA.
- Ejecutar operaciones de álgebra lineal por lotes o cálculos similares a la valoración de opciones en GPU o en CPU multinúcleo.
- Crear prototipos de kernels numéricos sin escribir manualmente el código de infraestructura de CUDA.
Inicio rápido
- 1
Añade el repositorio a tu proyecto de CMake y enlaza su destino de interfaz
add_subdirectory(path/to/MatX) - 2
Incluye la API en tu archivo de código fuente
#include <matx.h> - 3
Compila localmente los ejemplos y las pruebas de MatX
cmake -S . -B build -DMATX_BUILD_EXAMPLES=ON -DMATX_BUILD_TESTS=ON - 4
Compila el proyecto y ejecuta el conjunto de pruebas
cmake --build build -j
Antes de usarlo
- El ejecutor de CUDA requiere GPU NVIDIA; también se admite la ejecución en CPU.
- La fusión de kernels JIT es experimental y requiere la opción -DMATX_EN_MATHDX=ON junto con una forma o una operación compatible.
- Algunas reducciones y transformaciones en el host siguen ejecutándose en un solo hilo.
En colecciones
Temas
Preguntas frecuentes
- ¿Qué es MatX?
- Una biblioteca header-only de C++20 para expresiones de tensores al estilo NumPy que se ejecutan en GPU NVIDIA o en CPU multinúcleo, con fusión de kernels opcional. MatX es una biblioteca de computación numérica en C++20 que permite escribir código para arreglos con un estilo similar al de NumPy. Incluye broadcasting, slicing, reducciones, álgebra lineal, FFT, solvers y generación de números aleatorios. Las expresiones son lazy y solo se evalúan al ejecutarlas con un executor elegido, como el executor CUDA para GPU NVIDIA, un executor JIT o un executor multinúcleo para CPU.
- ¿MatX es gratuito? ¿Qué licencia tiene?
- MatX es open source bajo la licencia BSD-3-Clause. Revisa los términos de la licencia antes de usarlo en productos comerciales.
- ¿MatX sigue mantenido?
- Mantenimiento activo. El último commit de MatX fue el 5 nov 2026.
- ¿Para qué puedo usar MatX?
- Portar código numérico al estilo NumPy de Python a C++ sin renunciar al rendimiento de la GPU. Crear pipelines de procesamiento de señales que combinen FFT con operaciones matemáticas elemento a elemento en GPU NVIDIA. Ejecutar operaciones de álgebra lineal por lotes o cálculos similares a la valoración de opciones en GPU o en CPU multinúcleo. Crear prototipos de kernels numéricos sin escribir manualmente el código de infraestructura de CUDA.
- ¿Cómo se instala MatX?
- Añade el repositorio a tu proyecto de CMake y enlaza su destino de interfaz: add_subdirectory(path/to/MatX) Incluye la API en tu archivo de código fuente: #include <matx.h> Compila localmente los ejemplos y las pruebas de MatX: cmake -S . -B build -DMATX_BUILD_EXAMPLES=ON -DMATX_BUILD_TESTS=ON Compila el proyecto y ejecuta el conjunto de pruebas: cmake --build build -j
- ¿Dónde consigo MatX?
- El código fuente y las instrucciones de instalación están en GitHub: https://github.com/NVIDIA/MatX
Resumen generado por IA a partir del README del proyecto. Las estadísticas de GitHub se actualizan a diario.
Proyectos relacionados
Biblioteca de plantillas de CUDA C++ y DSL de Python para escribir kernels GEMM y de álgebra lineal de alto rendimiento en GPU NVIDIA.
NCCL es la biblioteca de NVIDIA con primitivas optimizadas de comunicación entre GPUs, como all-reduce y all-gather, para entrenamiento en uno o varios nodos.
Framework de cómputo GPU en C++ y Python basado en Vulkan, compatible con cargas de trabajo de propósito general en GPU de AMD, Qualcomm, NVIDIA y otros fabricantes.
Un agente de kernels de GPU que evoluciona por sí mismo y optimiza kernels de CUDA y CuTe DSL al convertir cada kernel aceptado en la siguiente referencia.
Libro y colección de código de código abierto con apuntes actuales para aprender CUDA y más de 200 kernels de HGEMM, GEMM con FP8/FP4 y Flash-Attention.