2 minute read

명령어 파이프라이닝

- 명령어 파이프라이닝

    명령어를 실행하는데 사용되는 하드웨어를 여러 개의 독립적인 단계들로 분할하여 서로 다른 명령어들을 처리하도록 함으로써 CPU의 성능을 높여주는 기술

- n단계 명령어 파이프라인

    명령어를 실행하는 하드웨어를 n 개의 독립적인 단계로 분할한 것

    - 4단계 명령어 파이프라인

        명령어 인출 (IF), 명령어 해독(ID), 오퍼랜드 인출(OF), 실행(EX)으로 이루어짐

    - 명령어 선인출

        명령어 파이프라이닝에 의해 다음에 실행될 명령어를 미리 인출하는 것

    - 전체 명령어 실행 시간

        T (전체 시간) = k (파이프라인 단계 수) + (N(명령어 수) - 1)

        같은 명령어 클록의 k개의 단계가 N 개의 명령어를 실행하는데 걸리는 시간

        k 시간을 기다린 후 나머지는 이미 누적되므로 N - 1 시간을 더함

    - 속도 향상

        Sp = k x N / k + (N - 1)

        파이프라이닝이 없을 시 처리하는데 k  x N 의 시간이 걸림

    - 문제점

        명령어 인출 및 실행 때마다 모든 파이프라이닝의 작업이 실행되는 것이 아니지만 모든 단계의 파이프라인을 다 통과해야 하므로 시간이 필요없이 소모됨

        모든 단계의 시간이 같은 것이 아니므로 단계 중 가장 긴 시간의 단계를 클록 주기로 잡아야 하므로 실제 속도 향상이 더 낮아짐

        하나의 기억 장치 모듈을 여러 단계가 동시에 엑세스 할 수 없기 때문에 단계끼리 만나면 지연될 수 있음

        조건 분기 시 파이프라인에 쌓인 작업이 필요없어져 사이클이 낭비될 수 있음

    - 보완책

        단계를 매우 쪼개어 각 단계 시간을 같게 만들어 클록 주기를 단축시키는 슈퍼파이프라이닝 구조 사용

        IF 단계와 OF 단계가 직접 액세스하는 CPU 내부 캐시를 명령어 캐시와 데이터 캐시로 분리시키는 방법 사용

        - 조건 분기
            - 분기 예측

                분기가 일어날 것을 예측하고 그에 따라 어느 경로의 명령어를 인출할 지 결정하는 확률적 방법

            - 분기 목적지 선인출

                조건 분기가 인식되면 분기 명령어의 다음 명령어와 조건이 만족할 경우에 분기하게 될 목적지의 명령어도 함께 인출하는 방법

            - 루프버퍼

                파이프라인의 명령어 인출 단계에 포함된 작은 고속 기억장치

                가장 최근에 인출된 일정 개수의 명령어들이 순서대로 저장되어있음

                분기 발생 시 하드웨어가 분기 목적지의 명령어를 버퍼에서 확인한 후 버퍼로부터 인출

                반복 루프가 크지 않다면 그 전체가 루프 버퍼 에 저장될 수 있기 때문에 반복 루프들이 포함된 프로그램을 처리하는 경우에 효과가 높음

            - 지연 분기

                분기 명령어의 위치를 적절히 조정하여 원래보다 나중에 실행되도록 재배치함으로써 성능 저하를 최소하 하는 것

            - 상태 레지스터

                조건 분기 명령어에서 사용하는 조건들이 저장됨

                CPU는 실행 사이클 동안에 조건 분기 명령어가 지정하는 플래그의 값을 검사하여 분기 여부를 결정

                - 플래그

                    각 조건의 상태를 나타내는 비트

- 슈퍼스칼라

    CPU의 처리 속도를 더욱 높이기 위하여 내부에 두개 혹은 그 이상의 명령어 파이프라인들을 포함시킨 구조

    이론적으로는 프로그램 처리 속도가 파이프라인 의 수만큼 높아질 수 있음

    - 데이터 의존성

        파이프라이닝의 명령어들의 사이에 데이터 의존성이 있는 것

        하나가 처리될 때 다른 파이프라이닝이 유휴상태가 될 수 있음

    - m-way 슈퍼 스칼라의 전체 명령어 실행 시간

        T(k) = k + (N-m) / m

    - 속도 향상

        sp = k x N / k + (N-m) / m

        N 이 무한히 갈 수록 실제로는 sp = m

        m배의 효과를 얻을 수 있음

    - 실제

        CPU가 동시에 처리할 수 있는 명령어들의 수가 늘어나게 되면,기억장치와 레지스터에 대한 충돌이 발생하지 않을 수 있도록 하드웨어도 그만큼 추가되어야 함

        실제 프로그램 처리 과정에서는 독립적으로 실행될 수 있는 명령어들이 파이프라인의 수만큼 존재하지 않거나,명령어들 간에 데이터 의존성이 존재하는 상황이 발생하게 되어 파이프라인의 일부 단계가 유휴 상태로 들어갈 수 있음

- 다중 프로세서 구조

    한 시스템 내에 여러 개의 CPU 들을 탑재하는 구조

- 코어
    - CPU 코어

        CPU 칩의 내부회로 중에서 명령어 실행에 반드시 필요한 핵심 부분들로 이루어진 하드웨어 모듈

    - 멀티 코어 프로세스

        하나의 칩에 여러 개의 코어를 넣은 것

    - 독립성

        각 CPU 코어는 시스템 버스 인터페이스와 내부 캐시만 공유

        각 CPU 코어는 프로그램 실행을 독립적으로 수행하며 필요한 경우에만 공유 캐시를 통해 정보를 교환함

    - 멀티 태스팅 (멀티-스레딩)

        독립적인 처리가 가능한 단위로 분할된 태스크 프로그램들이 CPU 코어들에 의해 동시에 처리되는 기술