Я сталкивался с этой точкой зрения, что ARMv8 теперь поддерживает векторный регистр переменной длины из 128 bits to 2048 bits
(scalable vector extension SVE
).
Всегда полезно иметь большую ширину регистра для достижения параллелизма на уровне данных. Но на каком основании нам нужно выбрать размер регистра от 128 до 2048 бит для достижения максимальной производительности?
Например, я хочу выполнить фильтрацию Собеля с маской 3×3 на изображении 1920 X 1080 Y. Какую ширину регистра мне нужно выбрать?
Расширение масштабируемого вектора — это модуль для состояния выполнения aarch64, который расширяет набор инструкций A64 и ориентирован на высокопроизводительные вычисления, а не на носители, поскольку у вас есть NEON.
Ширина регистров будет определяться разработчиком / производителем аппаратного обеспечения в зависимости от того, что пытается реализовать / реализовать эта реализация. Возможная длина вектора: 128 256 384 512 640 768 896 1024 1152 1280 1408 1536 1664 1792 1920 2048.
С точки зрения программистов, модель программирования — Vector Length Agnostic, это означает, что одно и то же приложение будет работать с реализациями с разной шириной регистров (Vector length).
Спецификация вышла, однако нет аппаратного обеспечения с внедренным SVE. В настоящее время вы можете использовать эмулятор инструкций ARM (Арми) для запуска ваших программ.
Поэтому, отвечая на ваш вопрос, если вы не производите аппаратное обеспечение, вам не нужно выбирать какую-либо конкретную длину вектора, поскольку она будет варьироваться от одной реализации к другой.
Теперь, если вы тестируете с помощью armie, вы можете выбрать, какой хотите.
SVE по сути неявно увеличивает индексы цикла для вас на основе аппаратно определенной векторной ширины, поэтому вам не нужно об этом беспокоиться.
Проверьте разработанное Daxpy
пример на: https://www.rico.cat/files/ICS18-gem5-sve-tutorial.pdf чтобы понять, что это значит более подробно, и это минимальный исполняемый пример с утверждением.