파이프라인(컴퓨팅)

Pipeline (computing)

컴퓨팅에서 데이터 파이프라인이라고도 [1]하는 파이프라인은 직렬로 연결된 데이터 처리 요소의 집합입니다. 여기서 한 요소의 출력은 다음 요소의 입력입니다.파이프라인의 요소는 병렬 또는 시간 분할 방식으로 실행되는 경우가 많습니다.버퍼 스토리지는 요소 사이에 삽입되는 경우가 많습니다.

컴퓨터 관련 파이프라인은 다음과 같습니다.

  • 명령 파이프라인(클래식 RISC 파이프라인 등)은 중앙처리장치(CPU) 및 기타 마이크로프로세서에서 사용되며 동일한 회로로 여러 명령을 중복 실행할 수 있습니다.회로는 보통 여러 단계로 나뉘며 각 단계는 한 번에 한 명령의 특정 부분을 처리하여 부분 결과를 다음 단계로 전달합니다.스테이지의 예로는 명령 디코드, 산술/논리 및 레지스터 페치가 있습니다.슈퍼스칼라 실행, 오퍼랜드 포워딩, 추측 실행 및 순서 어긋남 실행과 관련된 기술입니다.
  • 그래픽스 파이프라인여러 개의 연산장치(GPU)로 구성되며, 일반적인 렌더링 작업의 다양한 단계(투사, 윈도 클리핑, 컬러 및 라이트 계산, 렌더링 등)를 구현합니다.
  • 일련컴퓨팅 프로세스(명령어, 프로그램 실행, 태스크, 스레드, 프로시저 등)로 구성된 소프트웨어 파이프라인은 개념적으로 병렬로 실행되며, 한 프로세스의 출력 스트림은 다음 프로세스의 입력 스트림으로 자동으로 공급됩니다.UNIX 시스템콜 파이프는 이 개념의 전형적인 예입니다.
  • HTTP 파이프라인. 새로운 HTTP 요구를 발행하기 전에 이전 HTTP 요구가 완료될 때까지 기다리지 않고 동일한 TCP 접속을 통해 여러 HTTP 요구를 발행하는 기술입니다.

일부 운영체제[example needed] UNIX와 같은 구문을 제공하여 파이프라인 내의 여러 프로그램 실행을 문자열화할 수 있지만,[citation needed] 다음 프로그램을 시작하기 전에 각 프로그램이 완료될 때까지 기다리면서 파이프라인 작업이 아닌 단순한 직렬 실행으로 구현합니다.

개념과 동기

파이프라인은 일상 생활에서 흔히 사용되는 개념입니다.예를 들어, 자동차 공장의 조립 라인에서는 엔진 설치, 후드 설치, 휠 설치와 같은 각각의 특정 작업이 종종 별도의 작업 스테이션에 의해 수행됩니다.역들은 각자 다른 차 안에서 동시에 업무를 수행한다.한 가지 작업을 수행한 차량은 다음 정거장으로 이동합니다.작업을 완료하는 데 필요한 시간의 변동은 다음 정거장이 이용 가능하게 될 때까지 "버퍼링"(역 사이의 공간에 하나 이상의 차량을 보유) 및/또는 "스톨링"(상류 정거장을 일시적으로 정지)을 통해 수용될 수 있다.

한 대의 자동차를 조립하는 데 각각 20분, 10분 및 15분이 걸리는 세 가지 작업이 필요하다고 가정합니다.그리고 세 가지 작업을 모두 한 정거장에서 수행한다면, 공장에서는 45분마다 한 대의 차량을 출력할 것입니다.이 공장은 3개 스테이션의 파이프라인을 사용하여 첫 번째 차량을 45분 만에, 그리고 20분마다 새 차량을 출력했습니다.

이 예에서 보듯이 파이프라인은 지연, 즉 하나의 항목이 시스템 전체를 통과하는 총 시간을 감소시키지 않습니다.그러나 시스템의 throughput, 즉 첫 번째 항목 이후에 새로운 항목이 처리되는 속도가 증가합니다.

설계에 관한 고려 사항

스테이지의 밸런스 조정

파이프라인의 throughput은 가장 느린 요소의 throughput보다 좋을 수 없기 때문에 설계자는 작업 및 자원을 단계별로 분할하여 작업을 완료하는 데 모두 같은 시간이 소요되도록 해야 합니다.위의 자동차 어셈블리의 예에서 세 가지 작업이 각각 20분, 10분 및 15분이 아닌 15분씩 소요된 경우 지연 시간은 여전히 45분이지만 새 차량은 20분이 아닌 15분마다 완료됩니다.

버퍼링

