SSE Интс против поплавков практики - PullRequest
2 голосов
/ 25 февраля 2012

При работе с целыми числами и числами в SSE (AVX) целесообразно ли преобразовывать все числа в числа с плавающей точкой и работать только с числами?Поскольку после этого нам нужно всего несколько SIMD-инструкций, и все, что нам нужно, - это инструкции сложения и сравнения (<, <=, ==), которые, я надеюсь, должны полностью сохранить это преобразование.

1 Ответ

6 голосов
/ 25 февраля 2012

Разверните мои комментарии в ответ.

В основном вы взвешиваете следующий компромисс:

Палка с целым числом:

  • Integer SSE - это низкая задержка и высокая пропускная способность.(двойной выпуск на Sandy Bridge)
  • Ограничено 128-битной шириной SIMD.

Преобразовать в число с плавающей запятой:

  • Воспользуйтесь 256-битным AVX.
  • Более высокие задержки и только сложение / вычитание одного выпуска (на Sandy Bridge)
  • Включает начальные издержки преобразования.
  • Ограничивает ввод дляте, которые вписываются в float без потери точности.

Я бы сказал, что придерживаться целого числа на данный момент.Если вы не хотите дублировать код с float версиями, тогда это ваш вызов.

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


Обратите внимание, что я не упомянул о читабельности, поскольку погружение в ручную векторизацию, вероятно, означает, что производительность важнее.

...