Я все еще работаю над подпрограммами для произвольных длинных целых чисел в С++. До сих пор я реализовал сложение/вычитание и умножение для 64-битных процессоров Intel.
Все работает отлично, но я задавался вопросом, могу ли я немного ускорить его с помощью SSE. Я просмотрел списки инструкций SSE и процессоров, но я не смог найти ничего, что, я думаю, могу использовать, и вот почему:
-
SSE имеет несколько целых инструкций, но большинство команд обрабатывают с плавающей запятой. Не похоже, что он был предназначен для использования с целыми числами (например, существует ли целочисленное сравнение для меньшего?)
-
Идея SSE - это SIMD (та же инструкция, несколько данных), поэтому она предоставляет инструкции для 2 или 4 независимых операций. Я, с другой стороны, хотел бы иметь что-то вроде 128-битного целочисленного add (128-битный ввод и вывод). Это, похоже, не существует. (Тем не менее? Возможно, в AVX2?)
-
Целочисленные дополнения и вычитания не обрабатывают ни ввод, ни вывод. Поэтому он очень громоздкий (и, следовательно, медленный), чтобы сделать это вручную.
Мой вопрос: моя оценка правильная или есть что-то, что я упустил? Могут ли длинные целые процедуры использовать SSE? В частности, могут ли они помочь мне написать более быструю процедуру добавления, sub или mul?