Computer Abstractions and Technology
#Computer_Architecture
1장: 컴퓨터 추상화 및 기술
컴퓨터 혁명(The Computer Revolution)
- 컴퓨터 기술의 발전은 도메인 특화 가속기(Domain-Specific Accelerators)에 의해 뒷받침됨
- 새로운 응용 프로그램을 실현 가능하게 만듦
- 자동차 내 컴퓨터, 휴대폰, 인간 게놈 프로젝트, 월드 와이드 웹, 검색 엔진 등 다양한 곳에서 사용됨
- 컴퓨터는 우리의 생활 전반에 걸쳐 존재
컴퓨터의 종류(Classes of Computers)
- 개인용 컴퓨터 (Personal Computers)
- 범용 컴퓨터로 다양한 소프트웨어를 사용
- 비용과 성능 간의 상충(tradeoff)이 존재
- 서버 컴퓨터 (Server Computers)
- 네트워크 기반의 컴퓨터
- 높은 용량, 성능, 신뢰성 제공
- 소형 서버부터 건물 크기의 서버까지 다양
- 슈퍼컴퓨터 (Supercomputers)
- 서버의 일종으로 과학 및 공학 계산에 사용
- 최고 성능을 제공하지만 시장 점유율은 매우 적음
- 임베디드 컴퓨터 (Embedded Computers)
- 시스템의 구성 요소로 숨겨져 사용됨
- 전력, 성능, 비용에 엄격한 제약이 있음
포스트 PC 시대
- 개인 휴대 기기 (Personal Mobile Device, PMD)
- 배터리로 작동하며 인터넷에 연결
- 가격은 수백 달러
- 스마트폰, 태블릿, 전자 안경 등 다양한 기기가 포함됨
- 클라우드 컴퓨팅(Cloud computing)
- Warehouse Scale Computers (WSC)
- Software as a Service (SaaS)
- 일부 소프트웨어는 기기(PMD)에서, 나머지는 클라우드에서 실행됨
- ex) AWS, Google
성능 이해하기(Understanding Performance)
컴퓨터의 성능은 다음 요소들에 의해 결정이 된다.
- 알고리즘: 실행되는 연산의 수를 결정
- 프로그래밍 언어, 컴파일러, 아키텍처: 각 연산에 대해 실행되는 명령어 수를 결정
- 프로세서 및 메모리 시스템: 명령어가 얼마나 빨리 실행되는지를 결정
- 입출력 시스템: 입출력 작업이 얼마나 빠르게 실행되는지를 결정
각각의 요소에 대해 살펴보겠다.
컴퓨터 아키텍쳐
아래 일곱 가지 위대한 아이디어를 통해서 컴퓨터 아키텍쳐가 발전했다~
(최근 무어의 법칙이 빠짐)
- 추상화(abstraction)를 사용하여 설계를 단순화
- 일반적인 경우를 빠르게 처리(Make the common case fast)
- 병렬성(parallelism)을 통해 성능 향상
- 파이프라이닝(pipelining)을 통한 성능 향상
- 예측(prediction)을 통한 성능 향상
- 메모리 계층 구조(Hierachy) 사용
- 중복을 통한 신뢰성(Dependability) 향상
프로그래밍 언어, 컴파일러
- 응용 소프트웨어: 고급 언어로 작성
- 시스템 소프트웨어:
- 컴파일러는 고급 언어 코드를 기계어로 변환,
- 운영체제는 입출력 관리, 메모리 및 저장소 관리, 작업 스케줄링 및 자원 공유를 담당
- 하드웨어: 프로세서(CPU), 메모리, 입출력 컨트롤러
프로그램 코드의 계층(Levels of Program Code)
- 고급 언어 (High-level language)
- 문제 도메인에 가까운 추상화 수준 제공
- productivity and portability를 제공
- 어셈블리 언어 (Assembly language): 명령어의 텍스트 표현
- 하드웨어 표현 (Hardware representation): 명령어 및 데이터를 binary 비트로 인코딩
컴퓨터 구성 요소(Components of a Computer)
하드웨어 representation까지 끝난 프로그램은 각 컴퓨터 구성요소에서 동작하게 된다.
- 데스크탑, 서버, 임베디드 시스템 모두 동일한 구성 요소로 이루어짐
- 입출력 장치: 사용자 인터페이스 장치(디스플레이, 키보드, 마우스), 저장 장치(하드 디스크, CD/DVD, 플래시), 네트워크 어댑터(다른 컴퓨터와 통신)
터치스크린(Touchscreen)
- 포스트 PC 기기: 키보드 및 마우스를 대체
- 대부분의 태블릿과 스마트폰에서 정전식 터치스크린(vs 감압식) 사용, 여러 개의 동시 터치 가능
프로세서 내부 구조
위에서 프로세서 및 메모리 시스템은 명령어가 얼마나 빨리 실행되는지를 결정한다고 했다. 프로세서가 어떤일을 하는지 살펴보자.
- 데이터 경로 (Datapath): 데이터 연산 수행
- 연산이 필요 없으면 Dapapath를 탈 필요는 없다.
- 제어부 (Control): 데이터 경로 및 메모리의 순서를 제어
- 캐시 메모리(Cache memory): 데이터를 즉시 접근할 수 있도록 빠른 SRAM 사용
- 요즘은 CPU에 붙어서 나온다.
추상화의 역할(Abstractions)
추상화는 소프트웨어 개발과 하드웨어 설계 간의 중요한 연결 고리(인터페이스) 역할을 한다.
- 추상화(Abstractions)는 복잡성을 처리하는 데 도움을 줌
- lower-level detail을 숨겨준다.
- 명령어 세트 아키텍처(Instruction Set Architecture, ISA): 하드웨어/소프트웨어 인터페이스
- 응용 바이너리 인터페이스(Application binary interface): ISA와 시스템 소프트웨어 인터페이스의 결합
- ISA + OS를 말함
- 맥에서 컴파일 한 것은 윈도우에서 안돌아감
- 구현: 기본 세부 사항 및 인터페이스
- CPU마다 다르다.
데이터 저장 공간(A Safe Place for Data)
- 휘발성 메모리 (Volatile Memory): 전원이 꺼지면 데이터와 명령어가 사라짐
- 메인 메모리(ex. DRAM)
- 비휘발성 메모리 (Non-volatile Memory): 데이터를 영구 저장하는 장치,
- 예: 자기 디스크, 플래시 메모리, 광학 디스크(CD-ROM, DVD), HDD
네트워크(Network)
- 통신, 자원 공유, 비로컬 접근
- LAN(Local Area Network, 근거리 통신망): 이더넷을 사용
- WAN(Wide Area Network, 광역 통신망): 인터넷을 사용
- 무선 네트워크: Wi-Fi, 블루투스
기술 동향(Technology Trends)
capacity와 performance가 계속해서 발전하고 있다.
log scale임. 실제로는 지수적으로 증가함. kibibyte(2^10) : 1024 / kilobyte(10^3) : 1000
kb는 비트, kB는 바이트
반도체 기술
capacity와 performance 발전에는 반도체 기술의 역할이 중요했다~
- 반도체 재료로 실리콘 사용
- 재료를 첨가하여 전도체, 절연체, 스위치 등의 특성을 변형
집적 회로(IC) 제조에서 수율: 웨이퍼에서 작동하는 칩의 비율
성능 정의
어떤 비행기가 최고의 성능을 보일까?
너무나 많은 요소들이 존재한다.
컴퓨터의 성능에 대해 판단할 때는 아래 요소들을 고려해야 한다.
응답 시간과 처리량(Response Time and Throughput)
- 응답 시간(Response Time): 작업을 수행하는 데 걸리는 시간
- 처리량(Throughput): 단위 시간당 수행된 작업의 총량 (예: 시간 당 작업/트랜잭션 수)
- 응답 시간과 처리량은 어떻게 영향을 받는가?
- 더 빠른 프로세서로 교체했을 때?
- 프로세서를 추가했을 때? Response Time에는 영향이 없을 수 있다. Throughput에는 영향이 갈 수 있다.
- Response Time에 집중해서 Single core 성능 향상에 집중하자
상대 성능
성능 : “어떻게 빠르게 끝낼까”라고 생각하고 보자.
성능 정의: 성능 = 1 / 실행 시간
당연히 성능이 낮아지면 실행 시간은 늘어나고, 성능이 높아지면 실행 시간은 줄어든다.
즉, 성능과 실행 시간은 반비례한다.
- "X는 Y보다 n배 더 빠르다"는 표현 = 성능이 n배
- 실행 시간은 1/n배
- 예시: 프로그램 실행 시간
- 컴퓨터 A에서 10초, 컴퓨터 B에서 15초가 걸림
- 실행 시간 B / 실행 시간 A = 15초 / 10초 = 1.5
- 따라서 컴퓨터 A는 컴퓨터 B보다 1.5배 빠름
실행 시간 측정(Measuring Execution Time)
실행 시간을 측정할 때는 경과 시간과 CPU 시간을 구분해야 한다.
경과 시간 (Elapsed Time)은 전체 응답 시간을 의미한다.
- 처리(Processing), 입출력(I/O), OS 오버헤드 및 유휴 시간(idle time) 포함
- 시스템 성능을 결정
CPU 시간(CPU Time): 주어진 작업을 처리하는 데 소요된 시간만을 의미한다.
- 입출력 시간과 다른 작업의 시간을 제외함
- 사용자 CPU 시간과 시스템 CPU 시간으로 구성
- CPU와 시스템 성능에 따라 프로그램이 다르게 영향을 받음
우리는 CPU Time에 대해서 주로 다룰 예정임.
CPU 클로킹(CPU Clocking)
성능을 올리기 위해서는 CPU Time을 줄이면 된다. 더 짧은 시간 내에 동일한 일을 수행하면 된다.
(일: 데이터를 계산하고, 전송하는 것)
여기서 CPU의 모든 작업과 데이터 전송의 타이밍을 동기화하기 위해 Clock이라는 일정 주기의 Signal을 보내게 된다. 즉. 특정 일을 처리하기 위해서는 무조건 (N cycle) * (일정 주기의 Clock Signal)의 시간이 필요하게 된다.
이 Signal의 주기를 Clock period라고 하고, 초당 몇 번 Signal을 보내주는지를 Clock frequency라고 한다.
T = 1 / f 이므로 위와 같이 두 가지 형태의 수식이 나오게 된다.
Ex) 어떤 프로그램이 10 클럭이 필요하고. 1 클럭 사이클이 1ms 이면 CPU Time은 10ms이 된다.
- 디지털 하드웨어의 작동은 일정 속도의 클럭에 의해 제어됨
- 클럭 주기(Clock period): 클럭 사이클의 지속 시간 (예: 250ps = 0.25ns = 250 × 10⁻¹²초)
- Rising Edge 사이
- ~초 단위
- 클럭 주파수(속도, Clock frequency): 초당 사이클 수 (예: 4.0GHz = 4000MHz = 4.0 × 10⁹Hz)
- ~Hz 단위
- 클럭 주기(Clock period): 클럭 사이클의 지속 시간 (예: 250ps = 0.25ns = 250 × 10⁻¹²초)
시험에서 Clock period와 Clock frequency를 헷갈리지 말자.
성능 개선 방법
CPU Time을 줄이려면 CPU Clock Cycle을 줄이거나, Clock Frequency(클럭 주파수 == 클럭 속도)를 높여주면 된다.
참고 | 클럭 속도와 사이클 수 간의 사이에는 TradeOff가 존재하여 무조건 Clock Rate를 높이는 것이 어렵다. 이런 이유에 대해서는 나중에 다룬다.
예제:
이렇게 수식으로 푸는 것도 나쁘지 않지만, 의미를 해석하면서 풀어보자.
2GHz clock을 가진 컴퓨터 A로 10초가 걸리는 작업이 있다. 이를 6초만에 처리하기 위해서 clock을 몇으로 세팅을 해야하는지 묻는 문제이다.
CPU Time이 0.6배가 되기 위해서는 (CPU Clock Cycle) / (CPU Clock Rate)이 0.6배가 되야 한다.
문제에서는 Clock Rate를 높이라고 하고 있다.
단순히 CPU Clock Rate가 10 / 6배가 되서 CPU Time이 0.6배가 되면 좋겠지만, 클럭을 올리면 Clock cycle이 1.2배 증가한다고 한다. 따라서 CPU Clock Rate를 추가로 1.2배 더 증가시켜 줘야 한다.
따라서 (10 / 6) * (12 / 10) = 2 이므로, 기존 컴퓨터의 클럭보다 2배 높은 클럭인 4GHz로 설정해주면 된다.
명령어 수와 CPI (Cycles Per Instruction)
이 파트에서는 명령어와 클럭 사이클, 클럭 타임 간의 관계에 대해서 다뤄보겠다.
일정한 CPU Time동안 여러 명렁어를 처리하게 된다.
(N cycle) 동안 Instruction Count만큼의 명령어를 처리하는 것이다.
Clock Cycle 수를 명령어 개수로 나눠주면, 명령어 1개당 필요한 Cycle의 수가 나오게 된다.
즉, Clock Cycles = (명령어 개수) * (명령어 1개당 필요한 Cycle의 수 == CPI)로 나타낼 수 있다.
이를 기존 CPU Time 식에 대입하면 아래와 같은 결과를 얻게 된다.
Ex) : ADD라는 명령어가 5 클럭 사이클이 필요하다면, 10개 ADD를 실행하려면 당연히 50 클럭 사이클이 된다.
명령어의 개수는 일정하다. 따라서 CPU Time을 결정하는 요인은 Clock Rate와 CPI이다.
- 프로그램의 명령어 수는 프로그램, ISA(명령어 세트 아키텍처), 컴파일러에 의해 결정됨
- 평균 CPI는 CPU 하드웨어에 의해 결정되며, 명령어의 조합에 따라 영향을 받음
- 명령어마다 필요한 사이클이 다르기 때문에 Average cycle을 사용한다.
예시:
Same ISA = 명령어 수는 똑같다.
같은 명령어를 처리하는데 B가 A에 비해 12/ 20배 사이클을 필요로 한다.
그러나 1 사이클의 길이를 보면 A가 B의 절반이다. 따라서 CPU Time을 비교하면
B / A = (12 / 20 ) * (2 / 1) = (12 / 10) 이다. 따라서 B의 CPU Time이 A의 CPU Time의 1.2배이다.
여기서 알 수 있는 것은 CPU 성능 비교를 할 때 Clock Cycle Time( = Clock Rate)만 보면 안 된다는 것이다.
같은 1개의 클럭을 비교했을 때 처리할 수 있는 명령어의 양이 다른 것이다.
Clock Frequency가 높아도, 즉 같은 시간동안 많은 Clock을 쏴줘도, 무조건 성능이 좋은게 아니라는 것이다. 클럭당 처리할 수 있는 명령어의 수 또한 높아야 한다.
CPI in More Detail
명령어마다 필요한 Clock Cycle의 개수가 다르다. CPI를 계산할 때 이를 고려하여 가중 평균을 사용하라는 말이다. 아래 예시를 참고해보자.
CPI 가중 평균 구하는 예시:
CPI로 가중치를 부여하여 CPI * Instruction Count로 필요한 총 Clock Cycle을 구한 뒤 Instruction Count의 합으로 나눠준다.
여기서 확인할 수 있는 것은, 명령어의 개수는 2번이 더 많지만, CPI가 작은 A의 비중이 2번이 높기 때문에 CPI가 2번이 작게 되어(즉, 클럭 당 처리할 수 있는 명령어의 수가 2번이 높음) 같은 클럭 Rate에서 2번이 더 빨리 끝나게 된다.
성능 요약
위에서 봤던 컴퓨터 성능 결정 요소들이 명령어 개수와, CPI에 영향을 미친다.
- 알고리즘: 명령어 수(IC)와 CPI에 영향을 미침
- 프로그래밍 언어: IC와 CPI에 영향을 미침
- 컴파일러: IC와 CPI에 영향을 미침
- 명령어 세트 아키텍처(ISA): IC, CPI, 클럭 주기(T_c)에 영향을 미침
Power Trends
2004년 부터 클럭 Rate 올리는 걸 못함. Power의 벽에 막힘 Multi Core로 접근
- CMOS IC 기술에서는 전력은 다음과 같이 결정됨:
- Power = Capacitive load x Voltage^2 x Frequency
전력 감소
새로운 CPU가 이전 CPU의 85% 전력 부하를 가지고, 전압과 주파수를 15% 감소시킨다고 가정
- 전력 벽(The power wall): 전압을 더 낮추는 것이 불가능하며, 더 많은 열을 제거할 수 없음
멀티코어로 간다.
Uniprocessor
성능 향상 폭이 가면 갈수록 미미해짐
Multiprocessor
멀티코어 마이크로프로세서: 한 칩에 여러 프로세서가 존재
- 명시적인 병렬 프로그래밍이 필요
- 어떤 일은 A가 하고 어떤 일은 ~가 하고
- instruction level parallelism과 비교하면
- 하드웨어가 한 번에 여러 명령어를 실행
- 프로그래머에겐 숨겨져있다.
- 성능을 위해 프로그래밍 시 로드 밸런싱 및 통신 최적화와 동기화 필요
SPEC CPU 벤치마크
성능 측정을 위해 사용되는 프로그램(실제 워크로드의 일반적인 경우).
- SPEC CPU2006: 선택된 프로그램들의 실행 시간을 측정. I/O 등의 영향이 거의 없게해서 CPU 성능에 집중시킴.
- 참고 기계에 대한 상대적인 실행 시간 비율을 기하 평균으로 요약
- CINT2006: 정수 성능, CFP2006: 부동소수점 성능
예시: SPECpower_ssj2008 for Xeon E5-2650L
결론 : 많이 굴려야 좋다
함정: 암달의 법칙
- 암달의 법칙은 컴퓨터 시스템의 한 부분을 개선한다고 해서 전체 성능이 비례하여 향상되는 것은 아니라는 개념을 설명합니다.
- 암달의 법칙에서 사용하는 공식은 다음과 같습니다:
- 예시: 곱셈 연산이 100초 중 80초를 차지한다고 가정해 봅시다.
- 전체 성능을 5배로 향상시키려면( = 20초) 곱셈 성능을 얼마나 개선해야 할까요?
- 20 = 20 + 80 / n
- 곱셈 시간을 0초로 만들어야 하는데, 불가능함
- 결론: 일반적으로 많이 사용하는 경우를 빠르게 만들어라.
오류: 유휴 상태에서 저전력
- Intel i7 프로세서의 전력 벤치마크를 다시 살펴보면:
- 100% 부하에서: 258W
- 50% 부하에서: 170W (66%)
- 10% 부하에서: 121W (47%)
- Google 데이터 센터는 주로 10%에서 50%의 부하에서 작동합니다.
- 100% 부하에서 작동하는 시간은 전체의 1% 미만입니다.
- 프로세서를 설계할 때 부하에 비례하여 전력을 소비하도록 고려할 필요가 있습니다.
함정: MIPS를 성능 지표로 사용하는 것
- MIPS(초당 백만 명령어)는 성능을 평가할 때 적절하지 않을 수 있습니다.
- 컴퓨터 간의 ISA 차이를 고려하지 않습니다.
- 명령어 복잡성의 차이를 반영하지 않습니다.
- MIPS 계산식(예전에 쓰던 Performance Metric임. CPI는 ISA 영향을 받기 때문에 컴퓨터 성능의 척도가 될 수 없음):
- CPI(사이클당 명령어 수)는 프로그램과 CPU에 따라 달라집니다.
- 그래서 SPEC 벤치마크를 써라
결론
- 비용/성능은 기술 발전 덕분에 계속 개선되고 있습니다.
- 하드웨어와 소프트웨어 모두 계층적 추상화가 중요합니다.
- 명령어 집합 구조(ISA): 하드웨어/소프트웨어 인터페이스를 정의합니다.
- 실행 시간은 최고의 성능 측정 지표입니다.
- 전력 소비는 성능 개선의 제한 요소입니다.
- 병렬 처리를 활용하여 성능을 향상시킬 수 있습니다.
- 멀티 코어로 올렸다~
정리
컴퓨터는 domain-specific accelerators에 의해 발전했고,
오늘날 여러 분야에 적용되어 일상생활 전반에 걸쳐 존재한다.
- 개인용 컴퓨터
- 서버 컴퓨터
- 슈퍼 컴퓨터
- 임베디드 컴퓨터
- Personal Mobile Device(PMD)
- Cloud computting
컴퓨터의 성능은 다음 요소들에 의해 결정이 된다.
- 알고리즘: 실행되는 연산의 수를 결정
- 프로그래밍 언어, 컴파일러, 아키텍처: 각 연산에 대해 실행되는 명령어 수를 결정
- 프로세서 및 메모리 시스템: 명령어가 얼마나 빨리 실행되는지를 결정
- 입출력 시스템: 입출력 작업이 얼마나 빠르게 실행되는지를 결정
아래 일곱 가지 위대한 아이디어를 통해서 컴퓨터 아키텍쳐가 발전했다~
- 추상화(abstraction)를 사용하여 설계를 단순화
- 일반적인 경우를 빠르게 처리(Make the common case fast)
- 병렬성(parallelism)을 통해 성능 향상
- 파이프라이닝(pipelining)을 통한 성능 향상
- 예측(prediction)을 통한 성능 향상
- 메모리 계층 구조(Hierachy) 사용
- 중복을 통한 신뢰성(Dependability) 향상
우리가 프로그램을 작성하면 low level로 변환되서 하드웨어에서 작동을 한다.
소프트웨어와 하드웨어의 인터페이스의 역할을 하는게 추상화이고, 계층적 추상화가 중요하다.
- 명령어 집합 구조(ISA): 하드웨어/소프트웨어 인터페이스를 정의하는데, ISA는 CPI, IC, 클럭 주기에 영향을 주기 때문
데이터 저장공간과 성능은 반도체 기술의 발전에 따라 지수적으로 계속해서 증가를 하고 있다.
데이터 저장공간은 단순히 용량이라는 척도가 있지만, 성능은 어떻게 측정하는 것일까?
성능은 실행 시간을 통해서 측정한다.
실행 시간을 측정할 때는 경과 시간과 CPU Time을 구분해야 한다.
CPU Time은 입출력 시간 요런 것들을 다 제외한 작업을 처리하는데 소요된 시간만을 고려한다.
성능을 올리기 위해서는 CPU Time을 줄이면 된다. 더 짧은 시간 내에 동일한 일을 수행하면 된다.
(일: 데이터를 계산하고, 전송하는 것)
여기서 CPU의 모든 작업과 데이터 전송의 타이밍을 동기화하기 위해 Clock이라는 일정 주기의 Signal을 보내게 된다. 즉. 특정 일을 처리하기 위해서는 무조건 (N cycle) * (일정 주기의 Clock Signal)의 시간이 필요하게 된다.
이 Signal의 주기를 Clock period라고 하고, 초당 몇 번 Signal을 보내주는지를 Clock frequency라고 한다.
따라서 성능을 개선 CPU Time을 줄이려면 CPU Clock Cycle을 줄이거나, Clock Frequency(클럭 주파수 == 클럭 속도)를 높여주면 된다. 물론 클럭 Frequency과 Clock Cycle과는 Tradeoff가 존재한다.
CPU Time을 명령어 관점에서 살펴보자.
(N cycle) 동안 Instruction Count만큼의 명령어를 처리하는 것이다.
Clock Cycle 수를 명령어 개수로 나눠주면, 명령어 1개당 필요한 Cycle의 수가 나오게 된다.
즉, Clock Cycles = (명령어 개수) * (명령어 1개당 필요한 Cycle의 수 == CPI)로 나타낼 수 있다.
이를 기존 CPU Time 식에 대입하면 아래와 같은 결과를 얻게 된다.
명령어의 개수는 일정하다. 따라서 CPU Time을 결정하는 요인은 Clock Rate와 CPI이다.
따라서 CPU 성능 비교를 할 때 Clock Cycle Time( = Clock Rate)만 보면 안 된다.
같은 1개의 클럭을 비교했을 때 처리할 수 있는 명령어의 양이 다르기 때문이다.
그리고 명령어당 필요한 클럭의 수가 다르기 때문에 가중 평균을 이용해서 평균 CPI를 구해주자.
과거에는 Clock Rate를 올려서 성능을 증가시켰다. 하지만 점점 전력 벽(The power wall)로 인해 클럭 Rate를 올리는 것은 힘들어지고 있다. 이제는 UniProcessor의 발전이 아닌 멀티코어 마이크로프로세서의 발전에 힘을 쓰고 있다. 여기서 중요한 것은 어떤 일은 어떤 프로세서가 처리하는지 정해야 하는 것이다(로드 밸런싱 및 통신 최적화와 동기화 필요)
우리가 성능을 측정하기 위해서는 SPEC CPU 벤치마크를 사용한다.
암달의 법칙은 컴퓨터 시스템의 한 부분을 개선한다고 해서 전체 성능이 비례하여 향상되는 것은 아니라는 개념을 설명합니다.
- 암달의 법칙에서 사용하는 공식은 다음과 같습니다:
이 법칙에 따르면 전체 성능을 개선시키기 위해서는 일반적으로 많이 사용하는 경우를 빠르게 만들어야 한다는 것이다.
MIPS 계산식은 예전에 성능을 측정하던 척도였다.
CPI(사이클당 명령어 수)는 프로그램과 CPU의 ISA에 따라 달라진다. 따라서 성능 측정하기에는 적합하지 않다
—> 그래서 SPEC 벤치마크를 써라