수안이의 컴퓨터 연구실

  • Mainpage
  • About Me
  • Tags
  • Metapage
  • Notice
  • Location
  • Keywords
  • Guestbook
  • Admin
  • Write an Article
  • Total | 1693789
  • Today | 140
  • Yesterday | 588

Programming/MFC2006/12/29 10:26

CPU 클럭 구하기

고수닷넷 - 데미소다오렌지님

Intel 계열의 CPU에는 Time Stamp Clock이라는 것이 존재합니다. 줄여서 TSC라고 부르죠. 64bit로 구성된 TSC의 역할은 CPU가 클럭을 받을때마다 1씩 증가하는 일을 합니다. 따라서 특정 시간안의 이 TSC의 변화량을 측정하게 되면 그것을 CPU의 클럭 수로 사용할 수 있습니다.

TSC를 구하는 윈도우 API가 존재하지 않기 때문에, 직접 어셈블리어로 구현을 하는 방법 외에는 없습니다. 아래는 TSC를 읽는 ReadTSC함수를 보여주고 있습니다. dwLo는 TSC의 하위 32bit를, dwHi는 상위 32bit를 저장해서 돌려주게 됩니다.

많은 구형 컴파일러의 경우 rdtsc라는 CPU 명령어를 인식하지 못합니다. 따라서 아래는 rdtsc의 OP코드인 0x0f, 0x31을 넣어서 명령을 수행하고 있습니다. VC++ .net 버전에서는 0x0f, 0x31 두 줄을 rdtsc 명령어로 대체하여도 재대로 컴파일이 됩니다.

VOID CCpuInfo::ReadTSC(DWORD *dwLo, DWORD *dwHi) 
{ 
    _asm 
    { 
        _emit    0x0F 
        _emit    0x31 
        
        mov      ecx, dword ptr dwLo 
        mov      dword ptr[ecx], eax 

        mov      ecx, dword ptr dwHi 
        mov      dword ptr[ecx], edx 
    } 
} 

이제 CPU의 클럭 변화량을 측정할 준비는 다 되었습니다. 다음으로 필요한 것은 정확한 시간을 재는 것입니다. 클럭의 변화량을 정확한 시간으로 나누어야 제대로된 클럭 수를 구할 수 있기 때문이죠. 윈도우에서 이렇게 가장 정밀한 시간을 계산할 수 있는 방법으로는 고해상도 타이머를 쓰는 방법이 있습니다. 이 고해상도 타이머는 특정 주기에 따라서 값이 변하게 됩니다. 마치 CPU의 TSC와 동일한 역할을 하는 놈이죠.

QueryPerformanceFrequency는 고해상도 타이머의 주기를 구하는 함수입니다. 즉, 초당 몇번 타이머가 증가하는가를 구하는 함수죠. QueryPerformanceCounter는 현재의 고해상도 타이머를 구하는 함수입니다.

그러면 이제 우리는 다음과 같은 수식을 통해서 CPU의 클럭 수를 계산할 수 있습니다.

고해상도 타이머 주기 : 고해상도 타이머 변화량 = CPU 클럭 : TSC 변화량

비례식을 돌려서 곱하고 나누고 하면 CPU 클럭이라는 미지 항이 풀리게 되겠죠. 아래는 CPU 클럭을 Hz단위로 반환해 주는 함수입니다.

ULONGLONG CCpuInfo::GetClockHz() 
{ 
    LARGE_INTEGER PerfCt, OldPerfCt, PerfFreq; 
    ULARGE_INTEGER Cycle,OldCycle,ClockHz; 
    
    
    QueryPerformanceFrequency(&PerfFreq); 
    QueryPerformanceCounter(&OldPerfCt); 
    ReadTSC(&OldCycle.LowPart, &OldCycle.HighPart); 

    Sleep ( m_nWaitMs ); 
    
    QueryPerformanceCounter(&PerfCt); 
    ReadTSC(&Cycle.LowPart, &Cycle.HighPart); 

    ClockHz.QuadPart = (ULONGLONG) (Cycle.QuadPart - OldCycle.QuadPart); 
    ClockHz.QuadPart = (ULONGLONG) (ClockHz.QuadPart * PerfFreq.QuadPart) 
                           / (PerfCt.QuadPart - OldPerfCt.QuadPart); 
    
    return ClockHz.QuadPart; 
}
"MFC" 카테고리의 다른 글
  • 자석 윈도우 만들기 (0)2007/01/02
  • VMemPool (0)2006/12/29
  • CPU 클럭 구하기 (0)2006/12/29
  • FlashWindow 함수를 사용하여 내 프로그램의 존재... (0)2006/12/27
  • 디렉터리 구조에 관한 실용적 고찰 (0)2006/12/19
2006/12/29 10:26 2006/12/29 10:26
Posted by webdizen
Tags CPU 클럭
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/2534

Leave your greetings.

[로그인][오픈아이디란?]

«Prev  1 ... 709 710 711 712 713 714 715 716 717 ... 3009  Next»

RSS HanRSS
Blog Image
webdizen
이곳은 컴퓨터에 대해 연구하고, 공유하고, 소통하기 위한 연구실입니다. 개인적으로는 OLAP, Data Mining, Semantic Web, Data Modeling에 대해서 연구하고 있습니다.

Categories

