프로세서 시간을 이해하는 데 어려움이 있습니다. 이 프로그램의 결과 :이 프로그램을 실행할 때마다 CPU 시간이 다른 이유는 무엇입니까?
#include <iostream>
#include <chrono>
// the function f() does some time-consuming work
void f()
{
volatile long double d;
int size = 10000;
for(int n=0; n<size; ++n)
for(int m=0; m<size; ++m)
d = n*m;
}
int main()
{
std::clock_t start = std::clock();
f();
std::clock_t end = std::clock();
std::cout << "CPU time used: "
<< (end - start)
<< "\n";
}
보인다 임의로 I, 왜 이러한 이산 값 놀랐다 우선 000 000 220 000210 (230) 사이에 변동한다. 그런 다음 std::clock()
은 approximate processor time 만 반환한다는 것을 알았습니다. 따라서 std::clock()
에 의해 반환되는 값은 10 000의 배수로 반올림됩니다. 이는 CPU 시간의 최대 차이가 20 000 (10 000 == 첫 번째 호출에서 반올림 오류 std::clock()
및 10 000이 두 번째).
f()
의 몸체에 int size = 40000;
으로 변경하면 반올림으로 설명 할 수없는 3 400 000 ~ 3 500 000 범위의 변동이 발생합니다.
:
CPU는 클럭 고정 된 수의 각 명령을 실행 에 틱 (또는 클럭 사이클)가 필요합니다. 시계가 빠를수록 더 많은 명령이 CPU가 초당 실행할 수 있습니다.
프로그램 (나는 나의 희망하는) 결정 인 경우입니다
, 완료하는 데 필요한 CPU 시간이 있어야한다 : 항상
- 지침의 수보다 같은
- 약간 높은 수행
내 프로그램은 적어도 3 * size * size
명령어를 수행해야하므로 실험 결과가 표시되지 않습니다. 내가 잘못하고있는 것을 설명해 주시겠습니까?
프로그램의 결과는 결정적 일 수 있지만, 실행 시간은 그렇지 않습니다. 왜냐하면 당신은 아마 당신의 상자에서 다른 것을 실행하고 있기 때문입니다. –
코드가 다른 단어와 완전히 분리되어 실행되지 않습니다. 이론 상으로는이 사소한 프로그램의 절반은 몇 세기 동안 실행이 느슨하게 중단 될 수 있습니다. – thecoshman
당신은 (a) 컴퓨터와 (b) 시간 공유 운영 체제가 어떻게 작동하는지 단순하게 예상 할 수 있습니다. –