20150407

1. 영어 기사 읽기
1) Online Breast Milk Buyers May Get Cowed, Scientific American
– some purveyors of breast milk appear to be adulterating their product with cow’s milk. (purveyor – 조달업자, adulterate – 음식, 음료에 불순물을 섞다)
2) Why quantum dots are taking over your TV, CNN


2. Computer Architecture 청강
– ILP: core should execute instructions in parallel
– HW/SW approach가 있음: HW approach는 HW가 parallelism을 확인하고 speculative하게 실행하는 것. SW approach는 compiler가 parallelism을 확인하고 명령어를 스케쥴링하는 것. SW approach에는 한계가 있음.
– ILP를 활용하기가 어려운 이유: HW 입장에서는 sequence of instruction만 가지고 reorder해야 하므로 어렵다.
– 정수형 프로그램에서 15~25%가 branch instruction. Basic block size는 4~7 instruction.
– 요즘 생산되는 코어에서는 한 번에 100~200 instruction이 코어에 올라간다.
– RAW dependence인 상황에서도 value prediction을 사용해 reorder할 수 있음. 하지만 prediction이므로 정확하지 않고, 따라서 잘 쓰이지 않음.
– 명령어를 가지고 dependence graph를 그릴 수 있다. Dependence graph를 사용해 application에서 제공하는 parallelism을 볼 수 있다. 이론적 / 이상적으로는 dependence graph를 완벽하게 만들면 execution path를 찾을 수 있다. 이 때, dependence graph에서의 height는 unlimited OoO core를 사용할 때의 실행 시간을 의미한다. 하지만 현실적으로는 불가능하므로 프로세서는 instruction window 안에서 dependence graph를 만들어 실행한다. 실제로 dependence graph를 만들지는 않지만, 실행하는 과정이 graph 그리는 것과 같음.
– Ideal OoO core: unlimited execution unit, 100% accurate branch prediction…
– Dependence의 종류: data dependence, name dependence, control dependence
– Exception에 대해서도 대비해야 함. Instruction을 reorder하더라도 시스템의 상태가 영구적으로 바뀌면 안 된다. 서로 dependence가 없는 명령어 A, B가 있다고 하자. B를 먼저 실행해서 레지스터 값이 바뀌고, A를 다음에 실행하는데 예외가 발생한다고 하자 (page fault). 이 경우에 레지스터 상태가 원래 sequential한 실행과 달라져버린다. Reorder buffer로 해결 가능하다. ROB를 소개하는 “A Rigorous Correctness Proof of a Tomasulo Scheduler Supporting Precise Interrupts”라는 논문이 있음
– Memory dependence는 memory 주소를 기준으로 발생하는 dependence. Memory 주소는 실행하기 전에 알 수 없으므로 memory dependence는 해결하기 더 어렵다. Dependence graph를 일찍 만드는 것이 실행에 유리한데, memory dependence 있으면 일부는 그리지 못하게 됨. Speculative하게 실행해 해결할 수 있다. 일반적으로 메모리 주소가 다르기 때문에, 메모리 주소가 다르다고 생각하고 speculative하게 실행.
– Multi-issue Processors: In-order superscalar는 의존성이 없는 것끼리 동시에 실행하는 것. Out-of-order superscalar는 의존성이 있어도 우선 실행하고 (out-of-order execution) 순서대로 커밋한다(in-order commit).
– VLIW(Very Long Instruction Word)는 여러 개의 명령어를 동시에 실행하도록 만든 것. 명령어를 그룹을 지어 실행함. 컴파일러가 이 그룹 안에서는 의존성이 없음을 보장함. Dependence graph를 컴파일러가 만들어주는 것. 따라서 코어는 단순하다. 컴파일러가 스케쥴링하므로, dependent할 약간의 가능성만 있어도 다른 group으로 넣음. Memory dependence가 있으면 이 문제는 더 심각해짐.
– EPIC(Explicitly Parallel Instruction Computing)은 VLIW에 하드웨어 지원을 더한 것.
– SuperScalar OoO execution은 fetch and decode units, issue logics and execution units, instruction retire (commit)으로 이루어진다. fetch and decode units은 in-order, speculative. issue logic and execution units는 out-of-order, instruction retire는 in-order, non-speculative로 한다.
– 한 번에 코어에 올라가는 명령어의 수는 200개. 20%가 branch instruction이므로 40개 정도가 branch instruction. 98%의 정확도를 갖는 branch predictor라 해도 40개 모두 맞을 가능성은 낮음 (44%).


3. MARSS 개발
cacheline에 들어가는 내용을 수정하고, cache insert할 때 원하는 정보를 cacheline에 넣을 수 있어야 함. ./ptlsim/cache/cacheController.cpp를 보는 중. cache controller와 관련된 부분이다. cache_insert_cb 콜백 함수를 cacheInsert_ signal에 등록함. CacheController::handle_interconnect_cb가 marss_add_event를 호출할 때 해당 시그널을 사용해 cache insert함

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

누적 방문자 수
  • 101,234 hits
%d bloggers like this: