Самый быстрый способ вычисления абсолютного значения с использованием SSE
Мне известны 3 метода, но, насколько я знаю, обычно используются только первые 2:
Маска от знака бит, используяandps
или жеandnotps
.
Вычтите значение от нуля до отрицания, а затем получите максимум оригинала и отрицайте.
Плюсы: фиксированная стоимость, потому что ничего не нужно для извлечения, как маска.Минусы: всегда будет медленнее, чем метод маски, если условия идеальны, и мы должны ждатьsubps
завершить перед использованиемmaxps
инструкция.Подобно варианту 2, вычтите исходное значение от нуля до отрицания, но затем «поразрядно» и результат с оригиналом, используяandps
, Я провел тест, сравнивая его со способом 2, и он, похоже, ведет себя идентично методу 2, за исключением случаев, когдаNaN
с, в этом случае результат будет другимNaN
чем результат метода 2.
andps
обычно быстрее чемmaxps
.Минусы: это может привести к непреднамеренному поведению, когдаNaN
с вовлечены? Может быть нет, потому чтоNaN
все ещеNaN
, даже если это другое значениеNaN
, право?Мысли и мнения приветствуются.