본문 바로가기
CS/컴퓨터 구조

[Chapter 1.3 컴퓨터 구조 및 설계] 컴퓨터 발전의 장벽과 병렬프로세서의 등장, Amdal's law와 MIPS

by 베어 그릴스 2022. 7. 6.
본 정리는 CS422-컴퓨터 구조 및 설계 : 하드웨어/소프트웨어 인터페이스. David A. Patterson,존 헤네시 책을 바탕으로 하고 있음을 미리 알립니다.

전력 장벽


Intel 프롯서가 8세대를 진화한 지난 30년간 클럭 속도와 소비 전력이 어떻게 증가했는지를 보여주는 표

클럭 속도와 소비 전력은 오랫동안 빠르게 증가하다 최근에 주춤해졌다.

속도와 전력이 함께 증가하는 이유는 둘이 서로 연관되어 있기 때문이고, 성장이 정체된 이유는 상용 마이크로 프로세서의 냉각 문제 때문에 실제로 사용할 수 있는 전력이 한계에 도달하였기 때문이다.

 

위 그림에 의하면 클럭 속도가 1000배 증가하는 동안 전력은 고작 30배 증가하였는데,

이 이유를 설명하려면 전력을 구하는 공식을 알아야한다.

 

집적회로의 주된 기술인 CMOS가 에너지를 소비하는 주원인은 동적 에너지 즉, 트랜지스터가 0에서 1로 혹은 1에서 0으로 스위칭하는 동안에 소비되는 에너지를 말한다. 동적 에너지는 각 트랜지스터의 용량성 부하와 인가되는 전압에 의해 결정된다.

에너지 = 용량성 부하 X 전압^2

이 식은 0→1→0 혹은 1→0→1으로 논리 값이 두 번 바뀔 때 소모하는 에너지로 한번 바뀔 때 소모되는 에너지는 다음과 같다.

에너지 = 1/2 X 용량성 부하 X 전압^2

트랜지스터 하나가 소비하는 전력은 한 번 바뀔 때 소모되는 에너지와 시간당 논리 값이 바뀌는 빈도수의 겁이다.

전력 = 1/2 X 용량성 부하 X 전압^2 X 스위칭 빈도

새로운 공정기술이 나올 때마다 전압은 낮아졌고, 전력은 전압의 제곱에 비례하기 때문에 소비 전력이 낮아질 수 있었다. 

20년 동안 전압이 5V에서 1V로 줄었고, 스위칭 빈도 즉, 클럭 속도가 1000배로 증가했기 때문에 전력은 고작 30배만 증가할 수 있었다.

 

한계에 부딪힌 이유는 전압을 더 낮추면 누설 전류가 너무 커지기 때문에 더 이상 전압을 낮출 수 없었기 때문이다.

 

참고사항

더보기

참고: 동적 에너지가 CMOS 에너지 소모의 주요인이긴 하지만 트랜지스터가 꺼져있을 때도 흐르는 누설 전류 때문에 정적 에너지 소모가 존재한다. 서버에서 전체 에너지 소모의 40%는 누설 전류에 의한 것이다. 즉, 트랜지스터가 많아지면 꺼져있을지언정 전력 소모가 늘어나게 된다.

 

참고: 전력이 집적회로에서 골치 아픈 이유가 두 가지 있다.

1. 전력이 침 전체로 전달되어야 한다. 현대의 마이크로프로세서는 전력과 접지를 위해 수백 개의 핀을 사용하고 있다.

2. 전력이 열로 낭비되는데 열을 제거해야 한다.  

 

 

현저한 변화: 단일 프로세서에서 멀티 프로세서로 변화


전력 한계 문제에 부딪힌 후 단일 프로세서에서 한 프로그램의 응답 시간을 계속 줄여 나가는 대신, 칩에 여러 개의 프로세서를 집적한 마이크로 프로세서를 생산하였는데, 이는 응답 시간보다는 처리량 개선에 더 효과가 있다.

 

과거에 프로그래머는 코드를 한 줄도 안 바꾸고 하드웨어와 컴퓨터 구조, 그리고 컴파일러의 혁신에만 의존하여도 18개월마다 2배씩의 성능 개선을 누릴 수 있었다.

 

그러나, 오늘날 응답 시간을 현저히 개선하려면 다중 프로세서의 장점을 살리도록 프로그램을 재작성해야 한다.

 

이러한 병렬성은 컴퓨팅의 성능에 늘 중대한 역할을 하였으나 대개 드러나지 않고 숨어있었다. ex) 파이프라이닝

 

그러나 프로그래머가 이러한 병렬성을 고려하여 프로그래밍하기 쉽지 않고, 이렇게 요구한 회사는 전부 실패해 왔으나, 이러한 역사적인 관점에서 보면 IT 산업계 모두가 미래에는 결국 프로그래머들이 명시적으로 병렬 프로그래밍을 하게 될 것이러고 예측하고 있다는 사실이 놀랍다.

 

