봉황대 in CS

[Chapter 1. 컴퓨터 추상화 및 관련 기술] Amdahl의 법칙, MIPS 본문

Computer Science & Engineering/Computer Architecture

[Chapter 1. 컴퓨터 추상화 및 관련 기술] Amdahl의 법칙, MIPS

등 긁는 봉황대 2022. 8. 15. 15:33

* 본 글은 '컴퓨터 구조 및 설계: 하드웨어/소프트웨어 인터페이스(Computer Organization and Design: The Hardware/Software Interface) 5th edition'의 내용과 2021학년도 1학기에 수강한 '컴퓨터 구조' 과목 강의 내용을 함께 정리하여 작성하였습니다.

 

 

본서에서는 '오류'와 '함정'이라는 단어를 사용하는데, 각각의 의미는 다음과 같다.

 

오류(Fallacy) : 많은 사람들이 공통적으로 잘못 알고 있는 부분

함정(Pitfall) : 흔히들 저지르기 쉬운 실수

 

 

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

보통 서버의 CPU이용률은 대부분이 10%와 50% 사이이고 이용률이 100%인 경우는 전체 시간의 1%도 되지 않는다.

그러나 2012년에 가장 좋은 결과가 나오도록 특별히 제작된 컴퓨터도 작업 부하가 겨우 10%일 때 사용 전력이 33%나 된다.

 

Amdahl의 법칙 (Amdahl's law)


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

 

자주 생기는 일을 빠르게 하라는 위대한 아이디어에 필연적으로 따라오는

'성능을 개선하려는 노력이 얼마나 효과가 있는지는 그 사건이 얼마나 많이 발생하는지와 관련이 있다'는 사실이

하드웨어 설계자와 소프트웨어 설계자를 괴롭혀왔다.

 

 

개선 후의 프로그램 실행시간(=성능)은 Amdahl의 법칙을 통해 알 수 있다.

 

Amdahl의 법칙이란,

어떤 개선책으로부터 얻을 수 있는 성능의 증가는 개선된 부분이 얼마나 많이 사용되느냐에 따라 제한된다는 법칙이다.

 

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

 

 

즉, 성능을 아무리 높여도 해당 개선책에 영향을 받지 않는 영역이 존재하기 때문에 한계가 있다는 것이다.

 

 

(예제 문제)

총 수행시간 100초에서 80초를 곱연산에 사용하는 시스템이 있다고 하자.

 

1. 해당 시스템의 수행 시간을 4배 빠르게 하고 싶다면 곱셈 연산의 속도를 몇 배 증가시켜야 하는가?

 

여기서 곱연산에 영향을 받는 부분은 80초, 곱연산에 영향을 받지 않는 부분은 100-80 = 20초이다.

시스템의 수행 시간을 4배 빠르게 하려면 총 수행시간은 100/4 = 25초가 되어야 할 것이다.

 

Amdahl의 법칙,

'개선 후 실행시간 = 개선에 의해 영향을 받는 실행시간 / 개선의 크기 + 영향을 받지 않는 실행시간'에 따라 식을 작성한다면

25 = 80/SpeedUp + 20

 

SpeedUp = 16이 되어야 하기 때문에, 곱셈 연산의 속도는 16배 빨라져야 하는 것이다.

 

 

2. 그렇다면 해당 시스템의 수행 시간을 5배 이상 빠르게 할 수 있는가?

 

시스템의 수행 시간을 5배 빠르게 하려면 총 수행시간은 100/5 = 20초가 되어야 할 것이다.

 

하지만 Amdahl의 법칙에 의해 식을 작성한다면

20 = 80/SpeedUp + 20, 80/SpeedUp = 0이 되어야 한다.

 

따라서 아무리 성능을 향상시켜도 해당 시스템의 수행 시간을 5배 이상 빠르게 할 수 없다는 한계가 있다.

 

MIPS (Million Instructions per Second)


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

 

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

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

 

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

 

실행 시간 대신 쓸 수 있는 척도로 MIPS(millions instructions per second)가 있다.

프로그램의 실행 속도를 백만 개의 명령어 단위로 나타낸 것이다.

 

MIPS = 명령어 개수 / (실행시간 × 10^6)

 

 

MIPS는 명령어 실행 속도이므로 실행시간의 역수로 성능을 표시한다.

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

 

 

하지만 컴퓨터의 성능을 비교하는 기준으로 MIPS를 사용하는 데에는 다음의 3가지 문제점이 존재한다.

 

1. 단순히 명령어를 실행하는 속도를 나타낼 뿐이지, 그 명령어 하나가 얼마나 많은 일을 수행하는지는 반영하지 못한다.

    즉, 명령어 집합이 다르면 명령어 개수가 달라지기 때문에 단순히 MIPS 값으로만 성능을 비교할 수는 없다.

 

2. 같은 컴퓨터에서도 어떤 프로그램을 실행하느냐에 따라 MIPS 값은 달라진다.

 

3. 많은 명령어를 실행하지만 빠른 명령어를 사용하는 프로그램으로 바꾸는 경우, 컴퓨터 성능과는 반대로 MIPS 값은 작아진다.

 

 

(예시 문제)

 

 

1. MIPS 관점에서는 어떤 코드 순열이 더 빠른가?

 

2. 실행시간 관점에서는 어떤 코드 순열이 더 빠른가?

 

 


MIPS는 절대적인 시간을 나타내는 것이 아니며,

상대적으로 단위시간 당 몇개의 명령어를 많이 실행하느냐를 나타내는 지표이다.

 

MIPS와 CPI는 상대적인 정보가 적기 때문에

이것만으로 절대적인 성능 평가를 하는 것은 불가능하다. (모든 조건이 동일할 때에는 가능)

 

 

따라서 실행시간만이 흠잡을 데 없이 유효한 성능 척도을 잊지 말아야한다.

 

 

반응형
Comments