Быстрая и удобная библиотека N-мерных тензоров на Nim с бэкендами для CPU, CUDA и OpenCL, предназначенная для численных вычислений и глубокого обучения.
- Звёзды
- 1,451
- Форки
- 133
- Открытые issues
- 22
- Последний коммит
- 12 часов назад
Что это?
MatX — библиотека для численных вычислений на C++20. Она позволяет писать код для массивов в стиле, близком к NumPy, и поддерживает broadcasting, срезы, редукции, линейную алгебру, FFT, решатели и генерацию случайных чисел. Выражения вычисляются лениво — только при запуске через выбранный исполнитель, например CUDA executor для GPU NVIDIA, JIT executor или многопоточный исполнитель на CPU.
При включённом MathDx CUDA JIT executor может объединять совместимые выражения в одно сгенерированное ядро, в том числе поддерживаемые операции матричного умножения, FFT, решателей и генерации случайных чисел. Это избавляет от промежуточных временных массивов и дополнительных запусков ядер. Проект распространяется только в виде заголовочных файлов; для сборки с поддержкой GPU требуются toolchain с поддержкой C++20 и CUDA Toolkit. Поддерживается Linux, для Windows доступна alpha-версия.
При выполнении на CPU операции FFT, BLAS и LAPACK можно направлять в оптимизированные CPU-библиотеки, например NVPL, FFTW, OpenBLAS и BLIS, если соответствующие параметры включены во время сборки.
Ключевые возможности
- 01Массивы в стиле NumPy с произвольным рангом, представлениями, срезами и broadcasting.
- 02Ленивые поэлементные выражения, выполняемые через взаимозаменяемые исполнители для GPU или CPU.
- 03JIT-слияние ядер для поддерживаемых операций FFT, BLAS, решателей и генерации случайных чисел.
- 04Оптимизированное использование библиотек CUDA и CPU-библиотек, включая NVPL, FFTW, OpenBLAS и BLIS.
- 05Интеграция в виде заголовочной библиотеки, сборка с CMake и пакеты Conan.
Сценарии использования
- Перенос численного кода в стиле NumPy из Python на C++ с сохранением высокой производительности на GPU.
- Создание конвейеров обработки сигналов, объединяющих FFT и поэлементные вычисления на GPU NVIDIA.
- Выполнение пакетных операций линейной алгебры или вычислений для оценки опционов на GPU либо многопоточных CPU.
- Прототипирование численных ядер без необходимости вручную настраивать низкоуровневую инфраструктуру CUDA.
Быстрый старт
- 1
Добавьте репозиторий в проект CMake и подключите его интерфейсную цель
add_subdirectory(path/to/MatX) - 2
Подключите API в исходном файле
#include <matx.h> - 3
Соберите примеры и тесты MatX локально
cmake -S . -B build -DMATX_BUILD_EXAMPLES=ON -DMATX_BUILD_TESTS=ON - 4
Скомпилируйте проект и запустите набор тестов
cmake --build build -j
Что важно знать
- Для исполнителя CUDA требуются GPU NVIDIA; также поддерживается выполнение на CPU.
- Слияние JIT-ядер — экспериментальная функция; для неё нужна опция -DMATX_EN_MATHDX=ON и поддерживаемая форма или операция.
- Некоторые редукции и преобразования на хосте по-прежнему выполняются в одном потоке.
В подборках
Темы
Частые вопросы
- Что такое MatX?
- Header-only библиотека на C++20 для тензорных выражений в стиле NumPy, работающих на GPU NVIDIA или многопоточных CPU, с поддержкой слияния ядер. MatX — библиотека для численных вычислений на C++20. Она позволяет писать код для массивов в стиле, близком к NumPy, и поддерживает broadcasting, срезы, редукции, линейную алгебру, FFT, решатели и генерацию случайных чисел. Выражения вычисляются лениво — только при запуске через выбранный исполнитель, например CUDA executor для GPU NVIDIA, JIT executor или многопоточный исполнитель на CPU.
- MatX можно использовать бесплатно? Какая у него лицензия?
- MatX распространяется с открытым исходным кодом под лицензией BSD-3-Clause. Перед использованием в коммерческих продуктах проверьте условия лицензии.
- MatX всё ещё поддерживается?
- Активно поддерживается. Последний коммит в MatX — 5 нояб. 2026 г..
- Для чего можно использовать MatX?
- Перенос численного кода в стиле NumPy из Python на C++ с сохранением высокой производительности на GPU. Создание конвейеров обработки сигналов, объединяющих FFT и поэлементные вычисления на GPU NVIDIA. Выполнение пакетных операций линейной алгебры или вычислений для оценки опционов на GPU либо многопоточных CPU. Прототипирование численных ядер без необходимости вручную настраивать низкоуровневую инфраструктуру CUDA.
- Как установить MatX?
- Добавьте репозиторий в проект CMake и подключите его интерфейсную цель: add_subdirectory(path/to/MatX) Подключите API в исходном файле: #include <matx.h> Соберите примеры и тесты MatX локально: cmake -S . -B build -DMATX_BUILD_EXAMPLES=ON -DMATX_BUILD_TESTS=ON Скомпилируйте проект и запустите набор тестов: cmake --build build -j
- Где скачать MatX?
- Исходный код и инструкции по установке — на GitHub: https://github.com/NVIDIA/MatX
Описание создано ИИ на основе README проекта. Статистика GitHub обновляется ежедневно.
Похожие проекты
Библиотека шаблонов CUDA C++ и DSL для Python для написания высокопроизводительных GEMM-ядер и других ядер линейной алгебры на GPU NVIDIA.
NCCL — библиотека NVIDIA с оптимизированными примитивами обмена данными между GPU, такими как all-reduce и all-gather, для обучения на одном или нескольких узлах.
C++- и Python-фреймворк для GPU-вычислений на базе Vulkan, запускающий задачи общего назначения на GPU AMD, Qualcomm, NVIDIA и других производителей.
Агент для саморазвития GPU-ядер, оптимизирующий ядра CUDA и CuTe DSL: каждое принятое ядро становится новым эталоном.
Header-only библиотека C++ с ускорением на CUDA и Python-обёртками для переиспользуемых примитивов машинного обучения, линейной алгебры и информационного поиска на GPU NVIDIA.