728x90

💡 파이프라이닝 (Pipelining) 💡

🔍 정의

동시에 여러 개의 명령어를 처리하여 처리량을 올리는 기법

파이프라이닝 (Pipelining)은 명령어를 순차적으로 실행하는 프로세서에 적용되는 기술이다.

하나의 명령어가 실행될 때, 다른 명령어를 실행시켜서 동시에 여러 개의 명령어를 실행시키는 기법이다.

이렇게 동시에 여러 개의 명령어를 처리하여 처리량을 올리는 것이 핵심이다.

이때 명령어에 따라 실행하는 각 단계 수행 속도는 변화가 없으며 처리량만 증가한다.

또한 명령어가 동시에 여러 개가 실행되면서 전체 수행 속도는 향상된다.

🔍 이해

파이프라이닝 (Pipelining)을 이해하기 위해 세탁소에서 세탁물을 처리하는 예제를 많이 사용한다.

세탁소에서 세탁물을 처리하는 절차

  1. (세탁) 세탁물을 세탁기에 넣고 동작시킨다.
  2. (건조) 세탁된 옷을 건조기에 넣고 동작시킨다.
  3. (접기) 건조된 옷을 접는다.
  4. (보관) 접은 옷을 보관한다.

위와 같이 4단계의 절차가 있고, 세탁물 A, B, C가 있다고 가정해 보자.

각 단계를 처리하는데 소요되는 시간은 1시간이라고 가정한다.

위의 순서대로 세탁물 A, B, C를 차례대로 세탁을 하면 아래와 같은 표로 정리할 수 있다.

  1 2 3 4 5 6 7 8 9 10 11 12
세탁물 A 세탁 건조 접기 보관                
세탁물 B         세탁 건조 접기 보관        
세탁물 C                 세탁 건조 접기 보관

각 단계별로 세탁물 A, B, C를 처리하는데 전체 12시간 소요된다.

각 단계가 종료되면 다음 세탁물이 들어올 때까지 계속 대기하고 있는 idle task가 발생하게 된다.

이러한 idle task를 줄여 동일 한 시간 내에 작업 처리량을 증가시키기 위해 파이프라이닝을 사용한다.

아래 표는 파이프라이닝을 적용한 내용을 정리한 표이다.

  1 2 3 4 5 6 7 8 9 10 11 12
세탁물 A 세탁 건조 접기 보관                
세탁물 B   세탁 건조 접기 보관              
세탁물 C     세탁 건조 접기 보관            

각 단계별로 세탁물 A, B, C를 처리하는데 전체 6시간 소요된다.

위 와 같이 동시에 처리 가능한 일들은 동시에 처리하여 전체 작업 속도를 향상하고 동일한 시간 내에 처리량을 증가시킬 수 있다.

파이프라이닝 기술 적용 유무에 대해 비교하면 아래와 같다.

  • p: 단계 수
  • n: 작업 수
  • T: 전체 시간
  • sp: 파이프라이닝을 적용하여 얻을 수 있는 속도 향상
  파이프라이닝 X 파이프라이닝 O
전체 작업 시간 (T) T = p*n 4*3 = 12 T = p+(n-1) 4+(3-1) = 6
속도 향상 (sp)     sp = (p*n) / {p+(n-1)} (4*3)/{4+(3-1)} = 2

위 예제의 경우 파이프라이닝을 적용했을 때, 속도가 2배 상승함을 알 수 있다. 

 

🔍 효율적인 파이프라인 조건

명령을 세분화하여 단계를 더 나눌 수 있다면 처리 속도 향상을 기대할 수 있다.

그러나, 실행할 수 있는 명령어 수에 비해 단계가 너무 많이 세분화되어 있다면 효율성을 기대하기는 힘들다.

  • 각 단계별 처리 시간 일정
  • 각 명령어 처리 단계 균일

또한 위와 같은 두 가지 조건에서 파이프라이닝의 효율이 좋다.

처리 시간이 일정하지 않거나 명령어 처리 단계가 균일하지 않으면 문제가 발생하기도 한다.

