안녕하세요.
오늘 문득 프로세서의 floating point연산에 대해서 궁금증이 생겨서 이것저거서 자료를 정리를 하다가 이해가 안되는 부분이 생겨서 질문 드립니다.
궁금한 성능지표는 FLOPS인데요. 위키의 FLOPS 계산 수식을 보면 다음과 같이 나타낼 수 있더라고요.
그리고 요즘 프로세서들은 1 clock cycle당 4FLOPS를 실행한다고 하는데요. 이 근거를 찾기 위해서 x86메뉴얼을 검색해봐도 딱히 어디서 찾아야 하는지 잘 모르겠네요.
한 블로그에는 다음과 같이 명시가 되어 있는데요.
--------------------------------------------------------------------------------------------------
널리 사용되는 Intel Xeon 프로세서의 경우,
NetBurst 기반 (5000 이전 제품)은 2 flops/cycle,
Core ~ Nehalem 기반 (5100 ~ 5600 시리즈)에서는 4 flops/cycle,
Sandy Bridge 기반 (E5-2600 시리즈)은 8 flops/cycle 입니다.
--------------------------------------------------------------------------------------------------
혹시 x86기반에서 위와 같은 정보나, ARM기반에서 clock cycle당 float operation이 몇개 실행되는지 어디서 확인할 수 있을까요?
ARM에서는 PMU값으로 측정을 해보긴 했는데...
결과값이 영 이상하네요.. LINPACK과 같은 benchmark 결과값 말고, 아키텍처 상으로 명시된 값을 알고 싶어서 질문드립니다.
댓글 3
-
tp
2013.09.06 17:56
-
조성진
2013.09.08 17:45
답변 감사합니다.
-
조성진
2013.10.04 01:31
당시 답변이 이해가 잘 안가서 선 리플 후(^^;) 추가로 공부하다가, 혹시 다른분들도 참고하실수 있다는 생각에 자료 추가합니다.
이래저래 좀 게을렀네요. (라고 쓰고, 개천절에도 이시간까지 작업하는 제 모습이 처량해서 숨돌리고 있습니다~)
이론적인 flops는 이해했는데, 실제는 얼마가 나올까 고민해봤습니다.
x86계열은 이론치 대비 70~80% 성능이 나온다길래(그냥 아티클에서 봐서 공신력은 없습니다.) 그런가보다 하고 넘어갔고, ARM은 얼마나 나오는지 궁금했습니다.
현재 가지고 있는 보드를 전부 테스트 해볼까 했지만, 다행스럽게도 누군가가 실험한 자료가 있네요.
공신력있는 benchmark를 사용하진 않았고, dependancy, memory 영향 없게 본인이 직접 test code를 만들어서 돌린 결과라고 합니다.
그림 1.은 테스트한 디바이스 목록을 보여줍니다.
< 그림1. 테스트한 디바이스 목록>
그림 2.는 실험한 GFLOPS값을 바탕으로 계산하였더니, 나온 결과라고 합니다.
이론치 대비 flops가 잘 나오지는 않네요. 결과값만 보고 판단한다면, 아직 ARM에서 flops성능은 좀 낮은 것 같습니다.
게시글의 리플들 보면 결과값에 대해 이래저래 말이 많은데, 제가 아직 지식이 부족해서인지 맞다 틀리다 판단까지는 안서네요.
혹시 나중에 참고하실분이 있을까 하여 추가 하였습니다.
실험과정 및 결과에 대한 추가 내용은 아래 사이트에 있으니, 관심 있으신분은 참고하세요.
Ref. : http://www.anandtech.com/show/6971/exploring-the-floating-point-performance-of-modern-arm-processors
.
명령어세트와 vector 처리유닛의 register size를 찾아보시면 대략적인 예측이 가능합니다.
원래는 정확하게 분석하려면 ALU나 FPU 구조를 보아야 합니다.
ARM은 VFP를 찾아보시면 아마 128bit register를 사용할 것이고 이것에 근거하여 1clock=4 flops (4x32=128b)라고 예측이 됩입니다.
Intel의 경우도 찾아보니 SSE가 128bit register를 사용하고, 최근 sandybridge에서는 AVX를 추가하여 256b register로 vector를 처리한다고 합니다. 이를 볼때 각각 4flops, 8flops 처리하겠군요.
참고로 DSP쪽은 꼭 register 크기로 flops를 확정할 수 없습니다. complex 연산등에 특화시켜 64b register만으로 4 flops를 사용하는 경우도 있고 더 심한 경우도 있습니다.