728x90
반응형

암달의 법칙은 컴퓨팅 시스템에서 시스템을 설계할때 고려해야 할 중요한 개념이다. 

우리는 컴퓨터의 한 측면의 개선이 전체 성능을 개선 크기에 비례하여 증가시킬 것으로 기대하지만, 실제로는 그렇지 않다.

 

만약에 어떤 프로그램이 실행되는데 100초 정도 걸린다고 가정하자. 곱하기 하는게 80초 정도 걸린다. (나머지는 따른거)그래서 곱하기가 많이 차지하니까 곱하기에서 성능을 향상 시키려고 하였다. 만약 4배정도 빠르게 실행하고 싶으면 곱하기 성능이 얼마정도 빨라져야 될까??-> 그럼 변수로 두고 생각해보자. Tmultiply(Tm이라고 하겠다)는 80초이고, Tother(To)는 20초이다. 그리고 Tnew는 4배정도 빨라져야 되기 때문에 100/4 = 25s가 된다. - Tm = 80s- To = 20s- Tnew = 25sTnew = To + Tm/speedUp25 = 20 + 80/x -> x = 80/5 = 16. 즉, speed up이 16배 정도 되어야 전체는 4배정도 빨라질 수 있다. 

 

그럼 5배정도 빠르게는 할 수 있을까? 80/speedup + 20 = 20이 되어야 하는데 그렇게 될려면 speedup이 무한대가 되어야한다. 실제로 불가능하다는 이야기이다.

728x90
반응형
728x90
반응형

컴퓨터 성능에서 제일 많은 부분을 차지하는 것은 응답시간과 처리량이다. (response time, throughput)

그냥 모든 기계를 생각해도 비슷할 것이다. 기계가 일을 하는데 걸리는 시간. 즉, 일 하나를 하는데 얼마나 많은 시간이 걸리느냐랑 주어진 시간동안 얼마나 많은 일을 하느냐. 

이 2가지가 컴퓨터의 성능을 결정한다. 

 

성능(performance)는 응답시간(response time)이 짧을 수록 좋을 것이다. 즉 서로 반비례 관게인 것이다. 

예를 들어서, 동일한 일을 수행하는데 A 컴퓨터는 10초가 걸리고, B 컴퓨터는 15초가 걸린다고 가정하자. 

그럼 A컴퓨터가 B컴퓨터보다 성능이 1.5배 좋다라고 생각할 수 있다. 

결국 CPU performance를 측정한다는 것은 CPU time을 기준으로 performance를 측정한다.

 

CPU Time은 어떻게 구할까?

CPU Time = CPU Clock Cycles X Clock Cycle Time = CPU Clock Cycles / Clock Rate

해당 식을 어떤 의미인지 확인해보자.

한 Clock당 시간을 Clock Cycle Time이라고 하고, 그럼 총 Cycle을 구하면 CPU Time을 구할 수 있으니까 CPU Clock Cycles(사이클 수)를 곱해주면 전체 시간이 나오게 된다. 

Clock Cycle Time, 즉 한 Clock당 시간은 Clock Rate의 역수이다. 

 

그럼 위의 식에서 CPU Time이 나오는데, CPU Time은 Performance와 반비례 관계라고 했다. 그럼 Performance를 향상시킬 수 있는 방법은 무엇일까? (CPU Time을 작게 만들 수 있는 방법)

- clcok cycles의 수를 줄인다.

- clock rate를 늘린다. = cycle time을 줄인다.

- 그런데 늘 위의 방법을 한다고 다 빨라지는건 아니다. Clock Rate를 증가시키다보면 CPU Clock Cycles가 증가할 수도 있고 이런 문제가 생긴다. (서로 trade off가 있다)

 

조금 더 자세히 Clock Cycles를 살펴보자. 

Clock Cycles = Instruction Count X Cycles per Instruction(CPI)
즉, Clock Cycle은 명령어의 갯수 X 명령어당 필요한 Cycle의 수.

여기서 instruction 1개당 필요한 cycle 수가 CPI이다. 그럼 다음과 같은 식이 나온다. 

 

Instruction Count는 알고리즘을 어떻게 짜느냐, 어떤 ISA를 갖고 있느냐, compiler에 따라 개수가 바뀐다.

 

하나의 cycle당 하나의 명령어를 처리한다고 생각할 수 있는데, 그게 아니라 하나의 명령어도 여러 cycle로 걸린다.

그래서 Instruction에 따라서 몇 cycle이 필요한지, 명령어에 따라 다르다. (CPI가 다 다르다)

 

Average CPI(Average Cycles Per Instruction)는 CPU 하드웨어에 의해 결정되고 다른 instruction을 가지면 다른 CPI를 가지게 된다. 

 

이제는 CPI에 대해서 더 자세히 알아보겠다. 

Clock Cycles은 총 사이클 도는데 걸리는 시간이라고 했다. 그리고 명령어마다 필요한 cycle이 다르다.

따라서, CPI에 Instruction개수를 곱한 값들의 합이 Clock Cycles이 된다.

CPI는 명령어 타입마다 다르기 때문에,CPI와 Instruction count는 다 다르기 때문에 저렇게 다 곱해서 더해야지 정확한 Clock Cycles의 값이 나오게 되는 것이다.

 

그럼 평균값도 똑같다.

CPI의 평균 값은 Clock Cycles을 총 Instruction Count로 나누어주면 된다(그냥 위의 계산의 반대이다.)

여기서 Instruction Count / 총 Instruction Count 를 Relative Frequency라고 한다. 그럼 해당 명령어가 총 명령어에 사용된 비율을 알 수 있다. 