이때 시스템에서 발생할 수 있는 잠재적인 위험을 가리키는 '파이프라인 해저드'라는 용어를 사용한다. 


 

💡 해저드 (Hazard) 💡

🔍 정의

파이프라인을 사용하는 명령어가 클럭 사이클 내에 실행하지 못해서 다른 명령어들이 대기하는 상황.

처리 성능을 향상하기 위해 파이프라이닝을 적용하면 명령어를 여러 단계로 분할하여 동시에 실행하면서 문제가 발생할 수 있다.

이를 파이프라인 해저드라고 한다.

파이프라인 해저드 (Pipeline hazard)는 3가지 종류가 있다.

  • 구조적 해저드 (Structural Hazard)
  • 데이터 해저드 (Data Hazard)
  • 제어 해저드 (Control Hazard)

🔍 구조적 해저드 (Structural Hazard)

여러 단계의 파이프라인에서 동시에 수행되는 작업들 사이에 자원 충돌이 발생하는 경우 발생

프로세스의 자원 부족으로 발생한다.

예를 들어,

하나의 명령어가 실행 단계에서 필요한 자원을 이미 사용 중인 경우

다음 명령어의 실행이 지연되거나 중단될 수 있다.

 

🔍 데이터 해저드 (Data Hazard)

파이프라인의 한 단계에서 결과가 아직 사용되지 않은 상태에서
다음 단계에서 해당 결과를 필요로 하는 경우 발생

잘못된 결과가 생성되거나 파이프라인의 동작이 불안정해질 수 있다.

 

위와 같이 데이터의 의존성으로 인해 발생하는 문제를 해결하기 위해

전방전달 (Forwarding) (or 우회전달 (Bypassing)) 이 사용된다.

전방전달은 실행 중인 명령어의 결과를 파이프라인의 이후 단계로 직접 전달하여 데이터 의존성을 우회하는 방법이다.

즉, 이전 명령어의 결과가 아직 메모리에 기록되지 않았더라도,

해당 결과를 다음명령어의 연산에 사용할 수 있도록 한다.

이를 통해 데이터 의존성으로 인한 대기 시간을 줄이고, 파이프라인 성능을 향상할 수 있다.

 

 

🔍 제어 해저드 (Control Hazard)

분기 명령어나 예외 상황과 같이 명령어 흐름을 변경하는 상황에서 발생

예를 들어,

분기 예측이 실패하거나 분기 결과가 다음 명령어의 실행에 영향을 주는 경우

잘못된 명령어가 실행될 수 있다.

 

위와 같은 파이프라인 해저드 문제가 발생하지 않기 위해서

파이프라인 간단화, 지연 슬롯, 예측 기술들을 사용할 수 있으며

파이프라인을 잘 관리하여야 한다.

728x90

'Computer Science > Computer Architecture' 카테고리의 다른 글

5. 패리티비트 & 해밍코드  (0) 2021.08.02
4. 고정소수점 & 부동소수점  (0) 2021.08.02
3. Cache Memory  (0) 2021.07.20
2. CPU  (0) 2021.07.18
1. Structure  (0) 2021.07.14
728x90

💡 패리티비트 & 해밍코드 💡

데이터 오류 검출 방식

🔍 패리티비트 (Parity Bit)?

시리얼 통신에서 데이터의 오류를 검출하기 위한 일종의 장치 중 하나  
정보 전달 과정에서 오류가 생겼는지 검사하기 위해 추가하는 비트로   
전송하고자 하는 데이터의 각 문자에 1비트를 더하여 전송한다.

짝수 패리티
데이터의 모든 1의 개수를 짝수로 맞춰야 한다.
예를 들어, 1100100 의 1의 개수는 3개(홀수) 이므로, 자동적으로 패리티 비트는 1이 되어(11100100) 총 1의 개수는 4개(짝수) 가 된다.

홀수 패리티
데이터의 모든 1의 개수를 홀수로 맞춰야 한다.
예를 들어, 1100100 의 1의 개수는 3개(홀수) 이므로, 패리티 비트는 0이 된다.

