Skip to main content

Command Palette

Search for a command to run...

[CS] About 파이프라인

파이프라인으로 들가보자~

Updated
•View as Markdown
T

안녕하세요🙇🏻‍♂️ 세상을 더 편리하게 바꾸고 싶은 iOS 개발자 최인호입니다.

Hello 👋 I'm Inho Choi, an iOS developer who wants to change the world more conveniently.

  • 대학교 졸업
  • Apple Developer Academy @ POSTECH 1기
  • KWDC Main Organizer
  • AsyncSwift Organizer

파이프라인이란?

파이프라이닝 기술이라고도 하며 하나의 명령어 사이클을 여러 단계로 나누고 각 단계에서 동시에 다른 세부 작업을 처리하도록 설계하는 것이다.

파이프라인을 이용해 CPU 성능을 높일 수 있다.

💡
간단하게 이야기하면 하나의 명령어를 쪼개서 동시에 실행시키는 것!

Like 큰 함수 쪼개서 병렬 task 로 처리하기

만약 단일 사이클(<-> 파이프라인의 반대) 에 처리를 해야한다면

윗 그림 처럼 해야하지만 파이프라인을 이용하면 아래 그림 처럼 가능하다.

명령어 종류

  • IF - Instruction Fetch 인출

    • 실제 명령어를 메모리에서 읽어 CPU로 가져온다.
  • ID - Instruction Decode 해석

    • 인출한 명령에 포함된 데이터를 가지고 명령어를 해독
  • EX - Instruction Execution 실행

    • 명령어 실행
  • MEM - Memory Access 메모리 접근

    • 메모리 접근
  • WB - Writeback 저장

    • 실행 결과 저장

가장 효율적인 파이프라인 조건

처리 시간이 일정하지 않고 처리 단계가 균등하지 않아 발생하는 파이프라인의 지연, 중지 현상을 Hazard, 해저드라고 한다.

해저드

구조적 해저드

시스템에 하나만 존재하는 리소스(Memory, ALU, Register 등)에 동시에 접근할 때, 발생한다(`리소스 해저드`라고도 한다). 대개, IF와 MEM 과정에서 발생한다. 왜냐면, 2개다 메모리에 접근하기 때문이다. 해결 방법은 2가지가 있다.

  1. Bubble 삽입해 지연

    NOP 명령어를 추가하여 파이프 라인 수행을 일시 중지

  2. 메모리 영역 분리

    이 문제를 해결하는 방법은 간단하다. 메모리를 명령어 영역과 데이터 영역으로 나누면 된다. 그런데, 메모리는 2개로 나누는 것은 이전 모델의 호환성을 지키지 못하게 됨으로 좋은 방법이 아닌 듯 하다. 더 좋은 방법은 메모리를 여러 계층 구조로 나누는 것이다. 메모리에 위에 명령어 캐시와 데이터 캐시를 두고 CPU는 명령어가 없으면 메모리에서 명령어를 읽어와 명령어 캐시에 저장하고, 데이터가 없으면 데이터를 읽어와서 데이터 캐시에 저장하는 구조를 이용하면, 2개의 캐시가 서로 독립적이기 때문에 IF 단계는 MEM, WB 단계에 영향을 주지 않는다. 반대도 마찬가지다. 이렇게, 구조적 해저드를 막을 수 있다.

데이터 해저드 - Data Hazard

다른 명령어있는 데이터에 의존적일 때 발생

해결법

  1. 전방전달

    • 레지스터 파일에 반영되기 전에 EX 단계에서 계산된 결과를 다른 명령어로 전달

    • 추가적인 하드웨어가 필요

  2. 지연

    • 컴파일러 수준에서 해저드 발견 및 NOP 명령어 삽입
  3. 비순차 실행

    • 의존적인 데이터와 관계 없는 명령어 먼저 수행
  4. 프로그래밍 방식 개선

    • 변수를 늘리거나 계산이 완료된 후에 실행해서 해저드 최소화

제어 해저드 - Control Hazard

분기에 의해서 수행하지 않는 명령이 파이프라인에 존재하는 경우 발생

해결책

  1. 분기예측

    • 분기를 예측하여 명령어 수행
  1. 브랜치 지연

    • 컴파일러가 분기문을 발견하면 NOP

    • 손실되는 클럭 동안 프로그램에 영향이 없는 다른 명령을 수행
      (분기가 결정나면 진행하겠다는 의미)

  1. 프로그래밍 방식 개선

    • 조건분기를 최소화하여 해저드 최소화

참고한 사이트

https://yohda.tistory.com/entry/%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B5%AC%EC%A1%B0-CPU-%ED%8C%8C%EC%9D%B4%ED%94%84%EB%9D%BC%EC%9D%B8

https://cs-ssupport.tistory.com/320

More from this blog

[CS] Https는 대칭키일까? 비대칭키일까?

결론: 둘 다 쓴다. 하지만 쓰는 타이밍은 다르다. 자세하기 알아보자. 혹시 모르니 용어는 정리해두자. 암호화 <-> 복호화 해독 = 복호화 비대칭키 해독은 대칭키 해독보다 오래 걸린다. 비대칭키를 쓰는 과정 💡 비대칭키는 대칭키를 만들기 위한 여정에 쓰인다. 뭔 소리지??? 대칭키를 만들기 위해서 비대칭키가 쓰인다고?? 비대칭키 해독은 대칭키 해독보다 오래걸린다. 1. Client가 Server에 접속을 요청하면 서버는 Secret ...

Jun 6, 202417

Xcode Cloud 사용 후기

애플에게 내는 친구비를 내며 Apple Developer 계정을 유지하려면 매년 애플에게 13만원의 친구비를 지불해야한다. 그리고 몇 개 친구 답례 상품을 주는데 그 중 하나가 Xcode Cloud 상품 주는데 안 쓸 이유는 없지 Xcode Cloud 개인에게는 과연? K-Spam 이라는 앱을 오랫동안 구상하고 드디어 출시를 했다. 생각보다 삽질을 많이 한 것 같다. 하지만 사이드 프로젝트의 진정한 의미는 삽질(?)하며 배우는 것이 아니겠나 개...

Jun 3, 202418

iOS Version 주의

앱 버전에는 상위버전이 출시한 상태에서 하위 버전을 아카이브 할 수 없음 예를 들어 출시한 버전이 1.3 이면 1.2로는 아카이브가 불가능함 단, 출시한 적이 없는 앱이라면 버전은 마음대로 지정 가능 App Store Connect의 버전 예를 들어 1.03 이랑 1.1 이랑 비교하면 앱 버전은 1.03 > 1.1 로 인식한다. . 단위로 잘라서 Int로 인식하는 것 같다. 그러니 0은 최대한 사용하지 않고 구분한다면 . 으로 구분해야겠다.

Jun 1, 20248

Toby의 iOS 블로그

34 posts

안녕하세요 세상을 더 편리하게 바꾸고 싶은 iOS 개발자입니다.