출처: https://devraphy.tistory.com/339 [개발자를 향하여:티스토리]
(출처는 위 링크! 형광펜은 개인적으로 공부하면서 체크한 부분입니다)






⭐ 파이프라인(Pipeline) 기법


📌 파이프라인 기법이란

  • 파이프라인 기법은 시간적 병렬 프로세서 구조 라고도 불린다. 
  • 파이프라인 기법은 단일 CPU를 이용하여 병렬처리 시스템과 유사한 연산속도를 만들기 위한 방법이다.
  • 다음 그림 예시와 함께 파이프라인 기법에 대해서 이해해보자. 

1개의 작업을 처리하는데 5개의 마이크로 연산을 수행해야 된다고 해보자.
ex) 작업 = 덧셈 (A, B)
ex) 마이크로연산 = 명령어 로드, 명령어 해석, 오퍼랜드 검색, 연산, 인터럽트 발생유무 등

1개의 작업을 마치는데 5초의 시간이 걸린다고 할 때, 
이처럼 순차적으로 작업을 처리할 때, 5개의 작업을 처리하려면 총 25초의 시간이 걸린다. (아래 그림참고)


그러나 병렬처리의 경우, 이야기가 다르다. 
병렬처리는 단일 CPU가 아니라 다수의 CPU를 가지고 있기 때문에, 동시연산이 가능하다. (아래 그림참고) 


동시 처리가 가능하기에 작업 5개를 완료하는데 5초가 걸린다.


파이프 라인은 병렬처리 시스템과 유사한 연산속도를 만들기 위해, 다음과 같은 방식을 사용한다. 

위의 그림처럼, 중첩을 이용하여 25초 보다 적은 시간안에 동일한 작업량을 처리할 수 있게 하는 것이다. 
작업 1의 1번 연산이 끝나면 해당 연산에 필요한 자원을 놀게 놔두는 것이 아니라, 다음 작업2의 1번 연산을 할당하는 것이다.  
당연히 병렬 처리시스템 만큼의 연산 수행속도를 뽑아낼 수는 없다. 
다만, 기존의 순차적 실행보다 훨씬 시간을 단축 시킬 수 있다



📌 파이프라인의 장단점


파이프라인의 장점

  • 여러개의 작업을 중첩으로 처리하여 작업 처리량과 시간적 효율을 향상시킨다.

파이프라인의 단점

  • 파이프라인을 처리하는 도중 문제가 생기면 전체 연산과정에 문제가 생길 수 있다.
  • 파이프라인을 수행하려면 서로 다른 하드웨어 자원을 사용해야한다. 즉, 각기 다른 메모리 주소를 사용한다.
  • 파이프라인을 사용한다고, 반드시 일정한 비율로 연산속도가 향상되는 것은 아니다.

📌 파이프라인의 동작 방식

  • 파이프라인에서는 클럭펄스세그먼트라는 개념이 사용된다.
  • 각 개념의 의미는 다음과 같다. 

클럭펄스 - 다음 단계의 마이크로 연산으로 넘어갈 때 발생하는 전기신호 
세그먼트 - 단계시점을 의미


📌 파이프라인 정리

  • 파이프라인은 1개의 CPU병렬처리시스템 처럼 사용하기 위해 만들어진 기법이다.

  • 즉, 코드를 처리 및 수행하는 방법론으로, 가성비를 극대화 시키기 위한 방법이라고 이해하면 좋을 것 같다.

  • 파이프라인은 순차적으로 데이터를 처리하지만 병렬적으로 처리할 수 있도록 하는 기법이다.

  • 하나의 프로세스여러개의 서브 프로세스로 나누어, 동시에 서로 다른 데이터를 처리하도록 하는 기법이다.

  • 서브 프로세스가 갖는 각각의 작업을 Segment(세그먼트)라고 부르며

  • 하나의 서브 프로세스여러개의 segment를 갖을 수 있다. 

  • 어떤 세그먼트에서 수행된 연산의 결과가 순차적으로 다음 세그먼트에게 넘어가는 방식으로 동작한다.


/+

명령 파이프라인

이전 명령어가 다른 세그먼트에서 실행되고 있는 동안, 메모리에 연속적으로 저장되어 있는 다음 명령어를 읽어 옴으로 fetch와 실행이 중첩되어 동시에 수행되는 구조이다.

분기가 발생 할 경우(가장 큰 취약점) 현재 파이프라인은 모두 비워져야 하고 분기 명령 이후 메모리에서 있어온 명령어는 모두 무시되어야 한다.


효율적 명령어 실행

  • 명령어 fetch 장치와 명령어 실행장치로 두 세그먼트 파이프라인을 구성하는 방법
    -> 명령어 fetch 장치 -> FIFO에 의한 Queue로 구성되어 메모리 참조에 의해 평균 메모리 접근 시간을 효과적으로 줄여 줌

명령어 파이프라인 수행 시 발생되는 문제

  • 세그먼트 수행 시간이 서로 달라서 발생되는 문제
    -> 두 개 이상의 세그먼트에 의해 동일한 주소 공간이 참조되는 경우
profile
⛅🛩️ 먼 길을 돌아서 온 프론트엔드 개발자 ✈️⛅

0개의 댓글