짝수 패리티일 때,
데이터가 중간에 손실되서 11100100 이 아닌 11000100 이 가게 된다면 데이터가 손실 되었다는 것을 알 수 있다.

🔍 패리티비트 특징

  • 2bit의 데이터가 손실되면 알아차릴 수 없다.
  • 오류 검출만 할 뿐 수정하지는 않는다.

🔍 해밍 코드 (Hamming code)

데이터 전송 시, 1비트의 에러를 정정할 수 있는 자기 오류정정 코드   
패리티비트를 보고, 1비트에 대한 오류를 정정할 곳을 찾아 수정할 수 있다.

해밍 코드 생성 규칙

2의 n승 번째 자리인 1,2,4번째 자릿수가 패리티 비트.
이 숫자로부터 시작하는 세개의 패리티 비트가 짝수인지, 홀수인지 기준으로 판별한다.

짝수 패리티의 해밍 코드가 0011011일때, 오류 수정

1, 3, 5, 7번째 비트 확인 : 0101로 짝수이므로 '0'
2, 3, 6, 7번째 비트 확인 : 0111로 홀수이므로 '1'
4, 5, 6, 7번째 비트 확인 : 1011로 홀수이므로 '1'

역순으로 패리티비트 '110'을 10진법으로 바꾸면 '6'이므로 6번째 비트를 수정하면 된다.
따라서 수정한 데이터는 0011001이다.

728x90

'Computer Science > Computer Architecture' 카테고리의 다른 글

6. 파이프라이닝  (0) 2023.06.27
4. 고정소수점 & 부동소수점  (0) 2021.08.02
3. Cache Memory  (0) 2021.07.20
2. CPU  (0) 2021.07.18
1. Structure  (0) 2021.07.14
728x90

💡 고정 소수점 & 부동 소수점 💡

고정 소수점과 부동 소수점은 소수점이 포함된 실수를 표현하는 방식.

🔍 고정 소수점(Fixed Point)?

소수점이 고정된 형태   
소수점이 찍힐 위치를 미리 정해놓고 소수를 표현하는 방식   

부호, 정수, 소수로 3요소로 나눠서 표현한다.

🔍 고정 소수점 특징

  • 장점
    실수를 정수부와 소수부로 표현하여 비교적 단순하다.
  • 단점
    표현의 범위가 너무 적어서 활용하기 힘들다.
    정수부는 15bit, 소수부는 16bit

이러한 한계를 해결해주는 것이 부동 소수점이다.

🔍 부동 소수점?

지수의 값에 따라 소수점이 움직이는 방식을 활용한 실수 표현 방법이다.

가수부와 지수부로 표현한다.
가수: 실수의 실제값 표현
지수: 크기를 표현, 가수의 어디쯤에 소수점이 있는지를 나타냄.

🔍 부동 소수점 특징

  • 장점
    고정 소수점 방식보다 훨씬 더 많은 범위까지 표현할 수 있다.
  • 단점
  • 오차가 존재한다
728x90

'Computer Science > Computer Architecture' 카테고리의 다른 글

6. 파이프라이닝  (0) 2023.06.27
5. 패리티비트 & 해밍코드  (0) 2021.08.02
3. Cache Memory  (0) 2021.07.20
2. CPU  (0) 2021.07.18
1. Structure  (0) 2021.07.14
728x90

💡 캐시 메모리 💡

🔍 Cache Memory?

메인 메모리와 CPU간의 데이터 속도 향상을 위한 중간 버퍼 역할을하는 메모리
캐시는 블록(Block)으로 구성. 각각의 블록은 데이터를 담고 있다.

🔍 Cache 특징

  • 장점
  • 주소값을 키로써 접근하기 때문에 메모리 계층 구조에서 가장 빠른 소자. 처리속도가 거의 CPU의 속도와 비슷할 정도의 속도
  • 주 기억 장치를 접근하는 횟수가 줄어들어 컴퓨터의 처리속도가 향상
  • 단점
  • 용량이 적음
  • 상대적으로 가격이 비쌈
  • 지워질 수 있으며 영구적인 메모리가 아니다.