이상적인 상황에서 모든 처리 요소가 동기화되어 처리 시간이 동일한 경우 각 항목은 이전 요소에 의해 해방된 것과 마찬가지로 단일 클럭 사이클로 각 요소에 의해 수신될 수 있습니다.이렇게 하면 물길의 파도처럼 일정한 속도로 송유관을 통과하게 됩니다.이러한 「파형 파이프라인」[2]에서는, 데이터 항목에 필요한 스토리지 외에, 스테이지간의 동기나 버퍼링은 불필요합니다.

일반적으로 파이프라인 단계 간의 버퍼링은 처리 시간이 불규칙하거나 파이프라인에 따라 항목이 생성되거나 파괴될 수 있는 경우에 필요합니다.예를 들어 화면에 렌더링되는 삼각형을 처리하는 그래픽스 파이프라인에서 각 삼각형의 가시성을 체크하는 요소는 보이지 않는 경우 삼각형을 폐기하거나 부분적으로 숨겨져 있는 경우 요소의 삼각형 조각을 둘 이상 출력할 수 있습니다.버퍼링은 애플리케이션이 첫 번째 단계에 항목을 공급하고 마지막 단계의 출력을 소비하는 비율의 불규칙성을 수용하기 위해서도 필요합니다.

2단계 사이의 버퍼는 단순히 2단계 간의 적절한 동기 및 신호 로직을 가진 하드웨어 레지스터일 수 있습니다.스테이지 A가 데이터 항목을 레지스터에 격납하면, 「데이터 사용 가능」신호를 다음의 스테이지 B로 송신한다.B는 해당 데이터를 사용한 후 A에 "데이터 수신" 신호로 응답합니다.스테이지 A는 다음 데이터 항목을 레지스터에 저장하기 전에 이 신호를 기다리면서 정지합니다.스테이지 B는 다음 항목을 처리할 준비가 되었지만 스테이지 A가 아직 해당 항목을 제공하지 않은 경우 정지하고 "데이터 사용 가능" 신호를 기다립니다.

요소의 처리 시간이 가변적일 경우, 종종 파이프라인 전체가 정지하고 해당 요소와 이전 요소가 입력 버퍼 내의 항목을 소비할 때까지 기다려야 할 수 있습니다.이러한 파이프라인 정지 빈도는 해당 단계의 입력 버퍼에 여러 항목을 위한 공간을 제공함으로써 줄일 수 있습니다.이러한 복수 항목 버퍼는 보통 선입선출 큐로 구현됩니다.큐가 가득 차도 업스트림스테이지가 정지해야 할 수 있지만 버퍼 슬롯이 많아지면 이러한 이벤트의 빈도는 감소합니다.큐잉 이론은 처리 시간의 변동성과 원하는 성능에 따라 필요한 버퍼 슬롯의 수를 알 수 있습니다.

비선형 파이프라인

일부 스테이지가 다른 스테이지보다 훨씬 오래 걸리고 속도를 높일 수 없는 경우 설계자는 1개의 입력 버퍼와1개의 출력 버퍼를 사용하여 그 태스크를 병렬로 실행하는2개 이상의 처리 요소를 제공할 수 있습니다.각 요소는 현재 데이터 항목의 처리를 마치면 공통 출력 버퍼로 전달하고 공통 입력 버퍼에서 다음 데이터 항목을 가져옵니다.이러한 "비선형" 또는 "동적인" 파이프라인의 개념은 단일 대기 대기열에서 고객에게 서비스를 제공하는 2개 이상의 계산원을 가진 상점이나 은행에 의해 예시됩니다.

항목 간 종속성

일부 어플리케이션에서 A단계에 의한 항목 Y의 처리는 파이프라인의 일부 후단계 B단계에 의한 이전 항목 X의 처리 결과 또는 효과에 의존할 수 있다.이 경우 스테이지 A는 아이템 X가 스테이지 B를 클리어할 때까지 아이템 Y를 올바르게 처리할 수 없습니다.

이 상황은 명령 파이프라인에서 매우 자주 발생합니다.예를 들어, Y가 이전 명령 X에 의해 수정되었어야 했던 레지스터의 내용을 읽는 산술 명령이라고 가정합니다.A를 명령 오퍼랜드를 가져오는 스테이지로 하고 B를 지정된 레지스터에 결과를 쓰는 스테이지로 합니다.명령 X가 스테이지 B에 도달하기 전에 스테이지 A가 명령 Y를 처리하려고 하면 레지스터에 이전 값이 포함되어 Y의 효과가 잘못될 수 있습니다.

