Как увеличить вектор в AVX/AVX2
Я хочу использовать встроенные функции для увеличения элементов вектора SIMD. Самый простой способ, кажется, состоит в том, чтобы добавить 1 к каждому элементу, например:
(Примечание: vec_inc
было установлено в 1 раньше)
vec = _mm256_add_epi16 (vec, vec_inc);
Но существует ли какая-либо специальная инструкция для увеличения вектора? Как inc
в этой странице ? Или любым другим более простым способом ?1 ответ:
Инструкция
INC
не является инструкцией уровня SIMD, она работает на целочисленных скалярах. Как вы с Полом уже предлагали, самый простой способ-добавить1
к каждому элементу вектора, что можно сделать, добавив вектор1
s.Если вы хотите смоделировать внутреннюю функцию, вы можете реализовать свою собственную функцию:
inline __m256i _mm256_inc_epi16(__m256i a) { return _mm256_add_epi16(a, _mm256_set1_epi16(1)); }
Для подобных вопросов по встроенным устройствам x86 в будущем вы можете найти коллекцию встроенных устройств Intel ISA в руководстве по встроенным устройствам Intel. Также смотрите обширные ресурсы, задокументированные под тегами x86 и sse: