Могут ли длинные целые подпрограммы получить выгоду от SSE?

Я все еще работаю над процедурами для произвольных длинных целых чисел в C ++. До сих пор я реализовал сложение / вычитание и умножение для 64-битных процессоров Intel.

Все работает нормально, но мне было интересно, могу ли я немного ускорить это с помощью SSE. Я просмотрел документацию по SSE и списки инструкций процессора, но не смог найти ничего, что, по моему мнению, можно было бы использовать, и вот почему:

  • SSE имеет некоторые целочисленные инструкции, но большинство инструкций обрабатывают числа с плавающей запятой. Не похоже, что он был разработан для использования с целыми числами (например, есть ли целочисленное сравнение за меньшее?)

  • Идея SSE - это SIMD (одна и та же инструкция, несколько данных), поэтому он предоставляет инструкции для 2 или 4 независимых операций . Я, с другой стороны, хотел бы иметь что-то вроде 128-битного целочисленного сложения (128-битный ввод и вывод). Кажется, этого не существует. (Тем не менее? Может быть, в AVX2?)

  • Целочисленные сложения и вычитания не обрабатывают ни входных, ни выходных переносов. Так что делать это вручную очень громоздко (и, следовательно, медленно).

Мой вопрос: верна ли моя оценка или я что-то упустил? Могут ли длинные целочисленные подпрограммы получить выгоду от SSE? В частности, могут ли они помочь мне написать более быструю процедуру добавления, подпрограммы или умножения?

19
задан cxxl 24 December 2013 в 10:40
поделиться