프로그래머가 명시적 병렬 프로그램을 작성하는 것이 어려운 이유는 다음과 같다.

  1. 병렬 프로그래밍은 정의상 성능을 중시하는 프로그래밍이고 이것이 프로그래밍의 어려움을 가중시킨다. 이미 정확하고 중요한 문제를 해결하고 사용자가 편리한 인터페이스를 만드는 것도 어려운데 그 위에 실행시간이 빨라야 하기 때문이다.
  2. 병렬 하드웨어에서 빠르게 수행된다는 것은 각 프로 세서가 대략 비슷한 양의 일을 동시에 수행하도록 응용을 분할해야 하고 병렬성으로부터 얻을 수 있는 잠재적인 성능의 이득을 침해하지 않도록 분할된 일을 스케줄링하고 조정하는 오베헤드가 작아야 함을 의미하기 때문이다.

즉, 프로그래머는 병렬성을 강조하여 하드웨어가 발전해나가는 만큼 병렬성을 고려하여 성능을 개선시키는 병렬 프로그래밍에 관심을 귀 기울여야 한다.

 

오류와 함정


(여기서 부르는 함정은 흔히들 하는 실수이고, 오류는 많은 사람들이 공통적으로 잘못 알고 있는 부분이다.)

 

함정 : 컴퓨터의 한 부분만 개선하고 그 개선된 양에 비례해서 전체 성능이 좋아지리라 기대할 수 있다.

 

자주 생기는 일을 빠르게 하라는 위대한 아이디어에 필연적으로 따라오는 '성능을 개선하려는 노력이 얼마나 효과가 있는지는 그 사건이 얼마나 많이 발생하는지와 관련이 있다'는 사실이 하드웨어 설계자와 소프트웨어 설계자를 괴롭혀왔다.

 

프로그램의 개선 후의 실행시간 즉, 성능은 Amdal's law에 의해 알 수 있다.

개선 후 실행시간 = 개선에 의해 영향을 받는 실행시간/개선의 크기 + 영향을 받지 않는 실행시간

 

즉, 100초 걸리는 프로그램에서 80초가 곱셈에 할당된다고 할 때, 곱셈을 2배 빠르게 하면, 이후 60초가 걸리게 된다는 것이다. 즉 곱셈을 2배 개선하여도 프로그램 자체는 2배가 아니라 10/6배 빨라지게 되는 것이다.

 

 

오류 : 이용률이 낮은 컴퓨터는 전력 소모가 작다.

 

보통 서버의 CPU이용률은 대부분이 10%와 50% 사이이고 이용률이 100%인 경우는 전체 시간의 1%도 되지 않는다. 그러나 2012년에 가장 좋은 결과가 나오도록 특별히 제작된 컴퓨터도 작업 부하가 겨우 10%일 때 사용 전력이 33%나 된다.

 

 

함정 : 성능식의 일부분을 성능의 척도로 사용하는 것.

 

이미 앞에서 CPI 혹은 클럭 속도 명령어 개수 중 하나만 가지고 성능을 예측하는 방법은 위험하다는 것을 배웠다.

빈번하게 발생하는 또 하나의 오류는 세 가지 인자들 중에서 두 개만을 사용하여 성능 비교하는 것이다.

 

실제로 실행시간 대신 성능 척도로 사용하자고 제안된 거의 모든 대안이 결국은 왜곡된 결과나 틀린 해석을 유발하였다.

 

실행 시간 대신 쓸 수 있는 척도로 MIPS(millions instructions per second)가 있다. 말 그대로 프로그램의 실행 속도를 백만 개의 명령어 단위로 나타낸 것이다.

MIPS 공식

즉, 빠른 컴퓨터일수록 높은 MIPS 값을 갖는다.

 

MIPS에도 3가지 문제가 있다.

  1. 단순히 명령어를 실행하는 속도를 나타낼 뿐이지, 그 명령어 하나가 얼마나 많은 일을 수행하는지는 반영하지 못한다. 즉, 명령어 집합이 다르면 명령어 개수가 달라지기 때문에 단순히 MIPS 값으로만 성능을 비교할 수는 없다.
  2. 같은 컴퓨터에서도 어떤 프로그램을 실행하느냐에 따라 MIPS 값이 달라진다.
  3. 많은 명령어를 실행하지만 빠른 명령어를 사용하는 프로그램으로 바꾸는 경우, 컴퓨터 성능과는 반대로 MIPS 값이 작아진다.

 

정리


전압을 더 이상 낮출 수 없어 전력 장벽에 막히게 되었고, 이에 따라 다중 프로세서가 등장하였다.

 

이에 프로그래머는 응답 시간을 현저히 개선하려면 다중 프로세서의 장점을 살리도록 병렬 프로그래밍을 고려하여 프로그램을 재작성해야 한다.✅

 

우리가 흔히 하는 실수 중 하나는 컴퓨터의 한 부분만 개선하고 그 개선된 양에 비례해서 전체 성능이 좋아지리라 기대하는 것이고, 이에 Amdal's Law를 잘 고려하여 개발해야 한다.✅

 

컴퓨터 성능 지표 중 MIPS라는 지표가 있는데 이는 실행 속도를 백만 개의 명령어 단위로 나타낸 것이다.

 

그러나 MIPS 지표는 실행시간의 믿음직한 지표가 아니라 결국 실행 속도를 나타내는 것이므로 여러 가지 문제가 있고, 이를 잘 고려하여 사용하여야 한다.✅