범용 CPU 와 임베디드 CPU 가 있으며, 범용 CPU 와 임베디드 CPU 의 차이점은 주로 애플리케이션 모드에 따라 구분됩니다. 범용 CPU 칩은 일반적으로 복잡한 운영 체제와 대형 어플리케이션 소프트웨어를 실행할 수 있는 강력한 성능을 갖추고 있습니다. 내장형 CPU 는 광범위한 기능과 성능을 제공합니다. 통합도가 높아지면서 임베디드 어플리케이션에서는 CPU, 스토리지 및 일부 주변 회로를 하나의 칩에 통합하여 SOC (시스템 칩) 를 형성하고 SOC 의 CPU 는 CPU 코어가 되는 경향이 있습니다.
이제 교육 시스템의 최적화 설계에는 두 가지 반대 방향이 있습니다. 하나는 명령을 향상시키는 기능으로, 기능이 복잡한 명령어를 설정하고, 하드웨어의 명령어 시스템을 이용하여 원래 소프트웨어에 의해 구현되었던 몇 가지 공통 기능을 구현하는 것이다. (알버트 아인슈타인, Northern Exposure (미국 TV 드라마), 예술명언) 이 컴퓨터는 복잡한 명령 시스템을 갖춘 컴퓨터가 되었다. 이전의 인텔 x86 명령 시스템은 CISC 명령 구조였습니다.
RISC 는 1980 년대에 개발된 축소된 명령어 세트 컴퓨터 (Reduced Instruction Set Computer) 의 약자입니다. 명령 기능을 최대한 단순화하고, 한 번에 실행할 수 있는 간단한 명령만 유지하며, 보다 복잡한 기능은 서브루틴으로 구현됩니다. (데이비드 아셀, Northern Exposure (미국 TV 드라마), 명령, 명령, 명령) 이 컴퓨터 시스템은 간단한 명령어 시스템 컴퓨터가 되었다. 현재 RISC 아키텍처 프로세서의 칩 제조업체로는 SUN, SGI, IBM 의 Power PC 시리즈, DEC 의 알파 시리즈, 모토로라의 드래곤볼, Power PC 등이 있습니다.
MIPS 시스템을 소개합니다.
MIPS 는 세계에서 가장 인기 있는 RISC 프로세서입니다. MIPS 는 "인터록 파이프라인 수준의 마이크로프로세서 없음" 을 의미하며, 가능한 한 소프트웨어를 사용하여 파이프 라인의 데이터 관련 문제를 방지하는 메커니즘입니다. 그것은 원래 스탠퍼드대 교수 Hennessy 가 이끄는 연구팀이 1980 년대 초에 개발한 것이다. MIPS 의 R 시리즈는 이를 바탕으로 개발된 RISC 산업 제품의 마이크로프로세서입니다. 이 제품들은 많은 컴퓨터 회사들이 다양한 워크스테이션과 컴퓨터 시스템을 구성하는 데 사용한다.
명령어 시스템
CPU 를 말하기 위해서는 먼저 명령 시스템을 말해야 한다. 명령 시스템은 CPU 가 처리할 수 있는 모든 명령입니다.
명령 세트는 CPU 의 기본 속성입니다. 예를 들어, 우리가 현재 사용하고 있는 CPU 는 모두 x86 명령어를 채택하고 있으며, PIII, 애슬론, 조슈아 등 같은 유형의 CPU 입니다. 우리는 또한 세계에 PIII 와 Athlon 보다 훨씬 빠른 CPU (예: Alpha) 가 있다는 것을 알고 있지만, 그들은 x86 명령어를 사용하지 않고 Windows98 과 같은 많은 수의 x86 명령어 기반 프로그램을 사용할 수 없습니다. 명령 시스템이 CPU 의 기본 속성이라고 하는 이유는 명령 시스템이 CPU 가 실행할 수 있는 프로그램을 결정하기 때문입니다.
고급 언어로 작성된 모든 프로그램은 기계 언어로 번역 (컴파일 또는 해석) 해야 실행할 수 있습니다. 이러한 기계 언어에는 명령이 포함되어 있습니다.
1, 명령 형식
지시문은 일반적으로 Opcode 와 주소 코드의 두 부분으로 구성됩니다. Opcode 는 실제로 CPU 에 수행해야 할 명령을 알려주는 명령 일련 번호입니다. 주소 코드는 복잡하며 주로 소스 피연산자의 주소, 대상 주소 및 다음 지침의 주소를 포함합니다. 일부 지침에서는 주소 코드를 일부 또는 모두 생략할 수 있습니다. 예를 들어, 빈 지시에는 opcode 만 있고 주소 코드는 없습니다.
예를 들어, 명령 시스템의 명령 길이는 32 비트, opcode 길이는 8 비트, 주소 길이는 8 비트, 첫 번째 명령은 더하기, 두 번째 명령은 빼기입니다. 00000001000000010000001000001/kloc-0 을 받았을 때 그런 다음 CPU 는 메모리 주소 00000 100 의 감소를 제거하고 000001의 감소를 제거하고 ALU 에 빼기로 보낸 다음 그 결과를 000001/KLOC 로 보냅니다.
이것은 상당히 단순화된 예일 뿐, 실제 상황은 훨씬 더 복잡하다.
2. 명령어 분류 및 주소 지정 방법
일반적으로 현재 명령 시스템에는 다음과 같은 유형의 명령이 있습니다.
(1) 산술 논리 연산 명령
산술 논리 연산 명령에는 더하기, 빼기, 곱하기, 나누기 등의 산술 연산 명령과 and 또는 xor 등의 논리 연산 명령이 포함됩니다. 이제 명령어 시스템에는 십진 연산 명령과 문자열 연산 명령도 추가되었습니다.
(2) 부동 소수점 연산 명령
부동 소수점 숫자를 조작할 수 있습니다. 부동 소수점 연산은 정수 연산보다 훨씬 복잡하므로 CPU 의 부동 소수점 연산 단위는 일반적으로 부동 소수점 연산을 담당합니다. 이제 일반적으로 부동 소수점 명령에 벡터 명령을 추가하여 행렬을 직접 조작하며 멀티미디어 및 3D 처리에 유용합니다.
(3) 비트 조작 명령
C 를 배운 사람들은 C 언어에 비트 조작문이 있고, 그에 따라 명령어 시스템에도 비트 조작 명령 (예: 왼쪽으로 한 비트 이동, 오른쪽으로 한 비트 이동) 이 있다는 것을 알아야 한다. 이 작업은 컴퓨터에서 이진 코드로 표시된 데이터에 대해 매우 간단하고 빠릅니다.
(4) 기타 설명
위의 세 가지는 모두 조작 명령이며, 다른 많은 명령들은 모두 조작할 수 없다. 이러한 명령에는 데이터 전송 명령, 스택 작동 명령, 전송 명령, 입출력 명령 및 권한 명령, 멀티프로세서 제어 명령 및 대기, 종료, 빈 작업 등의 특수 명령이 포함됩니다.
지시문의 주소 코드에는 직접 주소 지정, 간접 주소 지정, 레지스터 주소 지정, 기본 주소 지정, 인덱스 주소 지정 등 다양한 주소 지정 방법이 있습니다. 일부 복잡한 명령 시스템에는 수십 가지 이상의 주소 지정 모드가 있습니다.
3.CISC 및 RISC
CISC, 복잡한 명령어 세트 계산기, 복잡한 명령어 시스템 컴퓨터. 명령 집합 컴퓨터를 간소화하고 명령 시스템 컴퓨터를 간소화하다. 이 두 용어는 컴퓨터용이지만, 여기서는 명령어 집합만 연구한다.
(1)CISC 의 생성, 개발 및 현황
처음에는 컴퓨터의 명령어 시스템에 몇 가지 기본 명령어만 있었고, 다른 복잡한 명령어들은 소프트웨어가 컴파일될 때 간단한 명령어의 조합을 통해 이루어졌다. 가장 간단한 예를 들어, A 에 B 를 곱한 연산은 A 와 B 의 합으로 변환될 수 있으므로 곱셈 명령이 필요하지 않습니다. 물론, 최초의 명령 시스템에는 이미 곱셈 명령이 있었다. 왜요 하드웨어를 이용한 곱셈은 덧셈 합병보다 훨씬 빠르기 때문이다.
당시 컴퓨터 부품은 상당히 비싸고 속도가 느리기 때문에 속도를 높이기 위해 점점 더 복잡한 명령어가 명령어 시스템에 추가되었다. 그러나 곧 또 다른 문제가 발생했습니다. 명령 시스템의 명령 수는 명령 opcode 수에 의해 제한됩니다. Opcode 가 8 비트인 경우 최대 명령 수는 256 (2 의 8 승) 입니다.
그럼 우리는 어떻게 해야 할까요? 명령어 폭을 늘리는 것은 매우 어렵다. 똑똑한 디자이너는 한 가지 방안을 생각해냈다: Opcode 확장. 앞서 언급했듯이 opcode 뒤에는 주소 코드가 있습니다. 일부 지시문에는 주소 코드가 필요하지 않거나 소량의 주소 코드만 필요합니다. 그런 다음 opcode 를 이러한 위치로 확장할 수 있습니다.
간단한 예를 들어 명령 시스템의 opcode 가 2 비트인 경우 00,01,10,1/kloc-0 의 네 가지 다른 명령이 있을 수 있습니다 이제 1 1 을 유지하고 opcode 를 4 비트로 확장하여 00,01,1 100 을 가질 수 있습니다 포함 1 100, 1 10 1,1/
그런 다음 opcode 확장을 위한 전제 조건: 주소 코드를 줄이기 위해 디자이너들은 머리를 써서 기본 주소 주소 지정, 상대 주소 지정 등 다양한 주소 지정 방식을 발명하여 주소 코드 길이를 최대한 압축하고 opcode 를 위한 공간을 마련합니다.
이렇게 천천히 CISC 명령어 시스템이 탄생했다. 대량의 복잡한 명령어, 가변 명령어 길이, 다양한 주소 지정 방식은 CISC 의 특징이자 CISC 의 단판입니다. 이는 디코딩의 난이도를 크게 높이고 고속 하드웨어가 발전함에 따라 복잡한 명령어의 속도 향상은 디코딩에 시간을 낭비하는 것보다 훨씬 적기 때문입니다. PC 시장에서 여전히 사용 중인 x86 명령어를 제외하고 CISC 는 더 이상 서버와 더 큰 시스템에 사용되지 않습니다. X86 이 존재하는 유일한 이유는 x86 플랫폼의 많은 소프트웨어와 호환되기 위해서입니다.
]:(2)RISC 의 생산, 개발 및 현황.
1975 년, IBM 의 디자이너 존 코크가 당시 IBM370CISC 시스템을 연구한 결과, 명령어 수의 20% 에 불과한 간단한 명령어가 프로그램 호출의 80% 를 차지했고, 명령어의 80% 를 차지하는 복잡한 명령어는 20% 에 불과했다. 그래서 그는 RISC 의 개념을 제시했습니다.
RISC 가 성공한 것으로 밝혀졌습니다. 80 년대 말, 각 회사의 RISC CPU 가 우후죽순처럼 생겨 대량의 시장을 점령했다. 90 년대 펜티엄, K5 등 x86 CPUs 도 고급 RISC 커널을 사용하기 시작했다.
RISC 는 명령 길이가 고정되어 있고, 명령 형식이 적고, 주소 지정 방법이 적다는 특징이 있다. 그 중 대부분은 하나의 클럭 주기 내에 완성할 수 있는 간단한 지시이다. 초과량과 조립 라인은 쉽게 설계할 수 있고, 레지스터 수가 많고, 레지스터 사이의 계산량이 크다. 아래에 언급된 CPU 코어는 대부분 RISC 코어에 관한 것이기 때문에 여기서는 소개하지 않습니다. RISC 코어 설계에 대해 자세히 설명하겠습니다.
RISC 는 현재 발전하고 있으며, 인텔의 아이테니엄 역시 결국 x86 을 버리고 RISC 아키텍처로 전환할 것입니다.
둘째, CPU 코어 구조
좋아, CPU 를 보자. CPU 코어는 주로 연산자와 컨트롤러의 두 부분으로 나뉩니다.
(1) 산술 단위
1, 산술 논리 유닛 (ALU)
ALU 는 주로 이진 데이터에 대한 고정 소수점 산술 연산 (더하기, 곱하기, 나누기), 논리 연산 (및 비차이 또는) 및 이동 연산을 완료합니다. 일부 CPU 에는 이동 작업을 전문적으로 처리하는 변위기도 있습니다.
일반적으로 ALU 는 두 개의 입력과 한 개의 출력으로 구성됩니다. 정수 단위는 IEU (정수 실행 단위) 라고도 합니다. 우리가 흔히 말하는 "CPU 는 XX 비트" 는 ALU 가 처리할 수 있는 데이터 비트 수입니다.
2. 부동 소수점 단위
FPU 는 주로 부동 소수점 연산과 고정밀 정수 연산을 담당합니다. 일부 fpu 에는 벡터 연산 기능도 있고, 다른 FPU 에는 특수 벡터 처리 장치가 있습니다.
범용 레지스터 세트
범용 레지스터 그룹은 연산에 참여하는 피연산자와 중간 결과를 저장하는 가장 빠른 메모리 세트입니다.
RISC 와 CISC 는 범용 레지스터의 설계에서 매우 다릅니다. CISC 는 일반적으로 레지스터가 거의 없는데, 이는 주로 당시 하드웨어 비용에 의해 제한되었다. 예를 들어, x86 명령 세트에는 8 개의 범용 레지스터만 있습니다. 따라서 CISC 의 CPU 실행은 대부분 레지스터의 데이터가 아닌 메모리의 데이터에 액세스하는 데 사용됩니다. 이렇게 하면 전체 시스템의 속도가 느려집니다. RISC 시스템에는 겹치는 레지스터 창과 레지스터 파일을 사용하여 레지스터 리소스를 최대한 활용하는 범용 레지스터가 많이 있는 경우가 많습니다.
X86 명령어가 8 개의 범용 레지스터만 지원한다는 단점을 위해, Intel 과 AMD 의 최신 CPU 는 모두' 레지스터 이름 변경' 이라는 기술을 채택하여 x86CPU 가 8 개 레지스터의 한계를 돌파하여 32 개 이상에 달했다. 그러나 RISC 에 비해 이 기술의 레지스터 작업에는 레지스터 이름을 바꾸기 위한 클럭 주기가 하나 더 필요합니다.
4. 전용 레지스터
전용 레지스터는 일반적으로 일부 상태 레지스터이며 프로그램에 의해 변경될 수 없으며 CPU 자체에 의해 제어되어 상태를 나타냅니다.
(2) 컨트롤러
계산기는 연산만 수행할 수 있고 컨트롤러는 전체 CPU 를 제어하는 데 사용됩니다.
1, 명령 컨트롤러
명령 제어기는 제어기의 매우 중요한 부분입니다. 명령을 제거하고 분석한 다음 실행 단위 (ALU 또는 FPU) 에 제출하여 실행해야 합니다. 다음 지침의 주소도 형성해야 한다.
2. 타이머
타이밍 컨트롤러의 역할은 시계열의 각 명령에 대한 제어 신호를 제공하는 것입니다. 타이밍 컨트롤러에는 CPU 의 클럭 속도인 수정 발열기를 통해 매우 안정적인 펄스 신호를 보내는 클럭 생성기 및 멀티플라이어 정의 장치가 포함됩니다. 멀티플라이어 정의 장치는 메모리 클럭 속도 (버스 주파수) 보다 몇 배 더 높은 CPU 클럭 속도를 정의합니다.
3. 버스 컨트롤러
버스 컨트롤러는 주로 CPU 의 내부 및 외부 버스 (주소 버스, 데이터 버스, 제어 버스 등) 를 제어하는 데 사용됩니다.
4. 인터럽트 컨트롤러
인터럽트 컨트롤러는 다양한 인터럽트 요청을 제어하고 인터럽트 요청을 우선 순위에 따라 대기시켜 CPU 에 하나씩 처리하는 데 사용됩니다.
(CPU 코어 설계
CPU 성능을 결정하는 것은 무엇입니까? 단일 ALU 의 속도는 하나의 CPU 에서 결정적인 역할을 하지 않습니다. ALU 의 속도가 비슷하기 때문입니다. CPU 성능의 결정적인 요소는 CPU 코어의 설계에 있습니다.
1, 초과 수량
ALU 의 속도를 크게 높일 수 없다면 대체 방법은 무엇입니까? 병렬 처리 방법이 다시 한 번 강력한 역할을 했다. 초과 CPU 란 여러 alu, 여러 fpu, 여러 디코더 및 여러 파이프 라인만 통합하여 병렬 처리를 통해 성능을 향상시키는 CPU 입니다.
기준초과 기술은 잘 이해해야 하지만, 한 가지 주의할 점은' 기준초과' 이전의 숫자에 주의를 기울이지 않는 것이다. 예를 들면' 9 도로 기준초과' 이다. 공급업체마다 이 수치에 대해 서로 다른 정의를 가지고 있으며, 더 많은 것은 단지 상업 홍보 수단일 뿐이다.
2. 파이프
조립 라인은 현대 RISC 코어의 중요한 설계로 성능을 크게 향상시킵니다.
특정 명령 실행 프로세스의 경우 일반적으로 명령 가져오기, 명령 디코딩, 피연산자 가져오기, 연산 (ALU), 결과 쓰기의 다섯 부분으로 나눌 수 있습니다. 처음 세 단계는 일반적으로 명령 제어기에 의해 수행되고, 마지막 두 단계는 계산기에 의해 수행됩니다. 전통적인 방식으로 모든 명령은 순서대로 실행되므로 먼저 명령 컨트롤러 작업이 첫 번째 명령의 처음 세 단계를 완료한 다음 연산자 작업이 다음 두 단계를 완료하고 명령 컨트롤러 작업이 두 번째 명령의 처음 세 단계를 완료합니다. 이제 알고리즘이 두 번째 명령의 마지막 두 부분을 완료합니다. 명령 컨트롤러가 작동할 때 연산자는 기본적으로 쉬고 있지만 연산자는 작동합니다. 해결책은 쉽게 생각할 수 있다. 명령 컨트롤러가 첫 번째 명령의 처음 세 단계를 완료하면 산술 단위처럼 두 번째 명령의 작업을 직접 시작합니다. 이것은 파이프 시스템, 즉 2 단 파이프를 형성합니다.
초과 볼륨 시스템의 경우 세 개의 명령 제어 장치와 두 개의 연산자가 있다고 가정하면 첫 번째 명령의 주소가 완료되면 두 번째 명령의 주소를 직접 시작할 수 있습니다. 이때 첫 번째 명령은 디코딩이고, 세 번째 명령은 주소 지정, 두 번째 명령은 디코딩, 첫 번째 명령은 피연산자가 있는 ... 이것은 5 급 송수선이다. 분명히, 레벨 5 조립 라인의 평균 이론적 속도는 조립 라인의 4 배입니다.
파이프 라인 시스템은 CPU 자원을 최대한 활용하여 각 부품이 각 클럭 주기에서 작동하도록 하여 효율성을 크게 높입니다. 그러나 파이프에는 관련성과 전송이라는 두 가지 큰 문제가 있습니다.
파이프 라인 시스템에서 두 번째 명령에 첫 번째 명령의 결과가 필요한 경우 이를 종속성이라고 합니다. 위의 5 급 파이프를 예로 들어 보겠습니다. 두 번째 명령에 피연산자가 필요한 경우 첫 번째 명령의 작업이 아직 완료되지 않았습니다. 이때 두 번째 명령이 피연산자를 꺼내면 잘못된 결과를 얻을 수 있습니다. 그래서 이때, 전체 조립 라인은 첫 번째 지시가 완성될 때까지 멈추지 않을 수 없었다. (윌리엄 셰익스피어, 템플릿, 희망명언) 이것은 매우 성가신 문제입니다. 특히 레벨 20 과 같은 긴 파이프 라인의 경우, 이 일시 중지는 보통 10 여 개의 클럭 주기를 잃게 됩니다. 현재 이 문제를 해결하는 방법은 무질서하게 집행하는 것이다. 무질서한 실행의 원리는 관련이 없는 명령을 두 개의 관련 명령에 삽입하여 전체 파이프 라인을 매끄럽게 하는 것이다. 예를 들어, 위의 예에서, 첫 번째 명령어가 실행된 후 세 번째 명령어를 직접 실행한 다음 (세 번째 명령어가 관련이 없다고 가정) 두 번째 명령어를 실행하여 두 번째 명령어가 피연산자를 취해야 할 때 첫 번째 명령어가 막 끝나고 세 번째 명령어가 거의 끝나가고 전체 파이프 라인이 중지되지 않도록 합니다. 그러나, 파이프라인 차단은 완전히 피할 수 없다, 특히 많은 관련 지시가 있을 때는 더욱 그렇다.
또 다른 큰 문제는 조건부 전환이다. 위의 예에서 첫 번째 명령이 조건부 분기 명령인 경우 다음에 수행해야 할 명령을 알 수 없습니다. 이때, 너는 첫 번째 명령의 판단 결과를 기다려야 두 번째 지시를 실행할 수 있다. 조건 이전으로 인한 파이프라인 정지는 관련성보다 더 심각하다. 따라서 분기 예측 기술을 사용하여 이전 문제를 처리합니다. 프로그램이 분기로 가득 차고 어떤 분기도 가능하지만 대부분의 경우 분기를 선택합니다. 예를 들어 루프 끝에 분기가 있습니다. 마지막으로 루프에서 뛰어내려야 할 때를 제외하고, 우리는 항상 루프를 계속하기로 선택합니다. 이러한 원칙에 따라 분기 예측 기술은 결과를 얻고 실행하기 전에 다음 명령이 무엇인지 예측할 수 있습니다. 현재 분기 예측 기술은 90% 이상의 정확도를 달성할 수 있지만, 예측 오류가 발생하면 CPU 는 전체 파이프 라인을 정리하고 분기점으로 돌아가야 합니다. 이렇게 하면 많은 클럭 주기가 손실될 수 있다. 따라서 분기 예측의 정확성을 더욱 높이는 것도 연구 중인 과제다.
조립 라인이 길수록, 이 두 가지 문제는 더 심각해진다. 따라서 조립 라인이 길수록 좋을수록 여분의 수량이 많아진다. 속도와 효율성의 균형을 찾는 것이 가장 중요하다.
1, 디코딩 유닛
이는 x86CPU 만의 것으로, 길이가 정해지지 않은 x86 명령을 RISC 클래스의 고정 길이 명령으로 변환하여 RISC 커널에 전달하는 역할을 합니다. 디코딩은 하드웨어 디코딩과 마이크로 디코딩으로 나눌 수 있습니다. 간단한 x86 명령어의 경우 하드웨어 디코딩으로 충분하고 속도가 빠르며 복잡한 x86 명령어의 경우 미세 디코딩이 필요하며 몇 가지 간단한 명령어로 나누어야 합니다. 속도가 느리고 복잡합니다. 다행히도 이러한 복잡한 명령은 거의 사용되지 않습니다.
Athlon, PIII 및 구형 CISC x86 명령어는 성능을 심각하게 제한했습니다.
2. 1 차 및 2 차 캐시
캐시와 L2 캐시는 더 빠른 CPU 와 더 느린 메모리 사이의 갈등을 완화하기 위해 발생합니다. 캐시는 일반적으로 CPU 커널에 통합되어 있으며 L2 캐시는 OnDie 또는 온보드 방식으로 메모리보다 빠르게 작동합니다. CPU 캐시는 일부 데이터 교환량이 많은 작업에 특히 중요합니다.