따라서 캐시는 빈도수가 높은 것들 위주로 데이터량이 많지 않은 것이 좋다.

🔍 Cache 종류

Cache memory에는 L1, L2, L3가 있다.   
L은 level의 약자로 L1 -> L2 -> L3 -> 순으로 데이터를 찾는다.

1. L1
CPU 내부에 존재. 프로세서와 가장가까운 캐시
2. L2
CPU와 RAM 사이에 존재. 용량이 큰 캐시
3. L3
보통 메인보드에 존재. 멀티 코어 시스템에서 여러 코어가 공유하는 캐시.

🔍 작동 원리

CPU가 메모리에 접근하기 전 먼저 캐시 메모리에서 원하는 데이터의 존재 여부 확인
이때 필요한 데이터가 있는 경우 hit, 없는 경우를 miss

  • 공간적 지역성: 한 번 참조한 메모리의 옆에 있는 메모리를 다시 참조하게 되는 성질
  • 시간적 지역성: 한 번 참조된 주소의 내용은 곧 다음에 다시 참조된다는 특성

🔍 캐시 미스

1. Compulsory miss (= cold miss) 강제 미스
데이터에 접근시 캐시에 메모리를 올리기 위해 발생하는 캐시 미스.

2. Conflict miss
Cache에서 set의 way가 부족하여 발생하는 miss.
Direct map이나 Set associative 방식에서 같은 부분을 번갈아 가면서 사용하게 되어 발생하는 miss.

3. Capacity miss
캐시의 용량이 부족하여 발생하는 miss.
프로그램 수행 시 접근하는 데이터의 양이 캐시의 사이즈를 넘어갈 경우 miss.

728x90

'Computer Science > Computer Architecture' 카테고리의 다른 글

6. 파이프라이닝  (0) 2023.06.27
5. 패리티비트 & 해밍코드  (0) 2021.08.02
4. 고정소수점 & 부동소수점  (0) 2021.08.02
2. CPU  (0) 2021.07.18
1. Structure  (0) 2021.07.14
728x90

💡 CPU 작동 원리 💡

🔍 CPU?

CPU는 컴퓨터에서 가장 핵심적인 역할을 수행하는 부분.
'인간의 두뇌'
연산장치, 제어장치, 레지스터 3가지로 구성됨

🔍 CPU의 구성

  • 연산장치: 산술 연산과 논리 연산을 수행
    연산에 필요한 데이터를 레지스터에서 가져오고, 연산 결과를 다시 레지스터로 보내 저장.
  • 제어장치: 명령어를 순서대로 실행할 수 있도록 제어
    주기억장치에서 프로그램 명령어를 꺼내 해독
    그 결과에 따라 명령어 실행에 필요한 제어 신호를 기억장치, 연산장치, 입출력장치로 보냄.
    보낸 신호를 받아 다음에 수행할 동작 결정.
  • 레지스터: 고속기억장치로 명령어 주소, 코드, 연산에 필요한 데이터, 연산 결과 등을 임시로 저장
    • 범용 레지스터: 연산에 필요한 데이터나 연산 결과를 임시로 저장하는 레지스터
    • 특수 레지스터: 특별한 용도로 사용하는 레지스터. 용도와 기능에 따라 구분
    • - MAR (메모리 주소 레지스터): 읽기와 쓰기 연산을 수행할 주기억장치 주소 저장 - PC (프로그램 카운터): 다음에 수행할 명령어 주소 저장 - IR (명령어 레지스터): 현재 실행 중인 명령어 저장 - MBR(메모리 버퍼 레지스터): 주기억장치에서 읽어온 데이터 or 저장할 데이터 임시 저장 - AC (누산기): 연산 결과 임시 저장

