2013-11-22 3 views
0

Я смотрю на библиотеку benchmarks of FFT и задаюсь вопросом, почему математика с двойной точностью будет быстрее, чем у одной точности (даже на 32-битном оборудовании).Одноточечная математика медленнее, чем двойная точность в FFTW?

+0

Где на этой странице она показывает двойную точность быстрее, чем одинарная точность? – talonmies

+0

Ну, вы можете выбрать любой вариант использования. Скажите 1,65 ГГц IBM Power5 32-битный режим и сравните «комплекс с двойной точностью, 1d преобразований» с «комплексной точностью, 1d-преобразованиями». Вы можете видеть, что математика с двойной точностью немного лучше (быстрее), чем счетная часть. –

+2

Я посмотрел на 64-битные результаты Core Duo - 1D-комплекс с одной точностью около 14000 пиков MFlops, двойная точность около 9500 MFlops. Итак, каков ваш вопрос снова? – talonmies

ответ

1

Предполагая, что процессоры Intel - все зависит от компилятора. Компилируя 32-битные приложения, вы можете использовать нормальную плавучую точку i87, где одинарная и двойная точность имеют одинаковую скорость. Или вы можете выбрать SSE для SP и SSE2 для DP, где SSE (4 слова в регистрах) в два раза быстрее SSE2 (2 слова на регистр). Компиляция для 64 бит, инструкции i87 недоступны. Затем плавающая точка всегда скомпилирована для использования SSE/SSE2. Либо из-за компилятора, либо конкретной программы они могут быть скомпилированы как SIMD (Single Instruction Multiple Data - 4/2 слова за раз) или SISD (одиночные данные с использованием одного слова для каждого регистра). Тогда, я полагаю, SP и DP будут иметь одинаковую скорость, а код может быть медленнее 32-битных компиляций.

Использование данных из ОЗУ и, возможно, кэш-памяти, может быть ограничено скоростью шины, где SP будет быстрее, чем DP. Если код похож на мои тесты FFT, это зависит от пропущенного последовательного чтения и записи. Затем скорость зависит от данных, которые считываются в пакетах не менее 64 байтов, где SP, вероятно, будет немного быстрее.

Такие функции, как триггерные функции, часто вычисляются в DP. Затем SP немного медленнее из-за преобразования DP в SP.

+0

Я не думаю, что ваш комментарий верен, что инструкции i87 недоступны в режиме 64 бит. Компилятор может их не использовать, но это не значит, что они не могут использоваться. Я думаю, что GCC все еще может их использовать, но MSVC не работает в 64 бит. Кроме того, если вы используете SSE2 только для одного плавающего или двойного, то большинство операций (add, sub, mul, ...) имеют такую ​​же скорость, как и i87. Это медленнее для некоторых математических операций, таких как sqrt. –

Смежные вопросы