728x90
반응형

'CS > 컴퓨터 구조' 카테고리의 다른 글

암달의 법칙 (Amdahl's law)  (0) 2023.03.20
컴퓨터 구조와 언어  (2) 2023.03.05
컴퓨터 아키텍처를 발전시킨 7가지 아이디어  (0) 2023.03.05
728x90
반응형

대부분의 프로그램, 흔히 우리가 Application Software라고 불리는 것들은 high level language로 작성되어 있다. 

이건 우리가 보는 거의 젤 테두리 느낌이다.

 

만약 high level language로 프로그램이 짜여져 있으면 System Software인 Compiler(컴파일러)가 기계가 이해할 수 있는 machine code로 바꾸어준다. machine code는 도저히 이제 구분하기가 어려운 10101010001.. 로만 구성된 이진 코드이다.

 

그리고 System Software에는 OS도 포함된다. Operating System, OS는 우리가 사용하는 user Program과 하드웨어 사이에서 인터페이스 역할을 한다. 기본적인 input output도 처리해 주고, 메모리도 할당해주고, 프로그램 task들을 스케쥴링하고 리소스 할당도 다 OS가 해주는 역할이다. 

 

하드웨어는 Processor, memory, I/O controller를 갖는다.

 

위에 얘기했던 HLL(High Level Language)랑 Binary Machine Language는 이제 program code의 레벨로 나눌 수 있다. 

기계가 이해할 수 있는 건 Binary Machine Language이다. 우리가 그나마 잘 이해한다는 C나 java로 코드를 짜도 기계는 이해할 수 없는 애들이다. 

 

먼저, 어셈블리 언어를 알아야 한다. 어셈블리 언어는 그래도 이진코드보다는 조금 직관적이다. 이런 어셈블리 언어로 구성된 것은 one to one으로 machine code와 매칭된다. 어셈블리 언어는 명령어를 텍스트로 나타낸 것이다. 텍스트 하나하나가 기계어로 매치되어 바뀐다. 이걸 바꿔주는게 어셈블러로 보면 된다. 

 

어셈블리 언어보다 이제 우리에게 더 직관적인게 HLL이다. High Level Language는 여러 장점이 있다. 

먼저, 개발자가 사용하는 자연어와 비슷하다. 그래서 생산성도 올라가고, 프로그램 관리도 쉬워진다. 또, 프로그램이 컴퓨터와 독립적으로 되는 것이라 효과적이다. 이러한 HLL을 어셈블리언어로 바꿔주는게 컴파일러다. 

728x90
반응형
728x90
반응형

컴퓨터 구조를 발전시킨 데에는 7가지 아이디어가 있었다.

단순히 예전에 계산에만 쓰이던 컴퓨터가 지금까지 사람들이 사용할 수 있었던 7가지 아이디어에 대해 소개하겠다.

Abstraction(추상화)

먼저 컴퓨터를 추상화함으로써 컴퓨터 사용을 더 편리하게 했다. 간단하게 디자인하게 된 것이다. 그냥 단순하게 생각하면 컴퓨터를 하드웨어랑 소프트웨어로 분리한 것도 추상화의 하나라고 생각할 수 있다.

Common Case Fast (공통 부분 빠르게!)

어떤 일을 하든지 공통적인 부분을 묶으면 빨리 할 수 있다. 컴퓨터도 이러한 일환으로 CISC과 RISC라는 개념들도 나오게 된다.

Parellelism (병렬화)

병렬화를 통해서 컴퓨터의 성능을 최대화 시켰다.

Pipelining(파이프라이닝)

이건 좀 의아할 수 있는데, 파이프라이닝?은 물 배관으로 알고 있다. 대량의 명령어가 순차적으로 처리되는 것이 물이 흐르는 과정이랑 비슷하다는 생각에서 나온 개념이라고 한다.

Prediction (예측)

컴퓨터는 예측을 통해서 명령어를 실행해 성능을 향상시켰다. 물론 이것이 취약점이 되어서 나온 문제가 Melt Down이다.

인텔 프로세서에 영향을 미치는 하드웨어 취약성인 melt down은 프로세서가 추측 실행을 처리하는 방식의 결함을 이용함으로써 작동하는데, 이것이 프로그램이 다음에 실행할 명령을 예측함으로써 처리 속도를 높이는 데 사용되는 기술이다.

Hierarchy of Memories (메모리 계층 구조)

메모리를 계층적으로 사용하는 것도 컴퓨터의 성능을 향상 시킨 요소이다.

Dependability via Redundancy(이중화를 통한 신뢰성)

RAID는 "독립 디스크의 중복 어레이"를 의미한다. 여러 개의 하드 드라이브를 사용하여 성능, 안정성 또는 둘의 조합을 향상시키는 데이터 스토리지 기술이다.

RAID의 핵심 원칙 중 하나는 "중복성을 통한 신뢰성"이다 즉, 여러 개의 하드 드라이브를 사용하여 해당 드라이브 간에 데이터를 복제하여 단일 드라이브 장애 시 중복성을 제공할 수 있다. 이러한 이중화는 우리에게 데이터의 신뢰성을 줄 수 있다.

728x90
반응형

'CS > 컴퓨터 구조' 카테고리의 다른 글

암달의 법칙 (Amdahl's law)  (0) 2023.03.20
컴퓨터 성능은 어떻게 측정할까?  (0) 2023.03.20
컴퓨터 구조와 언어  (2) 2023.03.05

+ Recent posts