🔍 CPU 동작

  1. 주기억장치는 입력장치에서 입력받은 데이터 또는 보조기억장치에 저장된 프로그램을 읽어온다.
  2. 중앙처리장치는 프로그램을 실행하기 위해 주기억장치에 저장된 프로그램 명령어데이터를 읽어와 처리하고
    결과를 다시 주기억장치에 저장
  3. 주기억장치는 처리 결과를 보조기억장치에 저장하거나 출력장치로 보냄
  4. 제어장치는 1~3에서 명령어가 순서대로 실행되도록 각 장치 제어

인출 사이클의 마이크로연산

T0: MAR <- PC
T1: MBR <- M[MAR], PC <- PC + 1
T2: IR <- MBR

PC에 지정된 주소를 MAR로 전달.
MAR에 저장된 내용을 토대로 주기억장치의 해당 주소에서 명령어 인출
인출한 명령어를 MBR에 저장

다음 명령어 인출을 위해 PC(프로그램카운터) 값 증가

MBR(메모리 버퍼 레지스터)에 저장된 내용을 IR(명령어 레지스터)에 전달.

ADD Addr명령어 연산

T0: MAR <- IR(Addr)
T1: MBR <- M[MAR]
T2: AC <- AC + MBR

메모리에 저장된 데이터 값을 MBR에 저장
IR에 MBR의 값이 이미 저장된 상태이기 때문에 PC <- PC + 1 명령어는 필요하지 않음.
AC에 MBR을 더한 값 저장.

🔍 용어정리

중앙처리장치 CPU
인간으로 따지면 두뇌에 해당하는 부분
주기억장치에서 프로그램 명령어와 데이터를 읽어와 처리하고 명령어의 수행 순서를 제어함

  • 중앙처리장치는 비교와 연산을 담당하는 산술논리연산장치(ALU)
  • 명령어의 해석과 실행을 담당하는 제어장치,
  • 속도가 빠른 데이터 기억장소인 레지스터로 구성
    개인용 컴퓨터와 같은 소형 컴퓨터에서는 CPU를 마이크로프로세서라고 부름

연산장치
산술 연산과 논리 연산을 수행
연산에 필요한 데이터를 레지스터에서 가져오고, 연산 결과를 다시 레지스터로 보내 저장.

제어장치
명령어를 순서대로 실행할 수 있도록 제어
주기억장치에서 프로그램 명령어를 꺼내 해독
그 결과에 따라 명령어 실행에 필요한 제어 신호를 기억장치, 연산장치, 입출력장치로 보냄.
보낸 신호를 받아 다음에 수행할 동작 결정.

레지스터
고속기억장치로 명령어 주소, 코드, 연산에 필요한 데이터, 연산 결과 등을 임시로 저장

범용 레지스터
연산에 필요한 데이터나 연산 결과를 임시로 저장하는 레지스터
특수 레지스터
특별한 용도로 사용하는 레지스터. 용도와 기능에 따라 구분

MAR (메모리 주소 레지스터)
읽기와 쓰기 연산을 수행할 주기억장치 주소 저장
PC (프로그램 카운터)
다음에 수행할 명령어 주소 저장
IR (명령어 레지스터)
현재 실행 중인 명령어 저장
MBR(메모리 버퍼 레지스터)
주기억장치에서 읽어온 데이터 or 저장할 데이터 임시 저장
AC (누산기)
연산 결과 임시 저장

728x90

'Computer Science > Computer Architecture' 카테고리의 다른 글

6. 파이프라이닝  (0) 2023.06.27
5. 패리티비트 & 해밍코드  (0) 2021.08.02
4. 고정소수점 & 부동소수점  (0) 2021.08.02
3. Cache Memory  (0) 2021.07.20
1. Structure  (0) 2021.07.14
728x90

💡 구조 💡

🔍 컴퓨터 구성 개요

🔍 컴퓨터의 구조

  • CPU: 중앙처리장치. 데이터를 처리하는 역할
  • Memory: 데이터를 저장하는 기능 수행
  • I/O: 컴퓨터와 외부 장치 사이에 데이터를 교환하는 기능 수행
  • System Bus: 위의 모든 컴퓨터 시스템 구성요소들을 연결하여 데이터 전송을 수행

