코딩스토리

Chapter 2. 컴퓨터의 발전과 성능 본문

컴퓨터구조

Chapter 2. 컴퓨터의 발전과 성능

kimtaehyun98 2020. 11. 26. 22:59

# 본 내용은 한국항공대학교 길현영 교수님의 '컴퓨터 구조' 강의 및 컴퓨터 아키텍처(우종정, 한빛 아카데미)를 바탕으로 작성한 글입니다.

 

1. 컴퓨터의 발전

 

최초의 컴퓨터들 (현대 컴퓨터 이전의)은 대부분 계산기와 비슷했다. 

 

1642년 파스칼의 계산기 : 다이얼의 위치에 의하여 십진수를 표시하는 원형판 세트들로 구성 (프랑스)

1671년 Leibniz의 기계 : 사칙연산 가능한 계산기, 파스탈의 계산기에 두 개의 원형판을 추가해 반복적 방법으로 계산

19세기 초 Charles Babbage : 미분 기관, 해석 기관, 일반 목적용 계산 기계였으며, 프로그램 언어 최초 사용

 

현대 컴퓨터의 발전

 

디지털 컴퓨터의 추상적인 컴퓨팅 모델을 제시한 엘런 튜링 등 수많은 과학자에 의하여 현대 컴퓨터가 탄생하였다고 한다. 나는 지금까지 엘런 튜링이 컴퓨터를 만들었다고 알고 있었는데 그건 아니었다.

엘런 튜링은 '튜링 머신'이라는 가상의 기계로 컴퓨터의 틀을 잡은 것이고 현대 컴퓨터의 모델은 그 유명한 '폰 노이만'이 제시했다고 한다.

 

폰 노이만은 이번 학기에 처음 알게 되었는데, 인공지능 입문 강의에서 매 강의마다 폰 노이만의 업적에 대해 듣다보니 그가 얼마나 대단한 사람인지 알게 되었다.

 

어쨌든 폰 노이만은 현대 컴퓨터의 모델을 제시했다.

 

IAS 컴퓨터라고 하는데 쉽게 설명하면 메모리와 cpu(중앙처리장치)를 분리한 구조로, 저장과 연산을 분리해서 진행하는 구조이다. 

앨런 튜링의 유니버설 기계 모델을 구체화한 형태로 아직까지도 기본 모델로 쓰인다고 하는데 200년 전에 벌써 이런 구조를 생각하고 설계해냈다는게 얼마나 대단한 지 새삼 느껴진다.

 

개인용 컴퓨터

General purposed machine, 짧은 영어 지식으로 번역해 보자면 다목적 기계이다.

ex) 데스크탑 pc, 노트북 pc, 태블릿 pc 등등

 

임베디드 컴퓨터

기계 장치나 전자 장치들의 내부에 포함되어, 그 장치들의 동작을 제어하는 컴퓨터

최소의 비용으로 필요한 만큼의 성능 제공

ex) 가전제품(냉장고의 시스템 같이 정해진 기능만 수행하는 컴퓨터), 이동전화기 등

 

슈퍼 컴퓨터

처리 속도와 기억장치 용량이 상대적으로 월등한 컴퓨터 시스템들

최근 대규모 병렬컴퓨터로 발전하는 추세라고 한다.

 

 

현대 컴퓨터의 주요 부품들

 

트랜지스터 : 초기 전자식 컴퓨터의 핵심 부품인 진공관을 대체한 전자 부품

 

집적 회로 (IC) : 수만 개 이상의 트랜지스터들을 하나의 반도체 칩에 집적시킨 전자 부품

-> 동작 속도 상승, 컴퓨터 크기 감소, 가격 하락

 

초고밀도 집적회로 (Very-large-scale integration; VLSI)는 IC (집적회로) · LSI (고밀도집적회로)로 발전되어 온 전자회로 부품의 소형 경량화를 더욱 진전시킨 회로 (feat. wiki)

 

무어의 법칙 : 단일 마이크로 칩에 포함된 트랜지스터의 수가 18개월마다 약 2배씩 증가한다는 것

교재에 따르면 앞으로 최소 10년 까지는 무어의 법칙이 유효하나, 이미 반도체 집적 기술이 한계에 도달했기 때문에 법칙을 유지하기 힘들 것이라 보며, 이를 '무어의 벽'이라고 한다.

 

