안녕하세요.
개념이 잘 서지 않는데 물어볼 곳이 여기밖에 없어서 질문 드립니다.
프로그램을 하나 만들고 이를 c를 통하여 연산시간을 측정하였습니다.
측정한 연산시간을 가지고 MIPS를 계산하는 방법이 있다면 알고 싶습니다. 혹은 둘 사이의 관계정도라도 알고 싶습니다.
예를 들어서 CPU가 1GHz이고 연산시간이 1초라면 이를 MIPS로 환산하면 얼마나 되는지 알 수 있을까요?
(그리고 CPU가 1GHz의 Dual core라면 어떻게 따져주는지도 알고 싶습니다)
아시는 분 답변 부탁드립니다.
감사합니다.
제가 이 쪽 전문입니다. ^^
연산시간으로 MIPS를 측정하는 것은 대단히 위험한 발상입니다. 그 이유는 :
1. dual issue (ARMv7)
2. cache miss
3. ARM/NEON/VFP pipeline
4. compiler option
크게 이렇게 네 가지로 요약됩니다.
1. 코어텍스부터 한 사이클에 두 개의 명령어가 동시에 실행 가능합니다. 그런데 이 두개의 명령어 조합에따라 될 때도 있고 안 될 때도 있습니다. 이거 카운트 하자면 머리털 빠집니다.
2. 캐쉬 미스가 떠버리면 어마어마한 사이클 페널티가 발생하는데 이게 SoC마다 다르고, MMU 상태에따라 페널티 사이즈가 며느리도 모르는 상황이 되어버립니다. 물론 벤치마크에서 메모리 제어를 배재하고 실행은 가능합니다
3. 컴파일러에따라, 사용된 명령어에따라 네온, 또는 VFP 명령어가 실행되는 경우가 꽤 있습니다. 문제는 네온/VFP의 결과값을 ARM 레지스터로 옮기는 과정에 11~14사이클 페널티가 발생하는 겁니다. (이게 아주 그지같습니다.)
4. 컴파일러 최적화 옵션에 따라서 많은 명령어가 생략되어 버립니다. 컴파일러가 불필요하다 판단하면 가차 없습니다.
결국 정확한 벤치마킹을 위해서는 어셈블리로 직접 작성하는게 최상입니다.
근데 어셈블리로 벤치마킹 작성 할 능력이면 명령어 사이클 카운트가 가능하니 벤치마킹 작성 할 이유가 없어지는 아이러니한 상황이 되어버리죠.
결국 MIPS는 SoC 업체에서 제시하는 것을 기준으로 잡고 그 업체의 신뢰도에따라 차감하는 것이 정답입니다. 퀄컴의 경우 무지무지하게 감점해야 하죠.




예전에 기기의 속도를 측정하기 위해서 비슷한 방법을 이용 했었는데 항상 다른 결과가 나오더군요.
그래서 20번 계산해서 최소값 3개를 쓰기도 했지만 그래도 오차가 많이 발생하더군요.
ARM 은 Hz 와 MIPS 가 비례하니까 1000MHz 면 그냥 1000MIPS 로 계산하는게 좋지 않을까요?
듀얼이면 2000MIPS.
CPU 정보 읽으시는게 빠르고 정확할 것 같습니다.