이러한 경합을 올바르게 처리하려면 파이프라인에 이러한 경합을 검출하고 적절한 조치를 취할 수 있는 추가 회로 또는 로직을 제공해야 합니다.이를 위한 전략은 다음과 같습니다.

  • 정지:A와 같이 영향을 받는 모든 단계는 종속성이 해결될 때까지, 즉 필요한 정보를 사용할 수 있거나 필요한 상태에 도달할 때까지 중지됩니다.
  • 항목 순서 변경:스테이지 A는 일시 정지하는 대신 항목 Y를 제쳐두고 입력 스트림에서 이전 항목과 보류 중인 종속성이 없는 후속 항목 Z를 찾을 수 있습니다.명령 파이프라인에서는 이 기술을 순서 외 실행이라고 부릅니다.
  • 추측 및 역추적:항목 간 의존성의 중요한 예 중 하나는 명령 파이프라인에 의한 조건부 분기 명령 X의 처리이다.실행할 다음 명령 Y를 가져오는 파이프라인의 첫 번째 스테이지 A는 X가 피연산자를 가져와 분기 여부를 결정할 때까지 작업을 수행할 수 없습니다.X의 피연산자는 메인 메모리에서 데이터를 가져오는 이전 명령에 의존할 수 있기 때문에 많은 클럭 사이클이 걸릴 수 있습니다.
스테이지 A는 X가 완료되기를 기다리는 동안 멈추는 대신 브랜치를 취할 것인지 여부를 추측하고 그 추측에 따라 다음 명령 Y를 가져옵니다.나중에 추측이 틀린 것으로 판명될 경우(희망되는 경우는 거의 없음), 시스템은 올바른 선택으로 되돌아가서 재개해야 합니다.즉, 스테이지 A 및 그 이후의 스테이지에 의해 이루어진 머신 상태에 대한 변경은 모두 취소해야 하며, 파이프라인에 이미 있는 X 이후의 명령어는 플래시되어야 하며, 스테이지 A는 올바른 명령 포인터로 재시작해야 합니다. 분기 예측 전략은 투기 실행의 특별한 경우입니다.

비용과 결점

파이프라인 시스템은 일반적으로 한 번에 1개의 배치를 실행하는 시스템보다 더 많은 자원(회로 요소, 처리 장치, 컴퓨터 메모리 등)을 필요로 합니다.그 이유는 스테이지가 이러한 자원을 공유할 수 없기 때문입니다.또한 요소 간에 버퍼링 및 추가 동기화 로직이 필요할 수 있기 때문입니다.

또한, 개별 처리 요소 간의 항목 전송은 특히 긴 파이프라인의 경우 지연 시간을 증가시킬 수 있습니다.

파이프라이닝의 추가 복잡성 비용은 특히 추측 및 역추적 전략이 그것들을 처리하기 위해 사용되는 경우, 서로 다른 품목의 처리 사이에 의존성이 있는 경우 상당히 커질 수 있다.실제로 복잡한 명령어 세트에 대해 이 전략을 구현하는 데 드는 비용은 RISCVLIW와 같은 컴퓨터 아키텍처를 단순화하는 몇 가지 급진적인 제안의 동기를 부여하고 있습니다.컴파일러는 명령 파이프라인의 성능을 향상시키기 위해 기계 명령어를 재배치하는 작업도 부담스러워 왔습니다.

새로운 테크놀로지

실제로 최근 몇 년 동안 애플리케이션과 그 기본 하드웨어에 대한 요구가 상당했습니다.예를 들어, 데이터 행을 하나씩 트롤링하는 단일 노드 애플리케이션을 사용하여 파이프라인을 구축하는 것은 빅데이터의 양과 다양성으로는 더 이상 가능하지 않습니다.그러나 Hadoop 또는 Apache Spark와 같은 데이터 분석 엔진이 등장하면서 여러 프로세싱 노드에 대규모 데이터셋을 분산할 수 있게 되어 애플리케이션이 이전에 생각했던 것보다 수백 배 더 높은 효율성을 달성할 수 있게 되었습니다.그 결과, 이러한 방식으로 분산 프로세싱을 사용하는 미드레벨 PC에서도 빅데이터 [3]파이프라인의 구축과 운영을 처리할 수 있게 되었습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ 데이터 파이프라인 개발, Dativa 발행, 2018년 5월 24일 취득
  2. ^ O. Hauck; Sorin A. Huss; M. Garg (1999). Two-phase asynchronous wave-pipelines and their application to a 2D-DCT. semantic scholar. pp. 219–228. doi:10.1109/ASYNC.1999.761536. ISBN 0-7695-0031-5. S2CID 206515615. Retrieved 14 September 2019.
  3. ^ 데이터 파이프라인이란?데이터 파이프라인에서 발행, 2021년 3월 11일 취득

참고 문헌