Разверните мои комментарии в ответ.
В основном вы взвешиваете следующий компромисс:
Палка с целым числом:
- Integer SSE - это низкая задержка и высокая пропускная способность.(двойной выпуск на Sandy Bridge)
- Ограничено 128-битной шириной SIMD.
Преобразовать в число с плавающей запятой:
- Воспользуйтесь 256-битным AVX.
- Более высокие задержки и только сложение / вычитание одного выпуска (на Sandy Bridge)
- Включает начальные издержки преобразования.
- Ограничивает ввод дляте, которые вписываются в
float
без потери точности.
Я бы сказал, что придерживаться целого числа на данный момент.Если вы не хотите дублировать код с float
версиями, тогда это ваш вызов.
Единственный раз, когда я видел, как эмуляция целых чисел с плавающей точкой становится быстрее, это когда вам нужно делить.
Обратите внимание, что я не упомянул о читабельности, поскольку погружение в ручную векторизацию, вероятно, означает, что производительность важнее.