20161001

Rocket Core 소스 코드 분석
Preefetcher를 붙이기 위해 rocket core의 소스 코드를 분석해보았다. Rocket core의 pipeline stage가 동작하는 방식을 간략히 이해할 수 있었고, 어떤 부분을 수정하면 될지 알게 되었다. 추정이 맞는지 아닌지는 수정해봐야 알게 될 듯 하다. RISC-V BOOM에 prefetcher가 구현되어 있지만, 제대로 붙어있지 않다(주석 처리 되어있음). RISC-V BOOM과 rocket core를 비교해보면서 수정할 곳을 찾았으며, rocket.scala에서 io.dmem 부분을 수정하면 될 것 같다. io.dmem.req.valid가 false일 때에만 prefetch request를 생성하면 될 것 같다. 아직 여러가지 의문이 있다. tag가 왜 이상하게 생성되는지, io.dmem.s1_data에 아무런 데이터나 넣어도 되는지 궁금하다. 아마 read request를 생성한다면 아무런 데이터나 넣어서 prefetch를 생성해도 될 것 같다. 그리고 한 가지 의문이 더 있는데, prefetcher를 만든다고 해서 정말 성능이 향상될 것인지도 궁금하다. 오히려 떨어지는 것은 아닌지? 그리고 RISC-V가 아주 훌륭한 open source soft core 프로젝트이지만, architectural simulator처럼 여러 metric을 쉽게 뽑아낼 수 없다는 점이 마음에 들지 않는다. 단순 simulation 용도로는 매우 부적합한 것 같다. 일반적인 경우에는 simulation이 압도적으로 편리한 평가 기법인 것 같다. rocket.scala 코드를 읽는 과정에서 처음에는 잘 이해되지 않았는데, ./uncore/src/main/scala/Consts.scala, ./rocket/src/main/scala/consts.scala, ./rocket/src/main/scala/idecode.scala를 함께 보니 이해가 잘 되었다.

Advertisements
Tagged with: , , , , , ,
Posted in 1) Memo

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

누적 방문자 수
  • 96,405 hits
%d bloggers like this: