어떻게 성능을 측정하는 것이 가장 좋은 방법이며 성능 측정 방법의 한계는 무엇인지를 확실히 이해하는 것이 매우 중요합니다.
성능의 정의
컴퓨터 사용자 개인의 입장에서는 응답시간(response time) : 작업 개시에서 종료까지의 시간 즉, 실행시간(execution time)이 중요할 것이다. 그러나 데이터센터 관리자에게는 처리량(throughput)혹은 대역폭(bandwidth) : 일정시간 동안 처리하는 작업의 양이 더 중요하다.
성능의 측정
시간은 컴퓨터 성능의 가장 기본적인 척도이다. 같은 작업을 최단 시간에 실행하는 컴퓨터가 가장 빠른 컴퓨터이다. 시간은 우리가 재는 방법에 따라 여러 가지로 정의할 수가 있다. 제일 쉽게 생각할 수 있는 것은 응답시간, 경과시간(elapsed time)이라 부르는 것이다. 이것은 한 작업을 끝내는 데 필요한 전체 시간을 뜻하는 것으로 디스크 접근, 메모리 접근, 입출력 작업, 운영체제 오버헤드 등 모든 시간을 다 더한 것이다.
경과시간과 구분해서 프로세서가 순수하게 이 프로그램을 실행하기 위해 소비한 시간을 계산할 필요가 있다. 이시간을 CPU 실행시간 (CPU execution time)이라 한다.
사용자의 입장에서는 주로 시간에 관심을 갖게 되지만, 컴퓨터의 세세한 부분을 평가할 때는 다른 성능 척도를 사용하는 것이 편리할 때가 있다. 거의 모든 컴퓨터는 하드웨어 이벤트가 발생하는 시점을 결정하는 클럭을 이용하여 만들어지는데, 이 클럭의 시간 간격을 클럭 사이클(clock cycle)이라 한다. 클럭주기(clock period)는 한 클럭 사이클에 걸리는 시간(ex 250ps)이나 클럭속도(ex 4GHz)로 표시한다. 클럭 속도는 클럭 주기의 역수이다.
CPU 성능과 성능 인자
CPU성능에만 관심을 갖기로 했으므로 궁극적인 성능 척도는 CPU시간이다. CPU시간을 표시하면 다음과 같다.
프로그램의 CPU 실행시간 = 프로그램의 CPU클럭 사이클 수 X 클럭 사이클 시간
클럭 속도와 클럭 사이클 시간은 역수 관계이므로
프로그램 CPU 실행시간 = 프로그램의 CPU클럭 사이클 수 / 클럭 속도
이 공식을 보면 클럭 사이클의 길이를 줄이거나 프로그램 실행에 필요한 클럭 사이클 수를 줄이면 성능을 개선할 수 있음을 알 수 있다. 하지만 이 둘 중 하나를 감소시키면 다른 하나가 증가하는 트레이드오프 관계가 있다.
예제) 2GHz 클럭의 컴퓨터 A에서 10초에 수행되는 프로그램이 있다. 이프로그램을 6초동안에 실행할 컴퓨터 B를 설계하고자 한다. 클럭 속도는 얼마든지 빠르게 만들 수있는데, 이렇게 하면 CPU 다른 부분의 설계에 영향을 미쳐 같은 프로그램에 대해 A보다 1.2배 많은 클럭 사이클이 필요하게 된다고 한다. 컴퓨터 B의 클럭 속도는 얼마로 해야 하겠는가?
명령어 성능
앞의 예에서 사용한 수식에는 프로그램 수행에 필요한 명령어 개수에 관한 사항이 포함되어 있진 않다. 컴파일러가 실행할 명령어를 생성하고 컴퓨터는 이 명령어를 실행해야 하기 때문에, 실행시간은 프로그램의 명령어 수와 관련이 있다.
CPU 클럭 사이클 수 = 명령어 수 X 명령어당 평균 클럭 사이클 수
명령어당 클럭 사이클 수를 CPI(clock cycles per instruction)라고 한다. 명령어마다 실행시간이 다르므로 CPI는 프로그램이 실행한 모든 명령어에 대해 평균한 값을 사용한다. ISA가 같으면 프로그램에 필요한 명령어 수가 같으므로 CPI는 서로 다른 구현을 비교하는 한 가지 기준이 될 수있다.
고전적인 CPU 성능식
CPU시간 = 명령어 개수 X CPI X 클럭 사이클 시간
클럭 속도는 클럭 사이클 시간의 역수이므로
CPU시간 = 명령어 개수 X CPI / 클럭 속도
예제) 코드의 비교
코드 1은 5개의 명령어를 사용하고 코드 2는 6개의 명령어를 사용해 코드1의 명령어 사용이 더 적지만 CPU클럭 사이클 수를 비교해보면 코드1은 10사이클 , 코드2는 9사이클로 코드2가 더 실행속도가 빠른것을 알 수있다. CPI = CPU클럭 사이클 수 / 명령어 개수 공식을 이용해 각 코드별 CPI를 구하면 위와 동일하다.
★ 요점정리
컴퓨터의 성능을 결정하는 기본 구성요소와 각각의 측정에서 얻어지는 값들을 가지고 프로그램의 실행시간을 다음과 같이 구할 수 있다.
컴퓨터 성능에 대한 완벽하고 믿을 만한 척도는 실행시간밖에 없음을 잊지 말자. 예로 명령어 개수를 줄이기 위해 명령어 집합을 바꾸었을 때 클럭 속도가 느려지거나 CPI가 커져서 오히려 성능이 더 나빠질 수도 있다. 마찬가지로 CPI는 실행되는 명령어 종류에 따라 달라지므로 실행 명령어 수가 적은 코드가 항상 가장 빠른 것은 아니다.
그렇다면 성능식의 세 가지 인자값은 어떻게 구할까? CPU실행시간은 실제 프로그램을 실행시켜서 얻을 수 있고, 클럭 사이클 시간은 보통 컴퓨터의 하드웨어 매뉴얼에 기록되어있다. 하지만 명령어 개수와 CPI는 구하기가 어렵다. 클럭속도와 CPU 실행시간을 알 때, 명령어 개수나 CPI중 하나를 알면 다른 하나는 계산으로 구할 수 있다.
하드웨어/소프트웨어 구성요소 | 영향을 끼치는 인자 | HOW? |
알고리즘 | 명령어 개수, CPI | 알고리즘은 소스 프로그램이 수행할 명령어의 수, 결국 프로세서가 수행할 명령어의 수를 결정한다. |
프로그래밍 언어 | 명령어 개수, CPI | 프로그래밍 언어로 표현된 문장은 프로세서 명령어로 변환되기 때문에 확실히 명령어 개수에 영향을 미치게 된다. 언어의 특성 때문에 언어가 CPI에 영향을 끼치기도 한다. |
컴파일러 | 명령어 개수, CPI | 컴파일러는 소스 언어를 컴퓨터 명령어로 변환하는 역할을 하므로 얼마나 효율적인가에 따라 명령어 개수와 CPI가 영향을 받는다. |
명령어 집합 구조 | 명령어 개수, CPI, 클럭 속도 | ISA는 어떤 기능을 수행하기 위해 필요한 명령어의 수, 각 명령어당 사이클의 수, 프로세서의 클럭속도에 영향을 미치므로 CPU 성능의 세 인자에 모두 영향을 끼친다. |
♣ 점검하기
Java로 작성된 어떤 응용 프로그램이 데스크톱 프로세서에서 15초 걸려 수행되었다. 새로운 Java 컴파일러가 발표 되었는데 이전 컴파일러에 비하여 명령어 개수의 비율을 0.6으로 줄였다. 하지만 CPI는 1.1배 커졌다. 새로운 컴파일러를 사용하면 이 응용 프로그램을 얼마나 빨리 수행할 수 있겠는가?
'Computer Architecture > 컴퓨터 구조' 카테고리의 다른 글
[5] CH1 컴퓨터 추상화 및 관련 기술 < Intel Core i7 벤치마킹 > (0) | 2022.01.11 |
---|---|
[4] CH1 컴퓨터 추상화 및 관련 기술 < 단일프로세서에서 멀티프로세서로의 변화 > (0) | 2022.01.11 |
[2] CH1 컴퓨터 추상화 및 관련 기술 < 프로세서와 메모리 생산 기술 > (0) | 2022.01.11 |
[1] CH1 컴퓨터 추상화 및 관련 기술 < 하드웨어 관점 > (0) | 2022.01.11 |
[0] 컴퓨터 추상화 및 관련 기술 < 컴퓨터구조를 왜 배워야하는 것인가 > (0) | 2022.01.11 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!