오늘 머리가 맹맹한게 개선되어 컴공 교과서를 더 읽었습니다. 노트를 남긴 것을 올립니다. 교과서에 나온 흐름을 참고해서 제 표현도 고안해서 해놨는데 몇 대목은 요약적입니다.
컴퓨터와 전자기기의 성능은 마이크로프로세서의 성능에 일차적으로 의존적입니다. 주변기기나 부품들의 성능도 중요하지만, 일단 중심이 되는 마이크로프로세서이기에 마이크로프로세서의 성능 개선이 전체 실행 속도의 개선에 중요한 구심점이 되는 것입니다.
요즘은 제작단가도 낮아지고 있어서 일회용으로 쓰고 버리는 마이크로프로세서도 있다고 하구요. 기술의 혁신이 가져온 시장인데, 제작단가는 낮추고 성능은 향상시키는 것입니다.
성능 향상은 명령어 인출과 저장, 실행, 버스와 캐시, 버퍼등의 하드웨어적 이점 등에 영향을 받습니다. 명령어를 한번에 많이 보내고 병렬로 처리하는 등의 단순해보이는 작업은 이들 구성요소들을 얼마나 효율적으로 분배하느냐에 따라 결정이 됩니다.
성능좋은 프로세서의 효용은 아래와 같습니다.
영상처리
3차원 렌더링
음성 인식
화상회의
멀티미디어 오소링
파일에 첨부되는 음성과 영상 실행
시뮬레이션 모델링
이들이 현재의 데스크탑 PC에서도 가능하게 프로세서 기능이 진화된 세상입니다. 속도와 성능은 대폭 개선되었지만, 오늘날의 컴퓨팅 기술은 폰노이만 형태의 IAS 컴퓨터와 구성요소 블록이 흡사합니다. 즉 조직은 이어져오는면이 있는데 이는 구조적으로 어떻게 성능이 결정되는지의 결정도 되죠. 예를 들면 마이크로프로세서가 나노세컨드로도 작동할때 보조기억장치는 1초에 80MB만 읽어들이면 병목현상이 있게 되고 이를 효과적으로 처리하는 기술들이 관건이 됩니다.
현대 프로세서들은 성장이 발전해서 여러 하드웨어적인 구조상으로 성능 향상을 주는 구현을 합니다. 아래와 같은 기술들이 우선 이해되면 좋습니다.
파이프라이닝(pipelining) – 명령어의 실행 단계를 여러개로 나누어 병렬로 실행하는 기술입니다. 여러개의 명령어를 동시에 서로 다른 단계에 실행해서 다수의 명령어를 동시에 실행합니다. 처리의 예를 들면 버퍼링을 하면서 영상의 디코더를 실행하는 것과 같은 연산을 할때 명령어로 읽어들이면서 다른 명령어를 해독하고 있으면 각각의 단계가 병렬로 실행되면서 프로세서가 바쁘게 돌아가는 작동이 되어 작업처리 속도가 빨라집니다. 이 각각의 단계는 파이프라인이라고 불리우며 이는 개념적으로 나타낸 도식의 각 단계로 유비됩니다. 인텔의 x86 계열 CPU는 파이프라인을 늘려서 처리속도 개선을 해왔는데, 각각의 파이프라인이 100개이고 4000MHz의 클럭속도일때, 각각의 파이프라인에 40MHz의 클록이 배정되게 작동합니다. 그러나 파이프라인을 너무 크게 설비하면 발열등의 현상으로 인해 성능외적인 문제가 있게 되어 요즘은 파이프라인을 적당히 설비하고 코어수를 늘려서 해결하는 방안이 널리 쓰입니다.
분기예측(branch prediction) – 프로세서는 알고리즘 설계를 토대로 소프트웨어의 작동을 미리 살펴보고 어떤 분기를 실행하여 명령어 집합이 다음에 처리될지 예측합니다. 명령어 집합을 미리 인출해서 버퍼에 저장하고 병렬처리를 합니다. 이 알고리즘을 고도화하면 이후에 나타날 여러 분기가 모두 예측될 수 있고 결국 효율이 높아집니다. 이는 잠재적으로 프로세서가 수행할 일의 양을 증가시켜 유후상태를 방지합니다. 그러면 작업 처리 속도도 증가합니다.
슈퍼스칼라 실행(superscalar execution) – 프로세서의 클럭 사이클마다 한개 이상의 명령어를 발송해서 여러개의 병렬처리가 가능해집니다.
데이터 흐름 분석(data flow analysis) – 명령어 사이의 결과값이나 데이터 의존성을 분석하여 최적의 실행 조건을 찾아냅니다. 프로그램 실행 순서를 너무 고지식하게 처리하기보다 준비되는 즉시 실행되도록 하여 지연을 줄여줍니다.
추정실행(speculative execution) – 분기 예측과 데이터 흐름 분석을 이용하는 경우, 명령어들이 실행되는 것을 결정하여 결과값을 임시 장소에 저장합니다. 이렇게 하면 필요한 것으로 예측되는 명령어들을 미리 실행함으로써 하드웨어를 가능한 한 바쁘게 만듭니다. 발열은 늘어나겠으나 처리속도가 개선됩니다.
프로세서의 속도가 무척이나 빨라져서 단순 지표로 40억개의 연산이 1초에 되기도 하고 놀라운 성능을 낸다. 하지만 컴퓨터의 속도는 프로세서만 빨라서는 안되고 타주변기기가 부품들의 속도가 지지되어야 향상이 가능하다. 프로세서의 속도와 주요 부품들의 속도를 최대한 맞추어주는 것을 성능 균형이라고 하고 다양한 부품이나 구성 요소들의 성능 불일치를 개선하는 것이 기술 개발의 한 주목 지점이다.
프로세서와 주기억장치 간의 인터페이스 기술
프로세서와 보조기억장치 간의 인터페이스 기술
그외 조합들
이 관건이다.
주기억장치는 x86 계열의 데스크탑용을 생각해보면 DDR 기술과 레이턴시가 그 지표가 된다. 레이턴시는 나노초 단위지만, 프로세서와 연동시 버스를 거쳐야 하므로 프로세서 내부의 캐시나 버퍼링보다는 통신이 오래 걸리는 편일 것이다. 3차원 모델링 표시들이 그 예가 된다. 이 경우 그래픽 카드 내에 램을 따로 달아 해결하기도 할 것이다. 모든 작업을 프로세서와 주기억장치의 통신으로만 해결하지 않고 해결하는 방법은 많다.
중요한 것은 기억장치들의 독립적인 성능향상도 그렇하지만 이들끼리의 통신을 얼마나 짧은 거리에서 얼마나 빠른 버스로 처리할지의 여부다. 상식적으로는 더 깊게 하는게 일반적이지만 때로는 더 넓게 해서 한번에 인출하는 개수를 높히기도 한다. DRAM을 칩상의 캐시나 버퍼링으로 포함하기도 한다. 프로세서 내부에도 캐시가 들어가고 외부에 두는 등의 선택지도 있다. 버스를 계층화하기도 한다.
설계적으로 입출력 장치들의 입출력 요구율과 입출력 처리율을 조정한다. 기술발전이 이루어져도 다양한 기술 대상에 대한 성능 변화는 얽혀있어서 이를 정리하고 균형을 맞추는게 중요하다.
마이크로프로세서의 성능 개선은 성능 균형을 고려하고 성능 불일치를 해결하는 것이다.
칩 조직과 구조 개선
성능 개선은 몇가지 기술적인 패턴이 있다.
프로세서 자체의 하드웨어 속도 개선 – 칩상의 논리게이트 수 감소와 동시에 더 많은 게이트를 조밀하게 배치.
프로세서와 주기억장치 사이의 속도 개선 – 캐시 크기와 속도 개선. 프로세서 내부에 위치시키도록 조정.
프로세서 아키텍처 개선 – 명령어 처리나 병렬성 개선.
대표적인 패턴은 클럭 속도 향상, 회로 밀도 증가다. 그러나 이 둘의 고도화가 진행될 수록 단점도 있게 된다.
전력 밀도가 높아진다. 발열과 쿨링 문제가 따라온다.
RC 지연이 된다. RC곱이 증가할때마다 지연도 길어진다. 칩상의 부품이 미세해질수록 저항이 증가하고, 더 가까이 위치할수록 커패시턴스도 증가한다.
기억장치 지연과 처리율 미비. 프로세서보다 느린 경우가 많다.
해결법은
칩상에 캐시 메모리의 배치를 늘린다
병렬처리를 위해 프로세서의 명령어 실행 회로를 고도화한다
많은 수의 트랜지스터를 직접하는 효율적 방법을 찾는다
이러한 것이 대표적인 설계에서의 성능 균형 맞추는 기법의 일단이다.