Я принимаю исполнение функции sqrt на AArch64 по академическим причинам. Код для одного поплавка sqrtf функция:Выполнение функции sqrt на AArch64
fsqrt s0, s0
ret
Код для двойного поплавка квадратный корень функции:
fsqrt d0, d0
ret
Я имею в виду теоретические латентности для FSQRT здесь: http://infocenter.arm.com/help/topic/com.arm.doc.uan0015b/Cortex_A57_Software_Optimization_Guide_external.pdf
Одноместный sqrt кажется 2x лучше, чем двойной.
Но, в то время как профилирование я получаю эти цифры:
326 ms sqrt
82 ms sqrtf
Я везу раз для такого же числа циклов. Из этих чисел sqrtf кажется в 4 раза лучше.
Я не могу найти правильную причину, почему? Невозможно найти правильные объяснения о том, как на самом деле эта инструкция в Интернете.
Некоторая информация или направление на это было бы действительно полезно.
Не забудьте изменить выравнивание инструкции и снова измерить, повторите по мере необходимости. Если вы пытаетесь измерить один экземпляр инструкции, вряд ли вы добьетесь успеха. –
@old_timer Я измеряю производительность для миллиона вызовов функций в цикле. Это не должно быть проблемой. –