민홍교수님 발표자료를 복습하다가, 궁금한점이 생겨서 질문드립니다. (제가 이날 개인사정으로 지각을 좀 했습니다. ㅠㅠ)
아래 Figure1과 같이 Cortex-A8 pipeline(강의자료는 A8 이더라고요..) 을 보면
결국 FPU를 사용하려면 NEON 단계까지 가야 할것 같은데, 1) 이럴경우 최초 연산은 아무리 빨리 실행한다고 해도 23cycle 뒤에 실행된다고 해석하는것이 맞는걸까요? [23=2(fetch)+5(decode)+6(execute) + 4(M0~M3)+6(N1~N6)]
2) 아니면 decode단계에서 바로 jump하는 기능이 있는건가요? 그림상으로는 안보이네요.
혹시 강의시간에 이와 관련된 얘기가 나왔었나요?? 나왔더라면 다시 언급하는점 죄송합니다 ㅠㅠ
3) 추가로, ARM의 pipeline 정보가 자세하게 기재된 공식 document는 어디서 확인할 수 있을까요? ARM 이나 TRM에는 안나와 있어서 여쭤봅니다. 아래와 같은 reference는 찾았지만, 원래 pipeline 정보는 이렇게 찾아보는 것인지 좀 궁금하네요^^;
Cortex-A9:
Cortex-A15:
http://www.arm.com/files/pdf/at-exploring_the_design_of_the_cortex-a15.pdf
.
저도 민홍교수님의 강의는 첫날 일부만 듣고 참석을 못했던지라 교수님이 어떻게 설명하셨는지는 모르겠네요.
일단 아는 것만 말씀드리지요.
1) 23 cycle 부터라기보다는 M3(17cycle) 다음부터 실행합니다. 단 N1~N6은 경우에 따라 (간단한 integer add 같은 경우) 더 일찍 연산이 완료되기도 하겠죠. (근데 지금 보니 N0, L0가 없는데 기준이 뭔지 모르겠네요.)
2) 일단 A8은 integer pipleline이 모두 끝난후에 VFP/NEON을 수행하도록 설계되었답니다. (ref: A8 white paper) 주목적이 streaming 연산이어 L1/L2 load penalty를 hiding하는 효과가 있다고 합니다.
그러나 A9부터 OoO가 도입되면서 decoding stage후의 reservation station에서 바로 VFP/NEON의 pipeline으로 분기합니다.
3) 이부분은 저도 알고 싶네요.
저의 경우는 ARM사 발표 자료(ARM tech symposium 또는 DevCon)나 구글신님을 통한 white paper 서치 정도에서 pipleline 정보를 얻습니다. 대부분의 인터넷 기사들도 출처가 거기인 것 같습니다.
제 생각에 detailed pipeline 정보는 NDA 없이 얻을만한 자료가 아닌 것 같습니다. (논문들에는 나올수도 있겠습니다만 아직 논문이나 구글 스칼라를 뒤져본 적은 없습니다.)
다른 분들은 어떠신지요?