상세 컨텐츠

본문 제목

CPU Clock은 무엇이고 어떻게 활용될까?

CS지식 학습

by Tabris4547 2023. 10. 12. 11:34

본문

728x90

"이거 10분이면 다 할 수 있어요"

이 뜻은 나는 이 일을 10분안에 처리할 수 있는 능력을 가졌다는 의미입니다.

일을 하다보면 같은 걸 줘도

사람마다 일 처리속도가 다르고

만약 작업결과물이 비슷하다고 가정하면

빨리 일을 처리한 사람이 일을 잘한다고 평가받습니다.

컴퓨터도 역시 빨리 작업을 처리할수록

성능이 높다고 평가받습니다.

이 작업시간을 나타내주는 지표

clock에 대해서 알아보겠습니다.

 

Clock

출처:https://velog.io/@juni416/Clock-Cycle

 

Clock신호를 정의하면

CPU의 속도를 나타내는 단위입니다.

클럭은 1초동안 그림처럼 파장이 뛰는 횟수를 의미하고

clock이 높을수록 데이터를 빨리 처리하게 됩니다.

Clock은 CPU에서의 시간단위라고 해석할 수 있습니다.

 

Clock cycle

출처:https://www.intel.co.kr/content/www/kr/ko/gaming/resources/cpu-clock-speed.html

clock cycle은 위의 클락이 얼마나 반복되는지를 나타냅니다.

'클럭 속도'라고도 표현하는데요

클락 반복주기가 많을수록

1초에 처리할 수 있는 연산량이 많다는 걸 의미합니다.

위의 그림처럼 주파수가 점점 커질수록

클럭신호가 더 많이 반복되는 걸 볼 수 있습니다.

현재 그림을 보면 약 2배 단위로

작업성능이 좋아지는 걸 볼 수 있습니다.

 

Clock속도가 높으면 무조건 좋을까?

하지만 clock속도가 높아지면 그만큼 단점도 있습니다.

가장 꼽히는 문제로 전력소비와 발열문제가 있습니다.

클락신호를 많이 만들수록

더 많은 전기적 신호를 필요하기 때문에

그만큼 전력소비가 많이 증가합니다.

그리고 전력소비가 증가한만큼 CPU내부의 열이 증가하면서

발열이 더욱 심해져 적절한 냉각시스템이 필요합니다.

위의 그림처럼 스마트폰의 예를 들어보겠습니다.

스마트폰 안에 들어가는 CPU의 clock이 빠를수록

앱 실행 속도는 빠르겠지만

그 대신에 배터리가 빨리달고

핫팩처럼 금방 뜨거워져서

잘못하다간 기기고장으로 이어질 수 있습니다.

그래서 clock속도가 높은 CPU를 제작하기 위해서는

발열이나 전력소비 이슈도 함께 해결해야하기 때문에

CPU비용도 증가합니다.

 

Clock Period와 동기화

한 클락이 끝나는 시간을 clockPeriod라고 합니다.

ClockPeriod는 일정한 시간간격으로 나뉘어집니다.

동일한 clock을 기준으로 동작하는

동기화 과정에서 clock간격은 매우 중요합니다.

해당 그림은 제가 사용했던 FND모듈의 데이터시트입니다.

SCK이라는 Clock 사이클을 중심으로

다양한 신호를 함께 처리한다는 걸 알수 있습니다.

만약 Clock간격이 불규칙하다면

각각의 동작의 데이터가 필요할 떄

싱크가 맞지 않아 작업이 제대로 처리되지 않을 수 있습니다.

https://linecard.tistory.com/34

 

동기식 전송 방식과 비동기식 전송방식

동기화 (Synchronization)의 개요 전송매체로 연결되는 두 장치 간에 데이터를 교환하기 위해 전송되는 비트들의 타이밍 (전송율, 전송시간, 간격)이 송신측에 있어서 똑같아야 한다. 동기화란 송신

linecard.tistory.com

이런 동기화를 활용한 예시 중 하나로

동기 통신방식이 있습니다.

데이터 전송에 clock신호를 별도로 추가해

양방향 시차차이를 없애서

데이터 전송에 정확성을 높입니다.

 

 

간결한 코드는 클럭을 줄어준다

int main() {
    int i;
    int sum = 0;
    int n = 1000000;  // 큰 값

    for (i = 1; i <= n; i++) {
        sum += i;
    }

    printf("Sum: %d\n", sum);

    return 0;
}
int main() {
    int i;
    int sum = 0;
    int n = 1000000;  // 큰 값

    sum = (n * (n + 1)) / 2;

    printf("Sum: %d\n", sum);

    return 0;
}

0~n까지의 합을 출력하는 코드입니다.

두 코드 모두 실행결과는 같지만

아래 코드는 코드작업이 위의 코드 대비 확 줄어들었습니다.

위의 코드는 n번까지 작업해야하는데 반해

아래의 코드는 등차수열공식을 활용해 반복문이 필요가 없습니다.

이처럼 반복이 많고 복잡한 코드를 간결하게 줄일 수 있다면

수행할 것이 줄어들면서 clock도 최소화할 수 있습니다.

 

 

 

파이프라인

CPU는 주어진 clock을 기준으로 

좀 더 효율적으로 작업을 수행할 수 있습니다.

만약 여러 작업이 들어온다면

CPU가 수행해야할 작업이 많아지기 때문에

그만큼 clock이 많이 필요하게 되고

작업시간증가로 이어집니다.

이는 단순히 clock을 늘리는 것만으로는 해결하는데 한계가 있어

병렬적으로 작업을 수행하는 방법을 만들었습니다.

그 방법이 파이프라인 기법이라고 부르는 방법으로

그림처럼 여러 작업을 병렬적으로 수행하는 작업입니다.

만약 위의 5개의 명령어를

순서대로 실행한다면 25clock이 필요했겠지만

다음과 같이 병렬적으로 수행하도록 구조를 만들어

9클락안에 5작업이 끝나도록 만들었습니다.

 

 

 

728x90

관련글 더보기

댓글 영역