Я смотрю на библиотеку benchmarks of FFT и задаюсь вопросом, почему математика с двойной точностью будет быстрее, чем у одной точности (даже на 32-битном оборудовании).Одноточечная математика медленнее, чем двойная точность в FFTW?
ответ
Предполагая, что процессоры 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.
Я не думаю, что ваш комментарий верен, что инструкции i87 недоступны в режиме 64 бит. Компилятор может их не использовать, но это не значит, что они не могут использоваться. Я думаю, что GCC все еще может их использовать, но MSVC не работает в 64 бит. Кроме того, если вы используете SSE2 только для одного плавающего или двойного, то большинство операций (add, sub, mul, ...) имеют такую же скорость, как и i87. Это медленнее для некоторых математических операций, таких как sqrt. –
- 1. FFTW и длинная двойная точность
- 2. Двойная точность?
- 3. Двойная точность
- 4. Двойная точность в Fortran
- 5. функция корр (двойная точность, двойная точность) не существует - PostgresSQL
- 6. Двойная точность потеряна
- 7. Двойная точность - максимальное значение
- 8. Расширенная двойная точность
- 9. C# Высокая двойная точность
- 10. Двойная точность в функции FORMAT
- 11. Двойная математика Случайная в массиве с Javascript
- 12. Двойная точность: умножение больших чисел
- 13. Плавающая арифметика и двойная точность?
- 14. Поплавок и двойная точность в C
- 15. Высокая мощность и двойная точность
- 16. Точность поплавка и математика на разных системах
- 17. Двойная математика не знаю почему, .00000000x
- 18. Поплавок и двойная точность в C#
- 19. Двойная точность с плавающей точкой в Java
- 20. Поплавковая и двойная точность в тригонометрических функциях
- 21. Двойная точность кода CUDA быстрее, чем одиночная точность для фиксированного размера данных
- 22. Точная двойная точность путем правильного округления
- 23. fermi cuda двойная точность против C
- 24. Двойная точность странного поведения. Необходимость объяснения
- 25. Postgres - оператор не существует: двойная точность ~~ неизвестной
- 26. двойная точность и десятичные знаки перидока
- 27. Двойная точность числа месяцев между датами postgres
- 28. В MATLAB переменные ДЕЙСТВИТЕЛЬНО двойная точность по умолчанию?
- 29. Точность таймера OpenVMS, лучше, чем миллисекундная точность.
- 30. Почему точность тестирования выше, чем точность обучения
Где на этой странице она показывает двойную точность быстрее, чем одинарная точность? – talonmies
Ну, вы можете выбрать любой вариант использования. Скажите 1,65 ГГц IBM Power5 32-битный режим и сравните «комплекс с двойной точностью, 1d преобразований» с «комплексной точностью, 1d-преобразованиями». Вы можете видеть, что математика с двойной точностью немного лучше (быстрее), чем счетная часть. –
Я посмотрел на 64-битные результаты Core Duo - 1D-комплекс с одной точностью около 14000 пиков MFlops, двойная точность около 9500 MFlops. Итак, каков ваш вопрос снова? – talonmies