Команда archsimd
Пакет archsimd предоставляет доступ к SIMD-операциям, специфичным для архитектуры.
Это низкоуровневый пакет, предоставляющий доступ к функциям, зависящим от аппаратного обеспечения. В настоящее время поддерживается AMD64.
Этот пакет является экспериментальным и не подпадает под обещание совместимости Go 1. Он доступен только при сборке с установленной переменной окружения GOEXPERIMENT=simd.
Векторные типы и операции
Векторные типы определены в виде структур, например Int8x16 и Float64x8, соответствующих векторным регистрам аппаратного обеспечения. На AMD64 поддерживаются векторы размером 128, 256 и 512 бит.
Типы масок определены аналогичным образом, например Mask8x16, и представлены как непрозрачные типы, скрывающие различия в базовых представлениях. Маску можно преобразовать в соответствующий целочисленный векторный тип и обратно, а также в битовую маску и обратно.
Операции в основном определены как методы векторных типов. Большинство из них являются встроенными функциями компилятора и напрямую соответствуют аппаратным инструкциям.
К распространённым операциям относятся:
- Загрузка/сохранение: загрузка вектора из памяти или сохранение вектора в памяти.
- Арифметические операции: сложение, вычитание, умножение и т. д.
- Побитовые операции: And, Or, Xor и т. д.
- Сравнение: Equal, Greater и т. д., возвращающие маску.
- Преобразование: преобразование между различными векторными типами.
- Выбор и перестановка элементов: GetElem, Permute и т. д.
- Маскирование: Masked, Merge.
Компилятор распознаёт определённые последовательности операций и может оптимизировать их, заменяя более производительными инструкциями. Например, на AVX512 операция Add, за которой следует Masked, может быть оптимизирована до инструкции сложения с маской. Поэтому не все аппаратные инструкции доступны через API.
Проверка возможностей процессора
Пакет предоставляет глобальные переменные для проверки доступных во время выполнения возможностей процессора. Например, на AMD64 переменная X86 предоставляет методы для проверки поддержки AVX2, AVX512 и т. д. Перед использованием соответствующих векторных операций рекомендуется проверять возможности процессора.
Примечания
- Этот пакет непереносим, поскольку доступные типы и операции зависят от целевой архитектуры. Не рекомендуется предоставлять SIMD-типы, определённые в этом пакете, в публичных API.
- Для повышения производительности рекомендуется использовать векторные типы непосредственно как значения. Не рекомендуется брать адрес векторного типа, выделять для него память в куче или включать его в составной тип.
Ошибки
- ☞
Вызов векторной функции или метода с помощью reflect Call может не работать.
Подкаталоги
| Имя | Краткое описание |
|---|---|
| .. | |
© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/simd/archsimd/