4장
Forwarding Limitations
- Since ALU complete in a cycle (ALU가 cycle 안에서 완료되었을때)
- Memory does not return until the end of MEM
Branch Prediction
- 정적과 동적 예측 : 분기 조건의 결과를 미리 예측하고, 예측된 결과에 기반하여 다음 명령을ㅁㅁ fetch하고 파이프라인을 계속 진행
Dynamic Branch Prediction
- 프로그램 실행 중 계산 이력에 따라 분기를 동적으로 예측
Precise Exception
- 파이프라인 컴퓨터에서 정확한 명령어와 연관짓는 인터럽트 또는 예외
프로세서와 입출력방식
Polling
장점 : 프로세서가 완전히 제어되고 모든 작업을 수행한다.
단점 : pollin overhead는 많은 CPU 시간을 소비할 수 있다.
Interrupt
- CPU가 프로그램을 실행하는 중에 I/O 하드웨어장치나 다른 예외 상황의 발생으로 인해 특별한 처리가 필요할 때 CPU에 이를 알려 처리하도록 하는 것 (CPU 관여)
DMA
- CPU의 간섭없이 메모리와 하드웨어 장치 간의 데이터전송을 하는 것 (CPU 관여 X)
5장
Memory hierarchy
write-through
- data가 update되면 Cache에도 쓰고 Memory에도 쓰는 방식. 두 계층의 data가 일치함을 보장
write-back
- data를 일단 Cache에만 쓰고 data가 쫓겨날 때 Memory에 쓰는 방식.
Types of Cache Misses
Compulsory Misses
- 최초 데이터 접근 시 반드시 발생하는 miss (처음에 캐쉬는 비어있을 테니까 반드시 miss 발생)
Conflict Misses
- 캐시 메모리에 A데이터와 B데이터를 저장해야되는데, A와 B가 같은 캐시 메모리 주소에 할당되어서 나는 캐시 미스.
- direct나 set asscociate mapping에서 같은 부분을 번갈아 가면서 사용하게 되서 발생하는 miss이다. 이 miss는 전체적인 캐시 용량이 부족해서 발생하는 miss가 아니다.
Capacity Misses
- 캐시 메모리에 공간이 부족해서 나는 캐시 미스.
- 전체적인 용량이 부족해서 발생하는 miss이다. 캐쉬가 메모리보다 작기 때문에 캐시에 적재되어 있다가 캐시가 꽉차서 쫓겨났다가 다시 캐시로 적재될때 발생한다.
Misses 줄이기
1. Conflict Misses
- fully associative로 바꾼다.
2. Capacity misses
- 큰 캐시
3. Compulsory misses
- 블록 사이즈를 증가시킨다?
6장
Superscalar
- 한 프로세서 사이클 동안에 하나 이상의 명령어를 실행시킬 수 있는 프로세서 아키텍처
Deep Pipeline
파이프라인 stages의 수를 증가시키는 것
Dynamic Pipeline Scheduling
Simultaneous Multithreading
- 다중 보내기와 동적 스케줄링을 지원하는 마이크로아키텍처의 자원을 활영하요 멀티스레딩 비용을 줄이는 멀티스레딩의 한 방식
Speculation
- 컴파일러나 프로세서가 명령어의 결과를 예측하여 다른 명령어들과의 종속성을 제거하도록 하는 기법
Out-of-Order Execution
- 명령어가 cpu에 넣어지는 순서가 아니라 더욱 효율적인 방법으로 실행하는 것
Loop Unrolling
- loop의 개수를 줄여 프로그램의 속도를 최적화 시키는 방법. loop body를 복제하여 서로 다른 레지스터 사용.
shared-memory multiprocessor
- 커널(OS)가 memory protection을 위해 대리 전달해주는 것
- 장점: 안전하고 동기화 문제가 없다
- 단점: 성능이 떨어진다
message passing multiprocessor
- 두 프로세스간의 공유된 메모리를 생성 후 이용하는 것
- 장점: 성능이 좋다
- 단점: 동기화 문제가 발생한다
Cache Coherence 및 해결방안
- 두개의 서로 다른 프로세서가 각자 자신의 캐시를 통해 메모리에 접근하게 되고, 주의하지 않으면 두 개의 다른 값을 갖게 되는 것이 cache coherence의 문제이다.
해결 방법은 스투핑 프로토콜로, 프로세서가 데이터를 쓰기 전에 그 데이터에 배타적인 접근을 하는 것이다.