Как вы получаете максимальную скорость из SSE? - PullRequest
5 голосов
/ 30 июля 2011

Каковы наилучшие настройки для таких вещей, как MXCSR ? Какой режим округления самый быстрый? На каких процессорах? Быстрее ли включить сигнализацию NaN, чтобы я получал информацию, когда результатом вычислений является nan, или это вызывает замедление в вычислениях, отличных от NaN?

В итоге, как вы получаете максимальную скорость из узких внутренних контуров SSE?

Любые рекомендации по скорости с плавающей точкой x87 также приветствуются.

Ответы [ 2 ]

6 голосов
/ 30 июля 2011

Используйте режимы Flush-to-zero и Denormals-are-zero: они предназначены для скорости с высокой точностью, которую вы, вероятно, не заметите.

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

Сигнальные NaN не замедляют вычисления не-NaN.

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

3 голосов
/ 30 июля 2011

Если в ваших вычислениях могут возникать ненормальные значения, и точность очень малых значений не важна для ваших вычислений, то обязательно включите FZ и DAZ (один раз, в начале вашего вычисления; не касайтесь MXCSR больше чем нужно). Они не будут иметь никакого значения, если в ваших вычислениях не используются ненормальные значения, но если это так, разница может быть весьма значительной.

Ни один из других битов MXCSR никак не влияет на производительность.

Единственный совет по производительности, связанный с x87: не используйте устройство x87. Вместо этого делайте свои вычисления в SSE, когда это возможно.

...