2012-11-09 4 views
3

어셈블리에 산술 정수 라이브러리를 썼습니다. 내 프로세서 (Intel Sandy Bridge)의 최고 성능과 비교하여 성능을 평가하고 싶습니다.MIPS 정수 샌디 브리지

정수 계산은 샌디 브리지의 3 ALU에서 수행되므로 "3 * (코어 수) * 주파수"로 추정값을 얻을 수 있습니까? 내 어셈블리의 99 %는 addq, adcq, mulq 지침입니다.

답변

0

8086이나 68000과 같은 1980 년대 프로세서에 대해 말하면, 그것은 유효합니다. 각 명령어는 고정 된 시간에 실행됩니다.

현대 프로세서는 명령을 빠르게, 대용량 캐시, 파이프 라인, 순서가 잘못된 명령 실행 등으로 만들기 위해 많은 트릭을 사용하므로 수동으로 벤치 마크하기가 매우 어려워집니다. 가장 좋은 방법은 코드 시간을 측정하는 것입니다. 또한 벤치 마크를 수행 할 때 다른 코어에서 실행중인 코드의 영향을 고려해야합니다. 프로세스는 최신 i7 칩과 같이 프로세서의 전체로드에 따라 다른 속도로 실행될 수 있습니다.

+0

wikipedia는 8086이 70 년대 후반 칩이라고 말합니다.) –

+0

올바른 것이지만 1981 년 IBM PC 최초 제품과 같이 80 년대를 주용으로 사용했습니다. :-) – AnthonyLambert

+0

좋은. 나는 그 후 2 년 후에도 빛을 보지 못했습니다. –

1

코드의 속도에 영향을주는 요인은 많습니다. 스톨, 캐시 액세스 및 캐시 속도, 캐시 누락 및 RAM 속도 등의 원인이되는 명령어 간의 종속성과 같은 것입니다.

Sandy Bridge의 경우 특별히 하이퍼 스레딩 (이러한 ALU는 2 개의 논리적 CPU로 공유됩니다) 부스트 및 전원 관리. 그런 다음 페이징 (TLB 조회 및 TLB 누락)이 발생합니다.

무엇보다도 OS 오버 헤드가 있습니다. 커널이 얼마나 빨리 페이지 폴트 (다양한 "copy on write"및 "write on write"목적으로)를 처리하는지, 모든 작업이 CPU를 통해 어떻게 스케줄링되는지, 얼마나 많은 태스크 스위치가 발생하고 얼마나 빠릅니까, 뮤텍스/futexes 등을 처리합니다.

+0

감사합니다. 답을 얻는 것이 어려워 보입니다. 적어도, 나는 발견했다 : http://research.colfaxinternational.com/post/2012/04/30/FLOPS.aspx, 나는 근본적인 비례 법칙으로 근사값을 만들 수있다 (나의 코드는 2/3의 덧셈과 1/3의 곱셈을 가진다.), 실험적이지만 아무것도 아닌 것보다 더 –

+0

왜 시간 만이지? – AnthonyLambert

+0

간단히 말해, ASM 명령어를 계산 한 결과, 하나의 코어에서 2.2GIOPS를 얻었습니다. 내 라이브러리로, GMP와 비교할 때 GMP와 오랫동안 산술을 사용하면 GMP와 비교해 볼 때 5 ~ 10 배 빠릅니다 (정적 임베디드 lib는 gmp와 같이 동적이 아니며 동적 할당을 의미하지 않습니다). 행복하지만 예상 할 수있는 것은 무엇입니까? 이 proc의 이론적 잠재력이다. 내가 링크 된 PDF를 보면 이론적 인 피크는 정수의 경우 3.4에서 6.57 GIOPS 사이입니다. 따라서 내 결과는 조용하지만 나는이 이론적 추정을 확신하지 못한다. –