Я открыл PR который добавляет реализацию срезов и изменяет API индексации тензоров. Он вносит существенные изменения в движок обработки тензоров и затрагивает больше 150 файлов. Я начинал реализацию вручную потом использовал coding агентов.
Буду благодарен сообществу за помощь с code review, комментарии и предложения. Также есть возможность посмотреть какой С++ код сегодня генерирую агенты с использованием моделей Qwen Coder 3.5, GLM-5.1, Grok Code fast 1.
Основные изменения:
Изменено внутреннее представление тензоров для поддержки срезов:
- Добавлено смещение(offset) для буфера данных
- Добавлены смещения по размерностям(strides)
API индексации тензоров:
- Тип Slice для гибкого слайсинга с параметрами начала, конца и шага
- Тип Index для целочисленной индексации (сокращение размерности)
- Поддержка Ellipsis и None для продвинутых паттернов индексации
- Синтаксис, совместимый с NumPy и PyTorch: tensor[1:5], tensor[::2], tensor[:, 1]
Операции сбора (gather) для копирования данных с учётом срезов:
- SIMD ядра и шейдеры для Vulkan
- Поддержка отрицательных индексов для обоих бэкендов
GEMM API вместо matmul:
- BLAS совместимый API для CPU и GPU
- Добавлены параметры alpha и beta
Python-привязки:
- Полная поддержка срезов через getitem и setitem
- Автоматическое создание представлений и управление непрерывностью
- Многомерная индексация с правильной обработкой форм
Пример кода:
import adept as ad
# Создание тензора
t = ad.Tensor([1, 2, 3, 4, 5])
# Базовый срез
sliced = t[1:4]
# Многомерная индексация
matrix = ad.Tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
row = matrix[1]
col = matrix[:, 1]