Самый быстрый способ вычисления абсолютного значения с использованием SSE

Мне известны 3 метода, но, насколько я знаю, обычно используются только первые 2:

Маска от знака бит, используяandps или жеandnotps.

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

Вычтите значение от нуля до отрицания, а затем получите максимум оригинала и отрицайте.

Плюсы: фиксированная стоимость, потому что ничего не нужно для извлечения, как маска.Минусы: всегда будет медленнее, чем метод маски, если условия идеальны, и мы должны ждатьsubps завершить перед использованиемmaxps инструкция.

Подобно варианту 2, вычтите исходное значение от нуля до отрицания, но затем «поразрядно» и результат с оригиналом, используяandps, Я провел тест, сравнивая его со способом 2, и он, похоже, ведет себя идентично методу 2, за исключением случаев, когдаNaNс, в этом случае результат будет другимNaN чем результат метода 2.

Плюсы: должно быть немного быстрее, чем метод 2, потому чтоandps обычно быстрее чемmaxps.Минусы: это может привести к непреднамеренному поведению, когдаNaNс вовлечены? Может быть нет, потому чтоNaN все ещеNaN, даже если это другое значениеNaN, право?

Мысли и мнения приветствуются.

Ответы на вопрос(1)

Ваш ответ на вопрос