Почему библиотека cmath
такая медленная с точки зрения округления (round
, ceil
, floor
, trunc
)?
Речь идет о коэффициенте 10 по сравнению с SSE (roundsd
, cvtsd2si
) или старым добрым FPU
(FIST(P)
), причем последнее немного медленнее (20-25%). ), приближаясь с увеличением тактовой частоты.
Я читал статью Л. де Сораса , и его описание довольно ясно. Непосредственный параметр rounds (p) d позволяет выбрать любую возможную схему. Проверяя дизассемблирование round
, я не смог обнаружить ни одной команды LDMXCSR, только CVTTSS2SI (скалярное преобразование в int / w trun c).
Итак, почему на 1000% дольше время ожидания действительно часто необходимой функции?