반응형

📝파이프라인 / 파이프라이닝

CPU 내부에는 여러가지 일꾼들이 있습니다

대표적인 일꾼으로 읽기, 해석, 실행, 기록이 있습니다

 

 

 

시간에 따른 명령어 처리를 도식화할 시 위 이미지와 같습니다

마치 파이프와 비슷한 형태이죠? 이걸 파이프라인이라고 합니다

명령어(덧셈, 뺄셈 등)가 들어왔을 때 먼저 해당 명령어를 읽고 해석한 뒤 실행시키고 기록이 필요한 경우 기록합니다.

하지만 이렇게 하나의 명령어가 끝날때까지 다른 파트들이 노는 시간이 발생합니다 이렇게 되면 그 후에 들어오는 명령어에 대한 처리가 길어지겠죠

 

 

이걸 해결 하기 위해서는 노는 시간에 다른 명령어들이 들어오도록 하면 됩니다.

밑 사진과 같은 방식으로 처리할시에는 노는 시간도 없어지고 리소스를 최대한 활용이 가능하겠죠?

이러한 행동을 파이프라이닝이라고합니다 → 물론 그만큼 CPU에 부담이 가긴 합니다

 

인텔에서는 CPU의 파이프라인이 길어 명령어를 많이 축적시킬 수 있고 AMD에서는 파이프라인 폭이 넓다고합니다

폭이 넓다는 건 "읽기 처리하는 파이프라인이 여러개이다"라고 해석이 가능할 것 같습니다

 

 

📝클럭

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    clock_t start, end;
    double result;


    start = clock();			// 현재 시간 반환

    long sum = 0;
    for (long i = 0; i <= 380000000; i++) {
        sum += i;
    }

    end = clock();
    result = (double)(end - start);

    printf("수행 시간 : %f", result);

    return 0;
}

CPU의 속도를 나타내는 단위로서 1초동안 파장이 한번 움직인 시간을 의미하는데 클럭이 높아질수록 발열량과 소비 전력이 커지는 문제 생긴다 → CPU 3.8GHz 의 경우 1초당 (380,000,000) = 3억 8천만의 연산이 가능하다

위에는 3억 8천만번 덧셈 연산을 한 결과이다 보면 대략 1초가량 걸린 걸 확인할 수 있다

 

📝하이퍼스레드

물리적인 CPU(2코어[2개의 CPU] 4코어[4개의 CPU] 등)을 논리적인 CPU로 나누어서 처리하는 방법

즉 2코어 4스레드의 경우 1개의 CPU를 2개의 CPU로 인식시켜서 처리하게 한다

 

파워포인트, 카카오톡, 크롬, 엑셀을 사용한다고 가정하자

멀티 프로세싱의 경우 (2개 설정 시) 파워포인트에 1번 CPU를 카카오톡에 2번 CPU를 할당한다 그리고 크롬과 엑셀의 경우 1번 또는 2번에서 번갈아가면서 처리한다

 

하이퍼스레드의 경우 2개의 CPU(듀얼코어)인 경우 4개의 논리적 CPU가 생겨난다

1번 스레드의 경우 파워포인트, 2번 스레드의 경우 카카오톡, 3번 스레드의 경우 크롬, 4번 스레드의 경우 엑셀

이렇게 실행되게 된다

게임의 경우 하이퍼스레드를 사용하면 4개를 병렬적으로 처리하기 때문에 더 빠른 화면 렌더링이 가능하다

물론 게임도 하이퍼스레드를 지원하는 프로그램이여야만 한다

하지만 어떤 처리가 CPU를 많이 먹는 경우 하이퍼 스레드를 안 쓰는게 좋다 → 100%를 50% 50%로 분할하기 때문이다

 

🔗 참고 및 출처

https://smsinfo.tistory.com/514

반응형