Hier ist der Code zur Berechnung der CPU-Zeit, aber es ist nicht korrekt, denn wenn ich gettimeofday verwenden gibt es mir die richtige Zeit in ms. Ich führe meinen Prozess auf einem Prozessor und seine Uhr läuft mit 800 MHz. Mein Wissen über RDTSC ist wie folgt:Sekunden Berechnung mit Rdtsc
- RDTSC gibt die Anzahl der Zyklen
diese Anzahl der Zyklen kann man die CPU-Zeit gegeben die Taktrate (800 MHz)
unsigned long long a,b; unsigned long cpuMask; cpuMask = 2; // bind to cpu 1 if(!sched_setaffinity(0, sizeof(cpuMask), &cpuMask)) fprintf(stderr,"Running on one core!\n"); setpriority(PRIO_PROCESS, 0, 20); struct timeval t1, t2; double elapsedTime; int i=0; // start timer gettimeofday(&t1, NULL); a = rdtsc(); sleep(20); //for(;i<1000000;i++); //fprintf(stderr,"%d\n",i); gettimeofday(&t2, NULL); b = rdtsc(); printf("a:%llu\n", a); printf("b:%llu\n", b); double val = ((b-a)/800000); fprintf(stderr,"Time 1st through rdtsc in msec:%f\n\nSubtraction:%llu\n\n", val,b-a); elapsedTime = (t2.tv_sec - t1.tv_sec) * 1000.0; // sec to ms elapsedTime += (t2.tv_usec - t1.tv_usec)/1000.0; // us to ms fprintf(stderr,"Time through gettimeofday in ms:%f\n\n", elapsedTime);