|
개그 하시는군요.
싸우자는게 아닙니다. 분명한 지식을 남기라는거죠. 자신이 확신이 없다면 확신이 없는데
생각은 이러하다라고 남기란겁니다. 즉, 시시비비를 가린건 맞습니다.
조준회님은, 고해상도 타이머, 멀티미디어 타이머 란 용어를 혼용하시고,
멀티미디어 타이머가 이미 RDTSC를 사용하고 있다. 라는 식으로 이야기 하시는데,
>>조준회 님이 쓰신 글 :
>>: 윈도우에선 기본이 1/1000입니다.
>>: RDTSC로 검색을 해보니.. 윈도우 고해상도 타이머가 이걸 이용한다고 나오네요..
>>: 이 글에서 고해상도 타이머(멀티미디어 타이머)가 아닌..기본 타이머가 1/1000로 동작하는것
>>: 처럼 오해 할 수있게 글을 남긴것은 제 실수입니다.
또한 이렇게 적으셨군요.
>>: 제 글은 RDTSC로 구현한 타이머가 있다라는 취지로 글을 남겼습니다.
>>: RDTSC가 필요없다고 쓰지 않았습니다. 너무 앞서 가시네요..
그에 반해 그 앞의 글에선 "의미 없어 보입니다" 라고 적으셨지요?
멀티미디어 타이머란건, 사운드 카드에 내장된 타이머를 이용하는 방식입니다.
즉, 사운드카드의 종류에 따라 정상작동을 하지 않는 경우도 있습니다.
다시한번 말씀드리지만, 사운드 카드에 내장된 타이머를 이용한
TimeGetTime 함수를 이용해 얻어지는 Tick을 이용하는 방식이죠.
반면, RDTSC 란건 CPU 내부에 있는 카운터입니다.
QueryPerformanceCounter API를 사용해 얻을 수 있는 64bit Tick 이구요.
Mnemonic Code(assembly)나 Instruction Hexa Code 로 직접 값을 읽어올 수도 있습니다.
물론 CPU에 따라 RDTSC가 없는 녀석도 있을 수 있죠.
참고로, 퀘이크1 소스에선 RDTSC를 사용했고,
퀘이크2 소스에선 그당시 RDTSC를 갖지 못한 장치들이 있어
멀티미디어 타이머를 사용했지만, 카운터 스트라이크니 하는 최근 고성능 3D엔진 테스트용
게임 서버에서 조사한 사용자들의 PC 환경에서 RDTSC를 갖지 못한 PC는 없는걸로 나와 있습니다.
(그정도로 보편화 되어 있다는거죠)
*** 요약하면,
조준회님은, RDTSC도 멀티미디어 타이머도 제대로 알지 못하고 있었다는게 됩니다.
>>: 멀티미디어 타이머로 고정밀 타이머의 구현이 안된다고 하시는 것도 의문입니다.
>>: 멀티미디어 타이머는 최대 1ms 제어가 가능한데...
>>: 이보다 더 작은 시간제어가 필요한 경우는 아직 만나보지 못했네요..
>>: (고정밀 시간제어가 필요한 real time os 중 상당 수가 최대 1ms 를 지원합니다.
>>: 이 보다 작은 단위를 지원하는 real time os 제가 아는 한 그리 많지 않습니다.)
보십시오.
타이머 관련한 프로젝트를 제대로 안해보신 것 같은데,
간단히 초당 60hz 의 주기를 같는 루프 사이클을 만들고 싶다 칩시다.
루프를 돌고 와서 조금 빨리 도착한 나머지 약간의 시간이 남는다, 혹은
많은 시간이 남는다. 이럴때, 1/1000 초만으로 60hz의 정밀도가 유지된다고 생각하십니까?
RDTSC는, 함수 호출 형태가 아닌 직접 접근 방식을 통해 함수 호출의
Context Switching Overhead를 없앨수도 있고,
RDTSC 명령어를 실행, 클럭을 읽어오는데까지 CPU를 총 몇 Cycle 순환할 지 정확한
계산이 가능하고, 다른 시스템에서 자원을 점유하는데 100% 정확한 대응은 힘들지만
자체적인 무결성만은 최대한 보장할 수 있는 타이머인 것이죠.
아니, 엄밀히 말해서 RDTSC는 타이머가 아니라 카운터입니다.
그렇기에 RDTSC를 이용하는 API 함수의 이름조차도 Timer란 이름이 아닌
QueryPerformanceCounter 란 이름을 가진 것입니다. (용어 사용의 적확성과 일관성)
시간과 무관하게, 단지 CPU의 속도에 종속적일 뿐이니까요.
즉, 빠르게 2 회 연속으로 Tick을 얻었을 때, 같은 값이 나올 수도 다른 값이 나올 수도 있는
느린 타이머와, CPU 내부 Cycle 의 횟수를 세는 카운터(당연히 2회 모두 정확히 차별화
된 값이 얻어지죠)를 같은 취급 하지 말라는겁니다.
혹여 아직까지도 그렇다고 생각하신다면, 그냥 대충 짜고 대충 사십시오.
>>: 이곳은 질/답란입니다.
>>:
>>: 열씸님이 요즘에 답변을 많이 다는 모습이 보기좋습니다만..
>>: 너무 의욕이 앞서시는것 같군요...
요즘 답변을 많이 다는 것은 의욕이 앞서서도 아니고, 단지 객기입니다.
오래 빌더포럼에 머물렀지만, 꾸준히 답변을 올리기 보단 몰아서 올리는 편이니까요.
>>: 어휘선택에 신중하셨으면 합니다.
제가 질문자를 위해 쓴 글보다, 선행 답변자를 위해 쓴 글이 더 긴 것 같습니다.
이젠 멀티미디어 타이머와 RDTSC의 차이를 아시겠군요.
먼저 하신 답변이 옳고 그르고를 떠나서, 그 처음의 답변이 성의있게 보였더라면,
그게 아니라 그 다음의 글에서라도 성의가 있었다거나 올바른 지식을 남기셨더라면
어휘 선택에 신중했을겁니다.
(첫번째 답 글을 읽어 보시면 아시겠지만 첫글부터 시비조였던건 아닙니다
잘 알지 못하는 지식으로 RDTSC에 대한 모색이
의미없다는 이야길 남긴 준회님에 비해서는 신중했다고 생각합니다.)
이상입니다.
|