Разница в скорости между назначением значения функции и не назначением переменной

Так что это действительно загадка для меня. Я измеряю время своей синусоидальной функции и сравниваю ее со стандартным грехом (). Хотя есть странное поведение. Когда я использую функции просто как:

sin(something);

Я получаю среднее время, как (измерения 1000000 звонков за 10 раундов) 3,1766 мс для стандартной функции синуса и 51,5589 мс для моей реализации.
Но когда я использую что-то вроде этого:

float result = sin(something);

Я получаю внезапно 76,5621 мс для стандартного греха () и 49,3675 мс для моего. Я понимаю, что для присвоения значения переменной требуется некоторое время, но почему это не добавляет времени и моему синусу? Это более или менее то же самое, в то время как стандартный быстро растет.

РЕДАКТИРОВАТЬ:
Мой код для измерения:

ofstream file("result.txt",ios::trunc);
file << "Measured " << repeat << " rounds with " << callNum << " calls in each \n";
for (int i=0;i<repeat;i++)
{
auto start = chrono::steady_clock::now();

//call the function here dattebayo!
for (int o=0; o<callNum;o++)
{
double g = sin((double)o);
}

auto end = chrono::steady_clock::now();

auto difTime = end-start;
double timeD = chrono::duration <double,milli> (difTime).count();
file << i << ": " << timeD << " ms\n";
sum += timeD;
}

0

Решение

В любом современном компиляторе компилятор будет знать такие функции, как sin, cos, printf("%s\n", str) и многое другое, и либо перевести в более простую форму [константа, если значение является константой, printf("%s\n", str); становится puts(str);] или полностью удалить [если известно, что сама функция не имеет «побочных эффектов», другими словами, она ПРОСТО вычисляет возвращаемое значение и не оказывает влияния на систему другими способами].

Это часто происходит даже для стандартной функции, даже когда компилятор находится в режиме низкого уровня или даже не в режимах оптимизации.

Вы должны убедиться, что результат вашей функции ДЕЙСТВИТЕЛЬНО используется для ее вызова в оптимизированном режиме. Добавить возвращаемые значения вместе в цикле …

3

Другие решения


По вопросам рекламы [email protected]