안녕하세요. 옆집컴공생입니다. 오늘은 프로세스 효율에 영향을 미치는 부분과 고성능 프로세스 설비에 어떤게 필요한지에 대해 알아볼 것 입니다.
요즘 컴퓨터의 비용은 싸지고 수행 능력과 용량은 커지고 있습니다. 이 발전은 실로 대단한데요. 10~15년 전 IBM mainframe의 성능이(당시에 은행에서 사용하던 슈퍼컴퓨터) 지금의 노트북 성능이라니 굉장하지 않나요?
오늘날 microprocessor 가 할 수 있게 한 건
- 이미지 프로세싱
- 3차원 렌더링
- 음성인식
- 비디오 회의
- 다중매체 저작
- 시뮬레이션 모델링 등등
Cloud service 도 수천개의 서버로 가능해졌습니다.
Microprocessor Speed
프로세스가 고성능화 될 수 있었던 기술들에 대해 이야기해보겠습니다.
1. Pipelinging 파이프링
기름공장에서 도시의 기름을 바로 공급해줍니다. 그럼 파이프가 있어야하겠죠? 이 파이프에는 계속 기름이 흐릅니다.
이처럼 컴퓨터에선 데이터나 instruction의 움직임에 접목을 시켜 생각하면 됩니다.
processors상에서 하나의 동작만을 하는 것이 아니라 다양한 동작을 하는 겁니다. 데이터도 계속 가져와서 처리합니다.
2. Branch prediction 분기명령어
다음번에 프로세싱될 주소에서 미리 instructions 을 가지고 옵니다.
3. Superscalar execution
모든 프로세서들이 하나이상의 명령어를 수행가능합니다.
4. Data flow analysis
데이터의 의존성을 파악하여 명령어 스케줄링을 진행합니다.
5. Speculative execution
추측의 기반으로(정확한 정보의 기반이 아닙니다 )다음 명령어가 실행될때 다음 명령을 예상하여 페치 시킵니다.
프로세스 속도의 중요한 부분은 속도의 차이에서 있습니다. 프로세스는 빠르지만 메모리는 느립니다. floating 은 빠르지만 정수형은 느립니다. 이럴때 속도는 느린 연산에 의존이 됩니다. 그럼으로 균형을 맞추는게 굉장히 중요합니다.
1. Memory 인 경우 한번에 retrieved 되는 크기를 키워야합니다.
2. 메모리를 참조하는 빈도를 줄여야합니다.(Cache를 효율적으로 사용)
3. interface bus 라든지 기술을 빠르게 합으로써 buffering 되는 시간을 줄여야한다.
4. 인터페이스의 속도를 높여서 전체적인 속도의 불균형을 해결해야한다.
프로세스의 속력 높이기(shrinking logic gate size)
-트랜지스터와 같은 반도체의 셀 자체를 줄임 , 작으면 클럭 주파수가 빨라짐
-캐시를 사용해서 성능 높이기
-architecture 과 organization을 계속 변화시켜서 성능을 올린다. (Update)
-병렬 컴퓨터(core 여러개)로 바꿔 효과적인 명령어 실행
Problems with Clock Speed and Logic Density
주파수를 늘리면 성능이 좋아집니다. 또 Logic Density 를 늘리면 성능이 좋아집니다. 하지만 문제가 생기죠.
Power , 소비전력에 문제가 생깁니다. 이는 즉슨 열이 많이 나게 됩니다.
Power 는 C * V^2 * f 에 비례를 합니다.
capacitor C, 전압 V , clock speed f
현재의 컴퓨터가 과거보다 더 큰 팬을 가지고 있는 이유입니다.
RC delay
전자의 이동에 의해 전류가 흐르는 형태입니다. 저항이 높아질수록 전자이동의 속도가 느려집니다. flow에 제한을 받기 때문에 전류가 흐르는 양이 제한 되게 됩니다 .
R = p * (1/a)
저항 면적
Memory latency
프로세스 트렌드
트랜지스터 계속 증가
동작주파수 유지
소비 전력도 유지
그럼 어떻게 트랜지스터 수가 증가하는 걸 감당하나 -> 코어 수를 늘림(프로세스의 성능을 늘리는 게 아니라)
MIC(Many Integrated Core) : 멀티코어 작업을 위해 소프트웨어도 병렬 컴퓨터에 맞게 짜여져야함.
GPU(Graphics Processing Unit) : 멀티코어가 아니라 아주 작은 프로세스 유닛을 사용함. vector processor와 비슷
Amdahl's Law Formula
코드 중에서 f 만큼의 비율을 병렬처리 가능한 부분 입니다.
그럼 당연히 (1-f) 는 병렬처리가 불가능한 부분이겠죠?
속도 향상은 다음과 같은 식이 나옵니다.
(1-f)는 병렬화가 안된 부분이기 때문에 T(1-f)는 단일 프로세서로 해야합니다. 밑에 분수에선 Tf 가 병렬화가 가능하기 때문에 프로세서의 개수만큼 나눠줄 수 있습니다.
식을 정리하면(각 식에 T를 나누어주면 됩니다.) 마지막 부분처럼 됩니다.
결과적으로 코어의 개수가 아무리 많아져도 (N -> 무한) 이 되어도 속도는 1/(1-f) 에 의존합니다.
이 말은 결국 속도향상은 얼마나 병렬화가 이루어졌냐(f가 얼마나 많은 비율을 차지하나)가 중요하다는 말입니다.
또 반드시 연속적으로 의존성있게 그런 순서를 반드시 지켜야하는 부분(병렬화가 불가능)이 얼마나 많은지가 중요하다는 의미입니다.
암다래 법칙은 멀티 프로세스를 썼을 때 싱글 프로세스를 썼을 때보다 얼마간에 speed up이 되는지를 보여주는 법칙입니다.
1-f 는 병렬화가 되지 않은 부분이기 때문에 시간을 줄일 수 없지만 병렬화가 된 부분은 N개의 프로세서로 시간을 줄 일 수 있습니다.
*병렬화가 불가능한 문제들도 존재합니다. (Inherently serial problems/ Newton's method 등)
Little's Law
시스템이 steady state 에 도착을 했을 때 서비스 시간이 얼마나 되는지에 대해 알려주는 법칙입니다.
시스템에 전체적인 특성, 성능을 표현할 때 자주 사용되는 법칙입니다.
Queuing system 에 많이 사용이 됩니다.
Average number of items in a system = Average arrival rate * Average wait time in the system for an item
어떤 시스템의 평균 아이템 수 = 평균 도착 비율 * 평균 대기 시간
System Clock 발생시키는 방법
여러가지 방법이 있습니다.
가장 쉬운건 quartz crystal(수정 발진자)를 사용해서 sin wave를 digital 로 변형시켜서 클럭을 만듭니다.
그외에도 내부적으로 공진 회로를 사용해서 클럭을 발생시킬 수도 있습니다.
평균 계산하기
보통 평균하면 산술 평균을 많이 생각하게 됩니다. 하지만 컴퓨터에서는 기하 평균도 많이 사용 하게 됩니다.
Harmonic mean 하나의 값만이 다를 경우 영향을 많이 받습니다.
이런 Mean 들을 사용해 성능을 비교할 수 있습니다. 계산 방식에 의해서 성능이 달라지게 나옵니다. 즉 상대적입니다.
그래서 이런 이론적인 성능보다도 직접 프로그램을 돌려서 판단합니다. Benchmark라고 합니다.
가장 유명한게 SPEC Benchmark 입니다. (System Performance Evaluation Corporation)
다양한 언어나 영역에 대해 프로그램을 돌려봅니다. 더 자세한 내용은 홈페이지에서 볼 수 있습니다.
https://www.spec.org/benchmarks.html
요약
-Designing for performanace
-Microprocessor speed
-Performance balance
- Improvements in chip
-Multicore
-MICs
-GPUs
-Amdahl's Law
-Little's Law
Performance Issues
-Clock
-Calculating the mean
-Benchmark
-SPEC
'공부 > 컴퓨터 구조' 카테고리의 다른 글
컴퓨터구조5 Internal Memory (0) | 2020.06.12 |
---|---|
컴퓨터구조4 Cache Memory (0) | 2020.06.05 |
컴퓨터구조3 CPU (0) | 2020.05.29 |
컴퓨터 구조1 개요 (0) | 2020.05.26 |
Arithmetic & Logic Unit (0) | 2020.05.25 |