Я пытался оптимизировать числовую программу и столкнулся с чем-то загадочным. Я зациклен на коде, который выполняет тысячи операций с плавающей запятой, из которых 1 вызов pow
- тем не менее, этот вызов занимает 5% времени ... Это не обязательно критическая проблема, но это странно, поэтому я ' Я хотел бы понять, что происходит.
Когда я профилировал сообщения об ошибках кэша, профилировщик VS.NET 2010RC сообщает, что практически все ошибки кэша происходят в std::pow
... так ... что с этим? Есть ли более быстрая альтернатива? Я пытался powf
, но это только немного быстрее; он все еще ответственен за ненормальное количество кешей.
Почему базовая функция, такая как pow, вызывает ошибки кэширования?
Редактировать: это не управляемый код. /Oi
встроенные функции включены, но компилятор может по своему усмотрению игнорировать это. Замена pow(x,y)
на exp(y*log(x))
имеет аналогичную производительность - только теперь все пропуски кэша находятся в функции журнала.