Я пытаюсь измерить скорость процессора. Я не уверен, насколько точен мой метод. По сути, я попробовал пустой цикл 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;
}
volatile
, вы замедлили свой цикл до скорости памяти, превзойдя свою цель измерения скорости процессора. - person David Schwartz   schedule 19.06.2016