Computer Organization and Design - Chapter 1


컴퓨터구조 - 1장

2020-2R 고려대학교 정성우 교수님 컴퓨터구조
교재 : Computer Organization and Design
20200901 ~ 20200910

성능

  • 컴퓨터 사용자 개인의 입장
    응답시간 Response time = 작업 개시에서 종료까지의 시간 = 실행시간 Execution time 이 중요하다.
  • 데이터센터 관리자의 입장
    처리량 Throughput or 대역폭 Bandwidth = 일정 시간 동안 처리하는 작업의 양이 중요하다.

어떤 컴퓨터 X의 성능과 실행시간의 관계를 다음과 같이 표시할 수 있다.

성능X=1실행시간X\text{성능}_X = \frac{1}{\text{실행시간}_X}

상대 성능

성능X성능Y=실행시간Y실행시간X=n\frac{\text{성능}_X}{\text{성능}_Y} = \frac{\text{실행시간}_Y}{\text{실행시간}_X} = nXXYY보다 nn배 빠르다.

  • 경과시간 Elapsed time​ (= 응답시간)
    → 디스크 접근, 메모리 접근, 입출력 작업, OS 오버헤드 등 모든 시간을 다 더한 작업의 전체 시간
  • CPU 실행시간 CPU Execution time or CPU time
    → 사용자 CPU 시간 user CPU time = 프로그램 자체가 소비한 시간
    → 시스템 CPU 시간 system CPU time = OS가 프로그램 수행을 위해 소비한 시간
  • 클럭 → 하드웨어 이벤트가 발생하는 시점을 결정
  • 클럭 사이클 Clock cycle → 클럭의 시간 간격
  • 클럭 주기 Clock period

    • 클럭 사이클 시간 Clock cycle time = 클럭 (pos(neg) edge → pos(neg) edge)의 시간 간격
    • 클럭 속도 Clock rate = 1초에 몇번 클럭이 일어나는지

클럭 속도는 클럭 주기의 역수이다.

Clock cycle time=1Clock rate\text{Clock cycle time} = \frac{1}{\text{Clock rate}}

실행 시간

Execution time=Clock cycles for programClock rate\text{Execution time} = \frac{\text{Clock cycles for program}}{\text{Clock rate}}

프로그램의 CPU 실행시간 = 프로그램의 CPU 클럭 사이클 수 ×\times 클럭 사이클 시간
→ 클럭 사이클 시간의 역수는 클럭 속도 Clock rate이다.

명령어 성능

  • 명령어당 클럭 사이클 수 Clock cycles per instructions = CPI
    → 같은 프로세서여도 명령어의 타입이 다른 경우 필요시하는 사이클의 개수가 다를 수 있다.

CPU 클럭 사이클 수 = 명령어 수 ×\times 명령어당 클럭 사이클 수 (CPI)

  • 여러개의 명령어를 사용할 때 계산하는 경우

CPU 클럭 사이클 수 = i=1nCPIi×Ci\sum_{i=1}^{n}\text{CPI}_i \times \text{C}_i
CPIi\text{CPI}_i : the CPI for the class of instructions
Ci{\text{C}_i} : the count of that type of instructions

CPI = CPU 클럭 사이클 수 / 총 명령어 수 = i=1n(CPIi×Ci)Total instruction count\frac{\sum_{i=1}^{n}(\text{CPI}_i \times \text{C}_i)}{\text{Total instruction count}}

  • Longest propagation delay (= Critical path delay)
    → typicially identified by timing analysis or static timing analysis

클럭 사이클 측정

  • CPU clock cycle / program is not so intuitive.
    \therefore CPI (Cycle per instruction) is used so frequently
  • CPI를 사용하면,
    Execution time=Clock cycles for programClock rate\text{Execution time} = \frac{\text{Clock cycles for program}}{\text{Clock rate}}
    Execution time=Instructions×CPI×Clock cycle time\text{Execution time} = \text{Instructions} \times \text{CPI} \times \text{Clock cycle time}
  • CPU Time=SecondProgram=InstructionsProgram×CyclesInstruction×secondCycle\text{CPU Time} = \frac{\text{Second}}{\text{Program}} = \frac{\text{Instructions}}{\text{Program}} \times \frac{\text{Cycles}}{\text{Instruction}} \times \frac{\text{second}}{\text{Cycle}}
  • MIPS Million instructions per second (명령어 속도)

    • MIPS = Instruction countExecution time×106\frac{\text{Instruction count}}{\text{Execution time} \times 10^6} = 명령어 개수 / ( 실행시간 ×106\times 10^6 )
    • 10610^{6} = million
    • Instruction set에 대한 고려 부족
    • 함정 : 2장 ppt에 MIPS / CPI 계산 시 틀리는 부분 설명되어 있음

      • 단순히 명령어를 실행하는 속도를 나타낼 뿐, 얼마나 그 명령어가 많은 일을 수행하는지 반영 불가.
        명령어 집합이 다르면 명령어 개수가 달라지므로 단순한 MIPS 값으로만 성능을 비교할 수 없음.
      • 같은 컴퓨터에서도 어떤 프로그램을 실행하느냐에 따라 MIPS 값은 달라짐.
      • 많은 명령어를 실행하지만 빠른 명령어를 사용하는 프로그램으로 바꾸는 경우, 성능과 반대로 MIPS는 작아짐.
  • MFLOPS Million floating-point operations per second

    • 명령어가 아닌 Operation을 기준으로 측정함
      → floating-point addition, multiplication ...
    • 컴퓨터 성능에 대한 완벽하고 믿을 만한 척도는 실행시간 밖에 없다.

      명령어 개수를 줄이기 위해 명령어 배합Instruction mix을 바꾸었을 때 클럭 속도가 느려지거나 CPI가 커져서 오히려 성능이 더 나빠질 수도 있다. 마찬가지로 CPI는 실행되는 명령어 종류에 따라 달라지므로 실행 명령어 수가 적은 코드가 항상 빠른 것도 아니다.

벤치마킹

  • 벤치마크
    사용자의 실제 작업부하에 대한 성능을 잘 반영할 것으로 생각되는 프로그램들로 구성된 작업부하이다.
    A benchmark is distillation of the attributes of a workload.
  • SPEC System Performance Evaluation Cooperative
    최신의 컴퓨터 시스템을 위한 표준 벤치마크를 만들기 위하여 여러 컴퓨터 회사가 자금을 대고 지원해 만듬.
  • Amdahl의 법칙 Amdahl's law

    함정 : 컴퓨터의 한 부분만 개선하고 그 개선된 양에 비례해서 전체 성능이 좋아지리라 기대하면 안된다.
    개선 후 실행시간 = 개선에 의해 영향을 받는 실행시간 / 개선의 크기 + 영향을 받지 않는 실행 시간
    Execution time after improvement=Execution time affected by ImprovementAmount of Improvement+Execution time unaffected\text{Execution time after improvement} = \frac{\text{Execution time affected by Improvement}}{\text{Amount of Improvement}} + \text{Execution time unaffected}

    만약 100초의 프로그램 중 80초가 곱셈을 차지하는 프로그램이 있다고 하자.
    프로그램을 5배 성능 개선하기 위해서는 결과가 20초가 되어야 한다.
    그러나 아무리 빠르게 하더라도 전체 성능을 다섯 배로 증가시킬 수는 없다. (곱셈의 비용이 0 될 수 없음.)