🔍 컴퓨터 시스템

  • 하드웨어: 컴퓨터를 구성하는 기계적인 장치
    하드웨어는 중앙처리장치, 기억장치, 입출력장치로 구성 이들은 시스템 버스로 연결되어 있다.
    시스템 버스는 데이터와 명령 제어 신호를 각 장치로 실어 나르는 역할
    • 중앙처리장치(CPU)
    • 기억장치: RAM, HDD
    • 입출력 장치: 마우스, 프린터
  • 소프트웨어: 하드웨어의 동작을 지시하고 제어하는 명령어 집합
    • 시스템 소프트웨어: 운영체제, 컴파일러
    • 응용 소프트웨어: 워드프로세서, 스프레드시트

🔍 용어정리

중앙처리장치 CPU
인간으로 따지면 두뇌에 해당하는 부분
주기억장치에서 프로그램 명령어와 데이터를 읽어와 처리하고 명령어의 수행 순서를 제어함

  • 중앙처리장치는 비교와 연산을 담당하는 산술논리연산장치(ALU)
  • 명령어의 해석과 실행을 담당하는 제어장치,
  • 속도가 빠른 데이터 기억장소인 레지스터로 구성
    개인용 컴퓨터와 같은 소형 컴퓨터에서는 CPU를 마이크로프로세서라고 부름

기억장치
프로그램, 데이터, 연산의 중간 결과를 저장하는 장치

  • 주기억장치: ROM(Read Only Memory) 비휘발성, RAM(Random Access Memory) 휘발성 속도빠름
  • 보조기억장치: 하드디스크, CD💿, 자기테이프
    레지스터 -> 캐시기억장치 -> 주기억장치(main memory) -> 보조기억장치 (용량🔺, 단순🔺, 저렴🔻, 느림🔻)

입출력 장치

  • 입력 장치: 컴퓨터 내부로 자료를 입력하는 장치 (키보드, 마우스)
  • 출력 장치: 컴퓨터에서 외부로 표현하는 장치 (프린터, 모니터, 스피커)

시스템 버스
하드웨어 구성 요소를 물리적으로 연결하는 선
각 구성요소가 다른 구성요소로 데이터를 보낼 수 있는 통로
용도에 따라 데이터 버스, 주소 버스, 제어 버스로 나눠짐

  • 데이터 버스: 중앙처리장치와 기타 장치 사이에서 데이터를 전달하는 통로
    기억장치와 입출력장치의 명령어와 데이터를 중앙처리장치로 내보내거나,
    중앙처리장치의 연산 결과를 기억장치와 입출력장치로 보내는 '양방향' 버스
  • 주소 버스: 데이터를 정확히 실어나르기 위해서는 기억장치 '주소'를 정해주어야 함
    주소버스는 중앙처리장치가 주기억장치나 입출력장치로 기억장치 주소를 전달하는 통로이기 때문에 '단방향' 버스
  • 제어 버스: 주소버스와 데이터버스는 모든 장치에 공유되기 때문에 이를 제어할 수단이 필요함
    제어버스는 중앙처리장치가 기억장치나 입출력장치에 제어 신호를 전달하는 통로
    신호 종류: 기억장치 읽기 및 쓰기, 버스 요청 및 승인, 인터럽트 요청 및 승인, 클락, 리셋
    제어버스는 읽기 동작과 쓰기 동작을 모두 수행하기 때문에 '양방향' 버스

깃 허브 : 컴퓨터 구조 - 1. 구조

728x90

'Computer Science > Computer Architecture' 카테고리의 다른 글

6. 파이프라이닝  (0) 2023.06.27
5. 패리티비트 & 해밍코드  (0) 2021.08.02
4. 고정소수점 & 부동소수점  (0) 2021.08.02
3. Cache Memory  (0) 2021.07.20
2. CPU  (0) 2021.07.18

+ Recent posts