2. 컴퓨터의 성능

 

드디어 뭔가 제대로 된? 컴퓨터 구조 강의를 정리하는 기분이다.

앞의 내용들은 상식 + 암기 라면 지금부터는 이해가 동반되야 한다.

 

성능의 정의를 살펴보면 '기계 따위가 지닌 성질이나 기능'이라고 한다.

그렇다면 컴퓨터의 성능은? 

 

보통 컴퓨터의 성능 하면 떠오르는 건 속도일 것이다.

빠르면 빠를수록 성능이 좋은 것 아닌가? 

단순하게 보면 틀린 말은 아니다. 하지만 같은 단순히 '속도'만을 지표로 삼으면 안 된다.

강의에서는 아래와 같은 예제를 들었다.

 

ex) 한 번에 커피 한 잔을 5분 만에 뽑아내는 커피머신 A, 한 번에 커피 두 잔을 7분 만에 뽑아내는 커피머신B 중 어느 것의 성능이 더 좋을까?

 

커피머신이 커피 한잔을 뽑아내는 데에 걸리는 시간은 짧지만 여러 잔을 뽑을 때 걸리는 시간은 B가 더 짧을 것이다.  

이렇듯 응답 시간, 처리율 중 어떤 관점에서 바라보냐에 따라 다르다. 

 

그럼 응답시간, 처리율 등 어떤 걸 기준으로 삼아야 할까?

 

우리는 컴퓨터의 성능 = CPU 실행시간으로 정의할 것이다.

즉, 컴퓨터의 성능이 좋다 = CPU의 실행시간이 짧다 (반비례 관계)

 

이를 정량화해보면 아래와 같다.

  n = m2의 성능/m1의 성능 = m1의 실행 시간/m2의 실행 시간

이는 컴퓨터 M2는 M1보다 성능이 n배 좋다 로 표현 가능하다. 

 

암달의 법칙

 

암달의 법칙은 시스템의 일부분을 개선하는 경우, 전체 시스템에서 얻을 수 있는 최대 성능 향상을 구할 때 사용된다.

 

시스템의 일부분 f를 병렬화 또는 하드웨어의 개선을 통해 성능을 n배 향상 시키고, 나머지 (1-f) 부분은 그대로라 하면,

기존 성능 향상 전의 기계를 M1, 성능 향상 이후의 기계를 M2라 하면

시스템 전체 성능 향상 s는 아래와 같다.

 

이때 m은 m1의 실행 시간, 즉 원래 실행시간이다. 

만약 개선 가능 부분에 대해 병렬화 또는 하드웨어 사용이 무한정이라면, n이 무한대로 가게 된다. 

즉 식은 아래와 같다.

 

식으로만 보면 이해가 잘 안 되니 예제로 살펴보자.

 

부동소수점 연산의 수행이 50%를 차지하는 프로그램이 있을 때, 다음 물음에 답하라.

 

Q) 부동소수점 연산을 위해 하드웨어를 2배 빠르게 만든다면 수행 시간이 얼마나 향상되는가?

A) 부동소수점 연산이 50%이기 때문에 f = 0.5가 될 것이고, 하드웨어가 2배 빨라지므로 n = 2가 될 것이다.

    따라서 s = 1.33이 될 것이다. 

 

단순히 식에 넣어 계산하면 되지만 원리를 이해하고 있어야 까먹지 않는다.

 

Q) 이 프로그램을 2배 빠르게 수행하려면 부동소수점 연산을 위한 하드웨어를 얼마나 개선해야 하는가?

A) 2배 빠르게 수행한다는 것은 s = 2, 이때의 n의 값을 구하면 된다. 구해보면 무한대가 나올 텐데, 나도 처음엔 내가 잘못 계산했나 고민했는데 답을 보니 무한대였다.. 무한대를 두려워하지 말자

 

위의 예제에서 프로그램을 2배 빠르게 수행한다는 게 얼마나 힘든 일인지(정확히 말하면 불가능) 알 수 있다.

 

참고로 n을 무한대로 가정했을 때의 성능 향상을 최대 성능 향상이라 하며 아무리 프로그램을 개선시켜도 최대 성능 향상을 넘어가는 개선은 불가능하다.

 

 

