Я заметил, что компиляторы генерируют код, нацеленный на регистры SIMD, каждый раз, когда используется double
арифметика. Это относится как к неоптимизированному, так и к оптимизированному коду. Означает ли это, что модуль x87 FP можно считать устаревшим и использовать только для обеспечения обратной совместимости?
Я также заметил, что другие «популярные» платформы также полагаются на свои соответствующие реализации SIMD, а не на FP, спроектированный как стек.
Кроме того, реализация SIMD, как правило, имеет ширину не менее 128 бит, поэтому мне интересно, означает ли это, что (внутренняя) точность операций выше, чем для модуля x87 FP?
Я также задаюсь вопросом о производительности, пропускной способности и задержке, учитывая, что SIMD был задуман с учетом векторного выполнения, поэтому мне интересно, как они справляются со скалярами.
double
и имеет только 64 бита? - person   schedule 09.10.2014double
математики с x87 всегда вызывало проблемы. Java не удалось включить типlong double
. Однако ни в одной из этих катастроф нельзя винить дизайн x87; использованиеlong double
математики в программах на C было достаточно простым (хотя и не полностью переносимым), а Java не существовало до тех пор, пока не появился 387. Я согласен, что стигма, все еще связанная с математикой с плавающей запятой, невелика. - person tmyklebu   schedule 09.10.2014long double
и укажите, что все промежуточные вычисления будут выполняться какlong double
, и любая утечка регистра требуется для сохранения длинных двойных значений. Я думаю, это то, что Turbo Pascal делал в 1980-х годах, и это работало очень хорошо. Даже еслиlong double
места хранения обычно должны быть дополнены до 12 или 16 байтов (язык/фреймворк может предлагать структуры, которые, например, объединяют одно или три значения типаlong double
со значением типаuint16
для общего размера 12 или 32 байтов) . - person supercat   schedule 14.10.2014float
операций с точностьюfloat
иdouble
операций с точностьюdouble
, и в большинстве случаев это будет так же быстро или даже быстрее, чем попытки выполнить операции с несколькими уровнями точности. - person supercat   schedule 14.10.2014d1=d2+d3;
с использованием толькоdouble
может быть немного более точной, чем использование расширенной точности и округления, использование расширенной точности дляd1=d2+d3+d4;
часто намного точнее, чем использованиеdouble
без суммирования Кахана или других подобных алгоритмов, а на x87 будет быть намного быстрее, чем использование суммирования Каана для получения точных результатов, используя толькоdouble
. - person supercat   schedule 14.10.2014return fpexpr;
) - person Pascal Cuoq   schedule 14.10.2014