Пик измеренного времени выполнения выражения C с использованием математики с плавающей запятой с использованием FPU - PullRequest
0 голосов
/ 21 января 2019

Поскольку мы работаем над расширенным кодом с плавающей запятой в C, я вижу резкие скачки времени для выражений, включающих функцию pow(double,double). Я не понимаю, почему конкретное число, переданное функции pow(), вызывает внезапный скачок во времени выполнения, хотя значения непрерывно меняются с разницей между каждым значением порядка 0,00001 или менее. Выражение похоже на (в модуле ядра, в настроенном Linux для жесткого реального времени) :

dbl_type_var0 непрерывно подается в цикле около 300.000, увеличиваясь с изменением порядка 1,0 или от 1 до 3 после десятичной точки, например 300,0,300,1,301,003,301,5,302.0,303.1,303.2 и т. Д., Которое вычисляется из другой функции.

double_type_var2 = 1005.0;
dbl_type_var4 = 34.1/6.15;
double_type_var1 = double_type_var2*pow(dbl_type_var0/303.15,dbl_type_var4);

Доступен процессор с плавающей запятой, который включил fp с использованием API-интерфейса потока, специфичного для RTOS, чтобы включить аппаратное обеспечение fp для соответствующего потока, то есть pthread_setfp_np(pthread_handle,bool_enable_disable). Время выполнения, измеренное с использованием аппаратного таймера для вышеприведенного выражения на платформе, примерно в 5 раз больше времени выполнения, когда скачок отсутствует. Во время оставшегося времени, т.е. с другими значениями, меньшими, чем 1 миллисекунда. Эта конкретная функция или строка кода вызывает проблемы с синхронизацией.

Мне нужна помощь в разрешении этого или понимании причины этого. Я включил исключения с плавающей запятой, и эта конкретная строка кода не вызвала никаких исключений. Время выполнения процессора / аппаратного обеспечения с плавающей запятой меняется так случайно для непрерывно меняющихся значений для одной и той же функции?

Заранее спасибо,

...