전체 (3009)
Webdizen (141)
Life (6)
Diary (16)
Blog (9)
IDEA (2)
Travel (10)
Book (16)
Photo (7)
Movie (8)
Music (14)
Leisure Sports (10)
Funny (6)
Hardware (121)
Software (120)
Windows (5)
Unix & Linux (120)
Installation (5)
Kernel (10)
System (34)
Develop (22)
X-Window (0)
Applicaton (31)
Security (4)
Framework (2)
Hadoop (2)
Programming (804)
Algorithm & Data Structure (1)
Assembly (38)
UNIX/Linux C (95)
C++ (128)
STL (4)
Java (38)
Win32 API (92)
ATL/COM (44)
MFC (151)
.NET (26)
WCF/WPF (4)
C# (28)
Network Programming (17)
Database Programming (12)
OpenGL / DirectX (13)
Multimedia Programming (0)
Game Programming (21)
Parallel Distributed Progra... (0)
Reverse Engineering (0)
Debugging (9)
Python (1)
Ruby (1)
Ruby on Rails (1)
QT (4)
GTK (0)
JSP (0)
PHP (6)
ASP.NET (6)
ASP (2)
Development (28)
Useful Library (2)
Data Modeling (0)
Database (105)
Oracle (4)
MSSQL (41)
MySQL (2)
Data Warehouse (2)
Data Mining (4)
Network (66)
Web (79)
DHTML (4)
XHTML (1)
Javascript (1)
CSS (1)
AJAX (9)
XML (11)
Flex (1)
Silverlight (3)
Security (91)
DoS (1)
Kernel (10)
Scanning (3)
Sniffing (0)
Spoofing (4)
Overflow (28)
Web (11)
Shell (10)
Format String (14)
Window (2)
Embedded (70)
Multimedia (27)
Mobile (14)
Graphic (24)
Management (633)
Knowledge (581)
Hadoop (0)

Notice

  • 메타 블로그 사이트에 등록
  • 새해 맞이 블로그의 변화
  • 블로그 명칭 변경
  • 도메인(www.webdizen.net) 구...
  • TEXTCUBE 1.6.1로 업그레이드...

Tags

  • Tools
  • Financial
  • Error Code
  • Merge-Join
  • 윈도우 종료
  • 준비물
  • 제2기숙사
  • JPEG
  • 데이터베이스
  • 린즈링
  • 최근 사용한 파일 목록
  • Signal
  • 포트스캐닝
  • 창강관
  • stty
  • Visual Studio 2005
  • Resource
  • varchar
  • 짐빔 화이트
  • XSL

Recent Articles

  • 트위터(Twitter)의 시작!.
  • 청년 리더의 조건.
  • 애플의 타블렛 PC - 아이패드....
  • 미래의 인터페이스 - 육감 기....
  • 기초발성법 동영상 강좌.

Recent Comments

  • 학교 과제물중 쓰레드에 대하....
    장진혁 03/17
  • 관리자만 볼 수 있는 댓글입....
    비밀방문자 03/12
  • 상대방의 이야기를 열심히 경....
    DoNuts 03/03
  • Lots of students know techn....
    Bobbi35Shannon 02/25
  • 좋은글 잘 보고 갑니다..
    Und_hacker 01/08

Recent Trackbacks

  • printf,scanf를 이용한 형식....
    yundream의 프로그래밍 이야기 03/10
  • 파일 열기/저장하기 CFileDialog.
    은마군의 나태블록 2009
  • World IT Show 2008.
    상우 :: Oranzie's BLOG 2008
  • cvs서버 설치하기.
    3인3색 2008
  • 속속 공개되는 Google Chart....
    PHP와 Web 2.0 2007

Archive

  • 2010/02 (1)
  • 2010/01 (6)
  • 2009/12 (5)
  • 2009/09 (3)
  • 2009/08 (1)

Calendar

«   2010/03   »
일 월 화 수 목 금 토
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

Bookmarks

    • Administration
      • IIS.NET
      • NTFAQ
      • OS의 모든 것
      • 리눅스포털
    • Database
      • SQL Server Central
      • SQL Team
    • Development
      • .NET Heaven
      • ASP Alliance
      • ASP.NET 2.0
      • Bullog.net
      • C# Corner
      • C++ (C PlusPlus.com)
      • C++ Reference
      • CodeGuru
      • CodePlex
      • DebugLab
      • Dev Articles
      • Devpia
      • DotNet Junkies
      • DotNet Zone
      • Driver Online
      • GOSU.NET
      • HOONS 닷넷
      • Joinc 팀블로그
      • KOSR
      • MSDN Home Page
      • OSR Online
      • Sky.ph - 개발자 커뮤니...
      • TAEYO.NET
      • The Code Project
      • WindowsClient.net
      • 김상욱의 개발자 Side
      • 조인시 위키
    • Human Networks
      • belief21c's e-space
      • I think I can
      • Invisible Rover's Blog :D
      • Rodman®
      • ■ Feel So Good~! ■
      • 까만 나비
      • 나를 가꾸는 시간.
      • 나만의 즐거움~~!
      • 단녕
      • 상우 :: Oranzie's BLOG
    • Information Technology
      • Microsoft TechNet
      • 지디넷코리아 - 글로벌...
    • Security
      • FoundStone
      • milw0rm
      • NewOrder
      • OpenRCE
      • Phrack.org
      • Reverse Engineering b1...
      • Reverse Engineering Team
      • RootKit
      • SecurityFocus
      • SecurityXploded by Nag...
      • Wow Hacker
      • Zone-H
Textcube
Louice Studio Inc.
Powered by Textcube. Original designed by Tistory.