※"컴퓨터 구조 및 설계 6판 MIPS EDITION" 책을 간단하게 정리한 내용의 글입니다.※
1.2 컴퓨터 구조 분야의 일곱 가지 위대한 아이디어
설계를 단순화하는 추상화
추상화를 통해 하위 수준의 상세한 사항을 안 보이게 하고 상위 수준 모델을 단순화한다. 이를 통해 생산성을 높일 수 있다.
자주 생기는 일을 빠르게
자주 생기는 일을 빠르게(common case fast) 만드는 것이 드물에 생기는 일을 최적화하는 것보다 성능 개선에 도움이 된다. 또한 자주 생기는 일이 오히려 단순해서 개선하기 쉬운 경우가 많다.
병렬성을 통한 성능 개선
파이프라이닝을 통한 성능 개선
컴퓨터 구조에서 많이 볼 수 있는 병렬성의 특별한 형태이다.
예측을 통한 성능 개선
예측이 틀렸을 때 이를 복구하는 비용이 비싸지 않고 예측이 맞을 확률이 비교적 높은 경우, 확실해질 때까지 기다리는 것보다 추측해서 일단 시작하는 것이 평균적으로 빠를 수 있다.
메모리 계층구조
한정된 메모리 자원을 최적화하기 위해 여러 성능을 가진 메모리들이 계층 구조를 이루고 있다.
여유분을 이용한 신용도 개선
장애를 감지하고 장애가 난 소자를 대치할 수 있도록 여유분을 준비하면 컴퓨터의 신용도(dependability)를 개선할 수 있다.
1.3 프로그램 밑의 세계
- 워드 프로세서 같이 복잡한 프로그램을 컴퓨터 하드웨어가 실행할 수 있게하려면 여러 겹의 추상화 계층이 필요하다.
여러 시스템 소프트웨어가 하드웨어와 응용 소프트웨어 사이에 위치하고 있다. - 컴퓨터에 명령을 내리기 위해서는 전기 신호를 보내야하고, 이를 숫자로 표현한다.
- 어셈블러(assembler)는 기호로 된 명령어(어셈블리 언어(assembly language))를 이진수로 바꾸어준다.
또한 C나 Java와 같은 상위 수준 언어를 기계어로 번역하는 컴파일러가 있다.
프로그래머는 상위 수준 언어로 작성하면 된다. 이는 추상화의 위력을 볼 수 있는 부분이다.- 언어를 사용 목적에 적합하게 설계할 수 있다.
- 어셈블리 언어나 기계어로 작성하지 않아도 되기 때문에 프로그래머의 생산성을 높여준다.
1.4 케이스를 열고
컴퓨터의 고전적 구성 요소 5가지
- 입력
메모리에 데이터를 쓴다. - 출력
메모리의 데이터를 읽어서 출력한다. - 메모리
실쟁 중인 프로그램과 프로그램 실행에 필요한 데이터의 저장소이다. - 데이터패스
산술 연산을 수행하는 프로세서 구성요소이다. - 제어 유닛
명령어가 뜻하는 바에 따라 데이터패스, 메모리, 입출력 장치가 할 일을 지시하는 프로세서 구성요소이다. (데이터패스와 제어 유닛을 합쳐 프로세서라고도 부른다.)
- 명령어 집합 구조(instruction set architecture)
명령어, 레지스터, 메모리 접근, 입출력 등을 포함해서 정확히 작동하는 기계어 프로그램을 작성하기 위해서 알아야 하는 모든 정보를 추상화 한 것으로, 하드웨어가 최하위 소프트웨어에게 어떤 명령어를 실행할 수 있는지 제공하는 규격이다.
구조(architecture)라고도 한다. 여러 계층의 추상화 중에서 가장 중요한 것은 하드웨어와 하위 계층 소프트웨어 간의 인터페이스인 명령어 집합 구조(instruction set architecture)이다.
1.5 프로세서와 메모리 생산 기술
1.6 성능
성능의 정의
컴퓨터의 성능은 상황에 따라 여러가지로 정의할 수 있다.
어떤 작업을 끝내기까지 걸린 시간인 응답시간(또는 실행시간)이 중요할 수도 있고, 같은 시간에 더 많은 작업을 처리한 처리량(throughput 또는 대역폭, bandwidth)이 중요할 수도 있다.
(실행시간과 대역폭은 서로 영향을 미치는 관계로, 한쪽이 좋아지면 다른 한쪽도 영향을 받는다.)
책의 전반부에서는 실행시간 측면에서의 성능을 다룬다고 한다.
실행시간과 성능은 다음과 같은 관계를 갖는다.
실행시간과 성능은 반비례 관계이다. 위의 이미지에서 X는 Y보다 n배 빠르다. X를 Y로 교체하면 성능이 1.5배 개선된다.
성능의 측정
컴퓨터에서 프로그램을 실행할 때 동시에 다른 프로그램이 실행될 수 있다.
이때 다른 프로그램이 프로세서에서 실행되는 시간을 포함해서 어떤 작업이 완료되는 시간을 시스템 CPU 시간(system CPU time)이라고 한다. 그리고 순수하게 어떤 작업을 위해서만 CPU가 소비한 실제 시간을 사용자 CPU 시간(user CPU time)이라고 한다.
또한 시스템 CPU 시간을 기준으로 한 성능을 시스템 성능이라고 하고, 사용자 CPU 시간을 기준으로 한 성능을 CPU 성능이라고 한다. 이 책은 CPU 성능에 초점을 맞춘다.
클럭 사이클과 클럭 속도
컴퓨터는 하드웨어 이벤트가 발생하는 시점을 클럭을 통해 구현한다.
클럭의 시간 간격을 클럭 사이클(clock cycle 또는 틱, 클럭 틱, 클럭 주기, 클럭, 사이클)이라고 한다.
클럭 사이클의 역수는 클럭 주기(clock period)이다.
(클럭 사이클이 250ps일 때, 클럭 속도는 4GHz)이다.CPU 성능과 성능 인자
우리는 CPU 성능을 주로 보기로 했다. CPU 성능은 CPU에서 해당 작업을 처리한 실제 시간이고 이는 다음 식으로 표현할 수 있다.명령어 성능
앞서 본 식은 프로그램 수행에 필요한 명령어 개수에 관한 사항이 포함되어 있지 않다. 하지만 실제 실행시간은 프로그램의 명령어 수와 관련이 있다.
위의 식에서 명령어당 클럭 사이클 수(clock cycles per instruction)을 CPI로 줄여 부른다.
CPI는 프로그램이 실행한 모든 명령어에 대해서 평균한 평균 사이클 수를 사용한다.
(명령어 집합 구조(ISA)가 같으면 프로그램에 필요한 명령어 수가 같을 것이고, ISA에 따라 필요한 명령어 수가 달라질 것이다. 그렇기 때문에 CPI는 서로 다른 구현을 비교하는 기준이 될 수 있다. ※같은 ISA라고 하더라도 CPU에 따라 구현이 다르다. 하지만 같은 ISA이면 CPU가 달라도 프로그램을 돌릴 수 있다.)고전적인 성능식
앞선 두 식을 결합한 식이다.
이 식에서 하나의 요소를 개선한다고 해서 CPU 시간이 줄어드는 것은 아니다. 이 세 가지 요소는 각각 연결되어서 하나의 변화가 다른 요소에게 영향을 미치기 때문이다.
그렇기 때문에 CPU 성능을 비교할 때는 이 세가지 요소 중 하나만 봐서는 안되고, CPU 시간 자체로 봐야한다.
1.7 전력 장벽
클럭 속도와 소비 전력은 서로 연관되어서 동시에 증가한다. 그리고 전력이 증가하면 발생하는 열이 증가한다.(CPU 소비 전력의 대부분은 열로 변환된다.)
최근 클럭 속도의 성장이 정체된 이유는 상용 마이크로프로세서의 냉각 문제 때문에 실제로 사용할 수 있는 전력이 한계에 도달했기 때문이다.
1.8 현저한 변화: 단일프로세서에서 멀티프로세서로의 변화
전력 한계 문제로 인해 한 프로세서의 성능을 개선하는 대신 여러 개의 프로세서를 집적한 마이크로프로세서를 생산해서 프로그램 하나의 응답시간보다는 처리량을 개선했다.
- 명시적 병렬 프로그램을 작성하는 것이 어려운 이유
- 병렬 프로그래밍은 성능을 개선하기 위한 것이고, 이 자체가 프로그래밍의 어려움을 가중시킨다.
- 여러 프로세서가 비슷한 양의 일을 동시에 수행하도록 응용을 분할해야하고, 잠재적 오버헤드를 줄여야한다.
1.10 행렬 곱셈 프로그램 개선하기
다음의 병렬화 기법을 통해 파이썬으로 짠 행렬 곱셈 프로그램을 C로 구현하여 개선한다.
- 데이터 수준 병렬성
- 명령어 수준 병렬성
- 메모리 계층 최적화
- 스레드 수준 병렬성
1.11 오류 및 함정
함정: 컴퓨터의 한 부분만 개선하고 그 개선된 양에 비례해서 전체 성능이 좋아지리라고 기대하는 것.
어떤 개선을 할 때는 개선에 영향을 받는 부분이 있을 것이고, 개선에 영향을 받지 않는 부분이 있을 것이다.
Amdahl의 법칙(Amdahl's law)에 따라 일부분만 영향을 받는 개선이 프로그램 전체 실행 시간에 그대로 적용되지는 않는다.
오류: 이용률이 낮은 컴퓨터는 전력 소모가 작다.
서버의 이용률이 낮다고 해서 전력 소모도 낮은것은 아니다. "에너지에 비례하는 컴퓨팅"을 달성하기 위해서는 하드웨어를 알맞게 설계해야 한다.
함정: 성능식의 일부분을 성능의 척도로 사용하는 것.
"MIPS(million instructions er second)"라는 척도가 있는데, 이 지표는 성능에 대한 지표로 쓰기에 적절하지 않다.
1.12 결론
- 추상화의 위대한 아이디어는 오늘날 컴퓨터 시스템을 이해하는 데 필수적이다. 또한 가장 중요한 추상화의 예는 명령어 집합 구조(ISA)일 것이다.
- 실행시간만이 흠잡을 데 없는 유효한 성능 척도이다.
'CS > 컴퓨터구조' 카테고리의 다른 글
[컴퓨터구조] 3 컴퓨터 연산 (3.5 부동 소수점 ~) (0) | 2024.11.05 |
---|---|
[컴퓨터구조] 3 컴퓨터 연산 3.1 ~ 3.4 (1) | 2024.10.15 |
[컴퓨터구조] 2 명령어: 컴퓨터 언어 2.11 ~ (0) | 2024.10.15 |
[컴퓨터구조] 2 명령어: 컴퓨터 언어 2.6~ (1) | 2024.10.08 |
[컴퓨터구조] 2 명령어: 컴퓨터 언어 2.1~2.5 (0) | 2024.10.01 |