как получить такты для блока кода C ++ в Linux? Clock () результаты не имеют смысла.

Я пытаюсь проверить такты часов Pow ().

clock_t startTime = clock();
for (int ii = 0 ; ii < moreIter ; ++ii)
{
for (int i = 0 ; i < totalIte ; ++i)
P0Table[i] = pow( 1 + baseTable[i] + baseTable1[i]  , expTablr[i]);
}
clock_t endTime = clock();
clock_t powTime = endTime - startTime;

Если moreIter равно 1, а totalIte равно 5000, powTime всегда равен 0.

Я просто следовал:
http://www.cplusplus.com/reference/clibrary/ctime/clock/

Зачем ?

Любая помощь будет оценена.

0

Решение

Попробуйте использовать C ++ 11 <chrono> заголовок.

typedef std::chrono::high_resolution_clock Clock;

auto start = Clock::now();
/* do work */
auto end = Clock::now();

auto timeTaken = end - start;
3

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

Разрешение clock () не слишком высокое, вам может потребоваться больше итераций, чтобы получить ненулевой результат.

В Linux время процессора вычисляется по iirc в зависимости от настройки CONFIG_HZ, обычно 100-1000 Гц в эти дни. Таким образом, разрешение 1-10 мс — лучшее, что вы можете получить.

С помощью clock_gettime (…, CLOCK_MONOTONIC) вы можете получить время настенных часов с наносекундным разрешением, хотя, конечно, при таком разрешении вы можете принять во внимание, что сам вызов занимает немного времени (IIRC около 20 нс последний раз, когда я проверял) ,

2