CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): 구르미 (구르미)
날 짜 (Date): 2005년 3월 11일 금요일 오전 01시 19분 14초
제 목(Title): [질] CPU 성능 (MHz)알아내기?


그동안 리눅스 시스템에서 마이크로 벤치마킹 하는 코드를 집어넣을 때

솔라리스에서 쓰였던 gethrtime() 비슷한 거를 다음과 같이 만들어 써왔습니다.

#define gethrtime(x)      {asm volatile (".byte 0x0f, 0x31" : "=A" (x));}

각 CPU마다 들어있는 Clock Tick수를 카운트하는 레지스터를 읽어들였죠.

이 정보를 이용해 다음과 같은 interval을 구한 후에 


gethrtime(x1);
// codes for measurement
gethrtime(x2);


#define TCV(t)  ((hrtime_t)((double)(t)/cpuMHz))

printf("interval:%lld ns\n" TCV(x2-x1));
실제 ns또는 us로 변환해서 출력하는데요.

문제는 cpuMHz를 구하는 것입니다.

그동안 /proc/cpuinfo 의 7번째 줄 12번째 문자부터 string으로 읽어들여서
atof변환을 해서 써왔는데 다른 방법은 없을까요?  제 프로그램에 쓰는 거는 
상관없는데 다른 사람들이 쓸 수 있게 해 줘야 하거든요.

                                                                                
double getCPUMHz()
{
  FILE *cpuinfo;
  int i=0;
  char line[120];
                                                                                
  cpuinfo = fopen("/proc/cpuinfo", "r");
  for(i=0;i<7;i++) fgets(line, 120, cpuinfo);
  fclose(cpuinfo);
  return atof(line+11);
}
                                                                                

/usr/include/sys/config.h  나  /usr/include/asm/processor.h
에도 이런 정보는 없는것 같은데.


감사함다.
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.