CPU 성능 분석

 

cpu 성능에 영향을 주는 요소는 여러 가지가 있다.

 

먼저 명령어의 개수다.

cpu는 명령어를 해독하고 명령어가 지시하는 대로 일을 진행한다. 

따라서 명령어의 개수는 곧 컴퓨터 입장에서는 프로그램의 크기를 의미한다.

 

그렇다면 '명령어의 개수 * 명령어 당 평균 시간' 또는 'k = 1~n까지 Ck∗(Ck 시간)의 합'을 구하면 된다.

그럼 명령어의 실행시간은 어떻게 구해야 할까?

 

컴퓨터는 명령어를 실행하기 위해 클록 사이클을 사용한다.

 

잠시 클록 (Clock)에 대해 살펴보자.

 

대부분의 현대 컴퓨터는 클락을 갖고 있다고 한다. 

이 Clock을 통해 CPU는 정해진 시간에 맞춰 프로그램을 수행한다.

쉽게 말하면 클락이 한번 뛰는 동안 CPU가 명령어를 수행한다. 

그렇다면 이 클락이 빠르다면 당연히 CPU가 많은 일을 할 수 있을 것이다.

클락 속도가 빠르면 CPU가 보다 더 많이 일을 처리할 수 있다는 뜻이다. 

(클락 속도에 맞춰서 CPU가 일함 -> 클락 속도가 빠르면 많이 일함)

 

Clock 속도(rate)는 단위로 Hz를 사용한다.

위의 그림을 보면 보다 쉽게 이해할 수 있다.

0과 1 신호가 한 번씩 실행되는 주기 수로 1Hz = 1번 / sec, 1KHz = 1000번/sec,... (MHz, GHz 도 10^3번씩 증가)

 

그렇다면 Clock cycle 은 1/clock rate로 나타낼 수 있다.

 

처음에는 이해가 잘 안 됐는데 다시 살펴보면

 

먼저 clock rate가 1KHz라 예를 들어보자. 

clock rate = 1초에 몇 번 clock이 딸깍 하는지

따라서 예시의 clock은 1초에 1000번 딸깍 한다.

그렇다면 한 번의 clock이 딸깍 하는 건  1/1000초이다.

즉 clock cycle = sec/1000 = 1/KHz 임을 알 수 있다.

 

그럼 이제 하나의 명령어를 실행하려면 클락 사이클이 필요하다는 것을 알았다.

이때 하나의 명령어를 실행할 때 필요한 클락 사이클의 수를 CPI라고 한다.

당연히 명령어마다 다르고, 평균 CPI를 사용하기도 하고, 각각을 사용하기도 한다.

 

이제 드디어! 원래 우리가 알고 싶었던 CPU 실행 시간을 구할 수 있게 되었다!

 

CPU 실행시간 = 

CPU 실행시간

즉 명령어 개수 * (명령어의 실행 시간)

 = 명령어 개수 * (명령어 실행시 필요한 clock cycle의 수 * 한 clock cycle에 걸리는 시간)

 = 명령어 개수 * 평균 CPI * 사이클 시간

인 것이다.

 

'사이클 시간'이라고 적혀있어서 헷갈렸는데 사실 정확한 표현이다.. 이해력이 안 좋은 내 탓이지..

 

지금까지 CPU의 성능 분석에 알아봤다. 단순히 명령어 말고도 여러 요소들이 있지만 중요한 점은 어느 하나의 요소도 독립적으로 CPU의 성능을 결정할 수 없다는 것을 알 수 있다.

 

ex) 실행되는 명령어 개수는 알고리즘과 명령어 집합 구조에 영향받음

     평균 CPI성능은 알고리즘, 명령어 집합 구조와 컴퓨터 구성에 영향받음

     클럭 사이클 시간은 명령어 집합 구조,, 컴퓨터 구성 및 개발 수준에 영향받음)

 

 

추가적으로 벤치마크란 성능을 평가하기 위하여 작업 부하로 선택된 프로그램의 모음인데, SPEC 벤치마크가 가장 유명하다고 한다. 성능 평가의 척도에는 CPI, 클록 속도, MIPS, MFLOPS 등이 있는데 아래 사진을 통해 간단히 보고 넘어가자.

 

 

MIPS

 

MFLOPS

 

Comments