Я пытаюсь измерить скорость CPU.I не уверен, насколько мой метод является точным. Основном, я попробовал пустой for
цикл со значениями как UINT_MAX
но программа завершается быстро, поэтому я попытался UINT_MAX * 3 и так далее ...Измерение тактовой частоты процессора
Тогда я понял, что компилятор оптимизирует расстояние петли, так что я добавил volatile
для предотвращения оптимизации. Следующая программа занимает примерно 1,5 секунды. Я хочу знать, насколько точным является этот алгоритм для измерения тактовой частоты. Кроме того, как я узнаю, сколько ядро задействовано в этом процессе?
#include <iostream>
#include <limits.h>
#include <time.h>
using namespace std;
int main(void)
{
volatile int v_obj = 0;
unsigned long A, B = 0, C = UINT32_MAX;
clock_t t1, t2;
t1 = clock();
for (A = 0; A < C; A++) {
(void)v_obj;
}
t2 = clock();
std::cout << (double)(t2 - t1)/CLOCKS_PER_SEC << std::endl;
double t = (double)(t2 - t1)/CLOCKS_PER_SEC;
unsigned long clock_speed = (unsigned long)(C/t);
std::cout << "Clock speed : " << clock_speed << std::endl;
return 0;
}
Поскольку современные процессоры имеют переменную тактовую частоту и несколько ядер; запуск такого рода тестов будет только измерять максимальную тактовую частоту 1 ядро. –
Поставив там «volatile», вы замедлили свою скорость до скорости памяти, побеждая цель измерения скорости процессора. –
@DavidSchwartz Итак, как именно вы предотвращаете оптимизацию? –