봉황대 in CS
[Chapter 1. 컴퓨터 추상화 및 관련 기술] 전력 장벽과 멀티 프로세서의 등장 (병렬 프로그래밍) 본문
[Chapter 1. 컴퓨터 추상화 및 관련 기술] 전력 장벽과 멀티 프로세서의 등장 (병렬 프로그래밍)
등 긁는 봉황대 2022. 8. 14. 21:16* 본 글은 '컴퓨터 구조 및 설계: 하드웨어/소프트웨어 인터페이스(Computer Organization and Design: The Hardware/Software Interface) 5th edition'의 내용과 2021학년도 1학기에 수강한 '컴퓨터 구조' 과목 강의 내용을 함께 정리하여 작성하였습니다.
전력 장벽
아래의 그림은 지난 30년간 클럭 속도와 소비 전력이 어떻게 증가했는지를 보여준다.
클럭 속도와 소비 전력은 오랫동안 빠르게 증가하다 최근에 주춤해지는 것을 확인할 수 있다.

속도와 전력이 함께 증가하는 이유는 둘이 서로 연관되어 있기 때문이고,
성장이 정체된 이유는 상용 마이크로 프로세서의 냉각 문제 때문에 실제로 사용할 수 있는 전력이 한계에 도달하였기 때문이다.
그래프를 보면 클럭 속도는 1000배가 증가하는 동안 전력은 고작 30배 증가하였음을 볼 수 있는데,
이 이유를 설명하려면 전력을 구하는 공식을 알아야 한다.
집적회로의 주된 기술인 CMOS가 에너지를 소비하는 주원인은 동적 에너지이다.
* CMOS : complementary metal oxide semiconductor
동적 에너지란 트랜지스터가 0에서 1로 혹은 1에서 0으로 스위칭하는 동안에 소비되는 에너지를 말하며,
각 트랜지스터의 용량성 부하와 인가되는 전압에 의해 결정된다.
아래의 식은 0 → 1 → 0 혹은 1 → 0 → 1으로 논리 값이 두 번 바뀔 때 소모하는 에너지이다.

한번 바뀔 때 소모되는 에너지는 다음과 같다.

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

새로운 공정기술이 나올 때마다 전압은 낮아졌고, (대략 15%씩 낮아짐)
전력은 전압의 제곱에 비례하기 때문에 소비전력이 낮아질 수 있었다.
20년 동안 전압이 5V에서 1V로 줄었고,
스위칭 빈도 즉, 클럭 속도가 1000배로 증가했기 때문에 전력은 고작 30배만 증가할 수 있었다.
전압을 더 낮추면 누설 전류가 너무 커지기 때문에 더 이상 전압을 낮출 수가 없다.
따라서 컴퓨터 설계자들은 초창기 30년 동안 마이크로프로세서를 설계하는 것과는 다른 방식을 선택하게 되었다.
* 참고
1. 누설 전류
동적 에너지가 CMOS 에너지 소모의 주요인이긴 하지만,
트랜지스터가 꺼져있을 때도 흐르는 누설 전류 때문에 정적 에너지 소모가 존재한다.
(서버에서 전체 에너지 소모의 40%는 누설 전류에 의한 것)
즉, 트랜지스터가 많아지면 꺼져있을지언정 전력 소모가 늘어나게 된다.
2. 전력이 집적회로에서 골치 아픈 문제인 이유
(1) 전력이 칩 전체로 전달되어야 한다. (현대의 마이크로프로세서는 전력과 접지를 위해 수백 개의 핀을 사용하고 있음)
(2) 전력이 열로 낭비되는데 열을 제거해야 한다. → 냉각 비용이 상당한 부분을 차지
단일 프로세서에서 멀티 프로세서로의 변화
전력 한계 문제는 마이크로프로세서 설계에 극적인 변화를 가져왔다.
아래의 그림은 데스크톱 마이크로프로세서의 프로그램 응답 시간 개선 추세를 보여주며,
2002년부터 개선 속도가 둔화되어 매년 1.5배에서 1.2배로 줄어든 것을 확인할 수 있다.

단일 프로세서에서 한 프로그램의 응답시간을 계속 줄여나가는 대신,
2006년에 모든 데스크톱과 서버 회사는 칩에 여러 개의 프로세서를 집적한 마이크로프로세서를 생산하였다.
이는 응답시간보다는 처리량 개선에 더 효과가 있다.
* 프로세서 = 코어
* 마이크로프로세서 = 멀티코어 마이크로프로세서
과거에 프로그래머는 코드를 한 줄도 안 바꾸고 하드웨어와 컴퓨터 구조, 컴파일러의 혁신에만 의존하여도
18개월마다 2배씩의 성능 개선을 누릴 수 있었다.
하지만 오늘날에는 응답 시간을 현저히 개선하려면 다중 프로세서의 장점을 살리도록 프로그램을 재작성해야 한다.
병렬성은 컴퓨팅의 성능에 늘 중대한 역할을 하였으나, 대개 드러나지 않고 숨어있다.
파이프라이닝(Pipelining)은 명령어의 실행을 중첩시켜서 프로그램을 빠르게 실행시키는 기술로, 명령어 수준 병렬성의 한 예이다.
하지만 프로그래머가 명시적 병렬 프로그램을 작성하는 것은 어려운 일이다.
그 이유는 다음과 같다.
1.
병렬 프로그래밍은 정의상 성능을 중시하는 프로그래밍이고, 이것이 프로그래밍의 어려움을 가중시킨다.
이미 정확하고, 중요한 문제를 해결하며, 사용자가 편리한 인터페이스를 제공하는 것도 쉽지 않은데,
그 위에 실행시간이 빨라야 하기 때문이다.
2.
병렬 하드웨어에서 빠르게 수행된다는 것은
각 프로세서가 비슷한 양의 일을 동시에 수행하도록 응용을 분할해야 하고,
병렬성으로부터 얻을 수 있는 잠재적인 성능의 이득을 침해하지 않도록 분할된 일을 스케줄링하고 조정하는 오버헤드가 작아야함을 의미하기 때문이다.
병렬성을 강조하여 하드웨어가 발전해나가는 만큼
프로그래머는 병렬성을 고려하여 성능을 개선시키는 병렬 프로그래밍에 관심을 귀 기울여야 한다.
'Computer Science & Engineering > Computer Architecture' 카테고리의 다른 글
[Chapter 2. 명령어: 컴퓨터 언어] 이진수와 2의 보수 표현법, 부호확장, 16진수 (0) | 2022.08.17 |
---|---|
[Chapter 2. 명령어: 컴퓨터 언어] 명령어 집합과 MIPS(산술, 메모리, 상수 연산), 레지스터와 메모리의 역할 (0) | 2022.08.16 |
[Chapter 1. 컴퓨터 추상화 및 관련 기술] Amdahl의 법칙, MIPS (0) | 2022.08.15 |
[Chapter 1. 컴퓨터 추상화 및 관련 기술] 컴퓨터의 성능과 CPU Time (0) | 2022.08.13 |
[Chapter 1. 컴퓨터 추상화 및 관련 기술] 컴퓨터와 추상화, 명령어 집합 구조(ISA) (0) | 2022.08.12 |