ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 현대의 컴파일
    프로그래밍언어론 2023. 4. 15. 19:29

    CPU의 기능적 유닛

    fetch, 명령문 해석, 피연산자를 레지스터에서 가져오기,
    메모리 접근, 레지스터에 결과를 다시 쓰기...

    기능적 유닛의 단계를 차례로 수행될때 대부분이 쉬는 상황이 발생한다.
    파이프 라이닝을 사용하면 초당 수행 명령문 수가 크게 증가하고, 지연을 최소화할 수 있다.

    파이프라인의 지연
    다음 몇가지 사항들에 해당한다.

    1. 파이프 라인의 단위가 제어나 데이터를 위해 기다려야 하는 경우
    2. 앞에 명령에서 계산된 값을 써야하는 경우
    3. 필요한 데이터가 메모리에서 로드될 동안 기다려야 하는 경우
    4. 필요한 리소스가 없어서 시다려야 하는 경우
    5. 다름 명령문이 오기를 기다리는 시간

    성능을 위해서는 지연을 최소화 해야한다.

    현대적 프로세서

    현대적 프로세서를 위한 컴파일의 특징은
    RISC를 이용하여 간단한 명령문을 사용한다.
    또한 메모리의 접근시의 시간을 단축하기 위해서 레지스터의 활용을 최대한 이용하고, 파이프 라인을 꽉 채우도록 한다.

    단일 프로세서의 실행 성능을 최대화 하기 위하여 파이프 라인 성능 향상이 중요하다.
    파이프라이느이 지연의 원인과 그에대한 대책은 다음과 같다.

     

    캐시미스


    캐시에 없는 데이터는 메모리 버스시간만큼 기다려야 한다.

    캐시는 하드웨어적 기법으로, 하드웨어적으로 캐시 연관도를 높힌다.
    보통 캐시 히트비율은 90%이상이다.
    또한 캐시 정책에 따라 캐시하는 범위에 맞게 배열을 접근하도록 알고리즘을 변환한다.

     

    제어위험


    앞 명령문이 끝나야 다음 PC를 알 수 있다. 따라서 다음 명령문의 Fetch, Decode 단계를 바로 넘어갈 수 없다.

    HW적으로 다음 명령문 주소를 예측하고 미리 명령문을 fetch시킨다.
    또한 틀린 예측에 대해서 Undo할 수 있어야 한다.

     

    데이터 위험


    앞 명령문의 계산 결과를 다음 명령문에서 사용. 파이프 라인을 바로 채우너서 실행할 수 없다.

    실행순서를 조절한다.
    연속된 명령문들중 먼저 실행 가능한 것을 찾고, 컴파일러가 SW적으로 지연이 최소화 되로록 명령문 순서를 바꾼다.
    이를 명령문 스케쥴링 이라고 한다.
    (컴파일러가 의존관계들을 분석하여 실행한다.)

     

    스케쥴링 로직을 하드웨어 자체에 넣어서 하드웨어에서 처리하도록 하는 out of order processor 방식이 있다.

    728x90

    '프로그래밍언어론' 카테고리의 다른 글

    서브루틴과 제어 추상화  (1) 2023.05.22
    제어흐름-수식1  (0) 2023.04.15
    명령문구조  (0) 2023.04.14
    아키텍쳐 - 1  (2) 2023.04.14
    다형성 및 관련  (2) 2023.04.12

    댓글

Designed by Tistory.