티스토리 뷰
파이프 라인
컴퓨터 과학에서 파이프라인(영어: pipeline)은 한 데이터 처리 단계의 출력이 다음 단계의 입력으로 이어지는 형태로 연결된 구조를 가리킨다. 이렇게 연결된 데이터 처리 단계는 한 여러 단계가 서로 동시에, 또는 병렬적으로 수행될 수 있어 효율성의 향상을 꾀할 수 있다. 각 단계 사이의 입출력을 중계하기 위해 버퍼가 사용될 수 있다.
대표적인 파이프라인 구조는 다음과 같은 것들이 있다.
- 명령어 파이프라인: 같은 CPU 회로 안에서 여러 명령어들이 단계적으로 수행되는 것을 가리킨다. 각 명령어는 다시 페치, 디코딩, 연산 등의 세부 주기로 나뉘어 각 파이프라인 단계에 의해 수행된다.
- 그래픽스 파이프라인: 대부분의 그래픽 카드는 그래픽 처리 과정을 3차원 사영, 윈도 클리핑, 셰이딩, 렌더링 등으로 나누어 각각의 하부 모듈에서 병렬적으로 수행한다.
- 소프트웨어 파이프라인: 한 소프트웨어의 출력이 자동으로 다른 소프트웨어의 입력으로 연결될 경우 이를 소프트웨어 파이프라인이라고 한다. 유닉스 계열 운영체제에서 사용되는 파이프가 대표적이다.
캐시
캐시(cache, 문화어: 캐쉬, 고속완충기, 고속완충기억기)는 컴퓨터 과학에서 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다. 캐시는 캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을 절약하고 싶은 경우에 사용한다. 캐시에 데이터를 미리 복사해 놓으면 계산이나 접근 시간 없이 더 빠른 속도로 데이터에 접근할 수 있다.
FLOPS
플롭스(FLOPS, FLoating point Operations Per Second)는 컴퓨터의 성능을 수치로 나타낼 때 주로 사용되는 단위이다.
초당 부동소수점 연산이라는 의미로 컴퓨터가 1초동안 수행할 수 있는 부동소수점 연산의 횟수를 기준으로 삼는다. 상위 단위와 하위 단위로 국제단위계의 표준 접두어를 사용하며, 슈퍼 컴퓨터의 성능을 나타낼 경우에는 테라플롭스(1×1012 플롭스)가 주로 쓰인다. 2010년 10월 현재 가장 빠른 슈퍼컴퓨터는 톈허-1A로, 그 속도는 2.507PFLOPS(2.507×103TFLOPS)이다.
개인용 컴퓨터의 CPU 성능의 척도로 클럭의 속도 단위인 헤르츠를 주로 사용하는데, 이는 마이크로프로세서의 아키텍처의 구조에 따라 클럭당 연산 속도가 다르기 때문에 객관적인 성능을 비교할 때에는 플롭스를 사용한다.
superscalar
슈퍼스칼라(superscalar)는 CPU 내에 파이프라인을 여러 개 두어 명령어를 동시에 실행하는 기술이다. ILP를 최대한 적용하여 실행하면 CPU 처리 속도가 빨라진다. 파이프라인이 하나라면 클럭당 하나의 명령어만 완료할 수 있었다 (다시 말해 IPC가 1이다). 이 값을 높이려면 파이프라인을 여러 개 두어 명령어를 동시에 실행시켜야 한다. 파이프라인이 2개라면 이상적으론 클럭마다 최대 2 개의 명령어를 처리할 수 있어 IPC=2가 된다. 보통 슈퍼스칼라 프로세서는 동시에 처리(투입/완료)가 가능한 명령어 개수에 따라 N-이슈, N-와이드(wide), N-웨이(way) 슈퍼스칼라라고 표현한다. 이상적으로는 N개의 명령어를 읽어 파이프 라인에 넣을 수 있지만(fetch), 실제로는 명령어 캐시의 제약, 명령어 사이의 의존성, 분기문 때문에 N개보다 작은 명령어만 넣을 수 있을 때가 일반적이다.
명령어 사이에 데이터 의존성, 자원 의존성, 프로시저 의존성이 존재하는 경우에는 동시실행에 제한이 있다.
분기예측
분기 예측(영어: branch prediction)은 다음 실행될 조건문이 어떤 곳으로 분기할 것인지를 확실히 알게 되기 전에 미리 추측하는 CPU 기술이다. 분기 예측기(branch predictor)[1][2][3][4][5]는 분기 예측을 수행하는 디지털 회로를 가리킨다. 분기 예측을 수행하는 목적은, 명령어 파이프라인이 일시적으로 정지되지 않도록 하는 것이다. 최신 x86 아키텍처와 같이 많은 수의 파이프라인을 사용하는 구조에서 분기 예측기는 전체적인 성능을 크게 향상시킬 수 있다.
조건 분기 명령이 명령어 파이프라인에 입력되면, 조건 분기의 다음 명령은 둘 중 하나로 정해진다. 만약 파이프라인이 조건 값의 계산이 끝날 때까지 대기한다면, 조건 분기 명령이 전체 파이프라인을 통과할 때까지 다음 명령은 파이프라인에서 수행되지 못하고 대기하게 될 것이다. 분기 예측기는 이런 낭비를 막기 위해 단순한 알고리즘에 따라 다음 명령을 미리 추론한 후 미리 실행시킨다. 만약 분기 예측기의 예측이 맞으면 파이프라인은 낭비 없이 계속 수행되며, 예측이 틀릴 경우 미리 실행되던 명령이 파이프라인에서 모두 취소되고 올바른 명령이 다시 실행된다.
분기 예측기가 올바른 예측에 실패하면 파이프라인의 개수 만큼의 클럭 주기가 낭비된다. 복잡한 파이프라인 구조를 가진 현대 아키텍처에서는, 분기 예측기가 실패하면 10-20 클럭 주기가 낭비된다.
조건 분기문이 처음 파이프라인에 들어왔을 때 활용할 수 있는 정보는 많지 않다. 분기 예측기는 해당 조건 분기문이 분기한 이력이나 루프 구조, 함수 구조 등의 정보를 바탕으로 다음 분기를 예측한다.
멀티 코어
멀티 코어 또는 멀티 코어 프로세서(multi-core processor) CPU는 두 개 이상의 독립 코어를 단일 집적 회로로 이루어진 하나의 패키지로 통합한 것이다. 칩 레벨 멀티프로세서(CMP)라고도 한다.
듀얼 코어(dual-core) 프로세서는 두 개의 코어를 포함하고 있으며, 트리플 코어(triple-core) 프로세서는 세 개의 코어를 포함하고 있고, 쿼드 코어(quad-core)는 네 개의 코어를 포함하고 있고, 헥사 코어(hexa-core) 프로세서는 여섯 개의 코어를 포함하고 있다. 옥타 코어(octa-core) 프로세서는 여덟 개의 코어를 포함하고 있다. 데카코어(deca-core) 프로세서는 열 개의 코어를 포함하고 있다. 도데카 코어(dodeca-core) 프로세서는 열두 개의 코어를 포함하고 있다.
멀티 코어 마이크로프로세서는 멀티프로세서 기능을 단일 물리 패키지에 추가하였다. 하나의 다이에 모든 코어를 가진 프로세서를 모놀리식 프로세서(Monolithic Processor)라고 부른다. 멀티 코어 장치 안의 코어는 하나로 연결된 캐시를 최고 수준의 장치 캐시 수준에서 공유할 수 있으며(이를테면 인텔 코어 2의 2차 캐시), 두 개의 캐시(이를테면 AMD 듀얼 코어 프로세서)를 가질 수도 있다. 각 코어는 슈퍼스칼라 실행, 파이프라인 처리, 멀티스레딩과 같은 최적화를 독립적으로 수행한다. 코어의 개수에 따라, 그 개수만큼의 스레드를 동시에 처리할 때 효율적으로 동작한다. 상업적으로 가장 중요한 멀티 코어 프로세서들은 컴퓨터(주로 인텔, AMD)와 게임기(플레이스테이션 3의 셀 프로세서)에서 사용된다. 문맥상 "멀티"(multi)는 보통 상대적으로 작은 수의 코어를 뜻한다. 그러나 이 기술은 네트워크 프로세서, 디지털 신호 처리장치, 그래픽 처리 장치와 같은 임베디드 프로세서 등의 다른 기술 분야에도 널리 쓰인다.
'TIL WIL' 카테고리의 다른 글
항해 99 TIL-14 최초의 프로그래밍 언어 (0) | 2022.02.18 |
---|---|
항해 99 TIL-13 초기의 프로그래밍 (0) | 2022.02.17 |
항해 99 TIL-11 명령어와 프로그램 (0) | 2022.02.15 |
항해 99 TIL-10 중앙 처리 장치 (CPU) (0) | 2022.02.14 |
[WIL-5week] 2021.02.07~02.13 (0) | 2022.02.13 |