간접 사이클
-> 간접 주소지정 방식에서 사용
마이크로 연산
t0 : MAR <- IR(addr)
t1 : MBR <- M|MAR|
t2 : IR(addr) <- MBR
- 인출 사이클과 실행 사이클 사이에 위치
- 인출된 명령어의 주소 필드 내용을 이용하여 기억장치로부터 데이터의 실제 주소를 인출하여 IR의 주소필드에 저장
명령어 파이프라인
- cpu 프로그램 처리 속도 증가를 위해 cpu 내부 하드웨어를 여러 단계로 나누어 동시에 처리하는 기술
- 2단계 명령어 파이프라인
-> 명령어 실행하는 하드웨어를 인출 단계와 실행 단계라는 두 개의 독립적인 파이프라인 모듈로 분리
-> 병렬처리가 가능
-> 이론 상으로는 2단계 파이프라인을 사용하면 처리속도가 2배가 향상된다.
-> 하지만 2배가 되지 않음 -> 두 단계의 처리 시간이 동일하지않다.
-> 파이프라인 단계 수를 증가시켜 각 단계 처리 시간을 같게하면 전체적인 속도가 더 올라간다.
- 4단계 명령어 파이프라인
1. 명령어 인출(IF) 단계 - 다음 명령어를 기억장치로부터 인출
2. 명령어 해독(ID) 단계 - 해독기를 이용해 명령어 해독
3. 오퍼랜드 인출(OF) 단계 - 기억장치로부터 오퍼랜드 인출
4. 실행(EX) 단계 - 지정된 연산 수행
파이프 라인 단계 수 = k
실행할 명령어 수 = N
파이프라인에 의한 전체 명령어 실행 시간 = T(k) = k + (N-1)
파이프라인이 되지 않은 경우 = K * N
파이프라인에 의한 속도 향상 S(p) = T(1)/T(k) = (K * N) / (K + (N - 1))
파이프라인 효율 저하 요인
1. 모든 명령들이 파이프라인 단계들을 모두 거치지는 않는다.
-> 굳이 오퍼랜드 인출이 필요없지만 파이프라인 하드웨어를 단순화시키기 위해 모든 명령어가 네 단계 모두 통과시킴
2. 파이프라인 클록은 처리 시간이 가장 오래 걸리는 단계 기준으로 결정
3. IF단계 OF단계 동시에 기억장치 엑세스하면, 기억장치 충돌이 일어나 지연 발생
4. 조건 분기 명령어 실행시, 미리 인출하여 처리하던 명령어들이 무효화
분기 발생에 의한 성늘 저하 최소화 방법
1. 분기 예측 - 분기 역사 표 이용하여 최근 분기 결과 참조
2. 분기 목적지 선인출
-> 조건 분기 인식되면, 분기 명령어의 다음 명령어뿐 아니라 분기의 목적지 명령어도 함꼐 인출하여 실행
3. 루프 버퍼 사용 - 가장 최근 인출된 명령어를 순서대로 저장해둠
4. 지연 분기 - 분기 명령어를 뒤로 미룸
상태 레지스터
- 조건분기 명령어가 사용할 조건 플래그들 저장
- 조건 플래그 종류
1. 부호(S) 플래그 : 직전에 수행된 산술연산 결과값의 부호 비트 저장
2. 영(Z) 플래그 : 연산 결과값이 0 이면 1
3. 올림수(C) : 플래그 덧셈이나 뺄셈에서 올림수(carry)나 빌림수(borrow)가 발생한 경우 1로 세트
4. 동등(E) 플래그 : 두 수를 비교한 결과가 같은 경우 1로 세트
5. 오버플로우(V) 플래그 : 산술 연산 과정에서 오버플로우 발생 시 1로 세트
6. 인터럽트(I) 플래그 : 인터럽트 가능 상태 -> 1, 불가능 -> 0
7. 슈퍼바이저(P) 플래그 : cpu 실행 모드가 슈퍼바이저 모드 -> 1, 사용자 모드 -> 0
슈퍼스칼라
- cpu의 처리 속도를 높이기 위해 두 개 혹은 그 이상의 명령어 파이프라인들을 포함시키는 구조
- 매 클록 주기마다 각 명령어 파이프라인이 별도의 명령어 인출 및 실행
-> 이론적으로 프로그램 처리 속도가 파이프라인의 수만큼 향상
- 파이프라인의 수 = m : m-way슈퍼스칼라
단일 파이프라인 실행 시간 -> T(1) =k + N - 1
m-way 슈퍼스칼라에 의한 실행 시간 -> T(m) = k + (N-m/m)
속도 향상 -> S(p) = T(1)/T(m) = (k+N-1)/((k+(N-m))/m) = m(k+N-1)/N+m(k-1)
슈퍼스칼라 속도 저하 요인
- 명령어들 간의 데이터 의존 관계
- 하드웨어(ALU, 레지스터 등)이용에 대한 경합 발생 -> 동시에 실행 가능한 명령어 수 < m
<해결책>
- 명령어 실행 순서 재배치 -> 명령어들 간의 데이터 의존성 제거
- 하드웨어 추가(중복) 설치 -> 하드웨어(ALU, 레지스터 등)에 대한 경합 감소
듀얼-코어 및 멀티-코어
- cpu 코어 : 명령어 실행에 필요한 cpu 내부의 핵심 하드웨어 모듈(슈퍼스칼라 H/W, ALU, 레지스터 등)
- 멀티-코어 프로세서 : 여러 cpu 코어들을 하나의 칩에 포함시킨 프로세서
ex) 듀얼 코어, 쿼드 코어, 헥사 코어, 옥타 코어 등...
- 칩-레벨 다중프로세서 혹은 단일-칩 다중프로세서라고도 부른다.
듀얼-코어 프로세서
- 단일-코어 슈퍼스칼라 프로세서에 비해 2배 속도 향ㄹ상 기대
- 코어들은 내부 캐시와 시스템 버스 인터페이스만 공유
- 코어 별로 독립적 프로그램 실행 -> 멀티테스킹 혹은 멀티 쓰레딩 지원
멀티 쓰레딩
- 쓰레드(thread) : 독립적으로 실행될 수 있는 최소 크기의 프로그램 단위
- 단일-쓰레드 모델 : 각 코어가 쓰레드를 한 개씩 처리
-> 처리 중 쓰레드에 대한 시스템 상태, 데이터 및 주소 정보를 레지스터 세트(RS)에 저장
-> RS : 프로그램 카운터(PC), 스택 포인터(SP), 상태 레지스터, 데이터 레지스터, 주소 레지스터 등
- 멀티 쓰레드 모델
-> 각 코어는 두 개의 RS들을 포함하여 쓰레드를 두 개씩 처리
-> 두 쓰레드들의 CPU 코어의 H/W자원들 (ALU, 부동소수점유니트, 온-칩 캐시, TLB 등)을 공유
-> 멀티-쓰레드 프로세서 : 두 개의 물리적 프로세서들이 네 개의 논리적 프로세서 들로 구성되어있다.
명령어 세트 : cpu를 위하여 정의된 명령어들의 집합
- 명령어 세트 설계를 위해 결정되어야 할 사항들
1. 연산 종류
- 데이터 전송
- 산술 연산
- 논리 연산
- 입출력
- 프로그램 제어 : 서브루틴호출을 위한 명령어(CALL(현재 PC 내용 저장 후 서브루틴 으로 이동), RET(복귀))
-> CALL X 명령어에 대한 마이크로 연산
t0 : MBR <- PC
t1 : MAR <- SP, PC <- X
t2 : M|MAR| <- MBR, SP <- Sp-1 // 주소 지정 단위가 바이트며 저장될 주소는 16비트라면 Sp<-Sp-2
-> RET 명령어 마이크로 연산
t0 : SP <- SP + 1
t1 : MAR <- SP
t2 : PC <- M|MAR|
2. 데이터 형태
3. 명령어 형식
- 연산 코드 : 수행할 연산 지정
- 오퍼랜드 : 연산 수행 시 필요한 데이터 혹은 주소
-> 각 연산은 한 개 혹은 두 개의 입력 오퍼랜드와 한 개의 결과 오퍼랜드 포함
-> 데이터는 CPU 레지스터, 주기억장치, 혹은 I/O장치에 위치
- 다음 명령어 주소
-> 현재 명령어 실행이 완료된 후 다음 명령어를 인출할 위치 지정
-> 분기 혹은 호출 명령어와 같이 실행 순서를 변경하는 경우 필요
- 명령어 형식 : 명령어 내 필드들의 수와 배치 방식, 각 필드의 비트 수
- 필드 : 명령어의 각 구성 요소들에 소요되는 비트들의 그룹
- 명령어 길이 : 단어 길이(한 번에 처리할 수 있는 데이터 길이)
- 연산 코드 필드 길이 : 연산의 개수 결정
-> 4비트인 경우 2^4 즉 16가지 연산 정의 가능->5면 32가지 가능 -> 다른 필드의 길이 감소
- 오퍼랜드 필드의 길이 : 오퍼랜드 범위 결정(종류에 따라 변경)
-> 데이터 : 표현 가능한 수 범위
-> 기억장치 주소 : CPU가 오퍼랜드 인출을 위해 직접 주소를 지정할 수 있는 기억장치 용량
-> 레지스터 번호 : 데이터 저장에 사용될 수 있는 레지스터 개수 결정
ex) 오퍼랜드1이 레지스터 번호(4비트) -> 16개 레지스터 사용가능
오퍼랜드2가 기억장치 주소 지정(8비트) -> 기억장치 범위 0~255번지
오퍼랜드가 2의 보수로 표현되는 데이터 -> -2^11~2^11-1
오퍼랜드가 기억장치라면 2^12 = 4096 기억장치 주소 지정 가능
오퍼랜드 수에 따른 명령어 분류
- 1주소 명령어 ex) ADD X : AC <- ADC+M|X| (다른 한 오퍼랜드는 묵시적으로 AC가 된다)
- 2주소 명령어 ex) ADD R1,R2
- 3주소 명령어 ex) ADD R1,R2,R3
4. 주소지정 방식
- 명령어 실행에 필요한 오퍼랜드의 주소를 결정하는 방식
- 다양한 주소지정 방식을 사용하는 이유 : 제한된 수의 명령어 비트들을 이용하여, 사용자가 여러 가지 방법으로 오퍼랜드 주소를 결정하게 해주며, 더 큰 용량의 기억장치를 사용할 수 있도록 하기 위함
- 명령어 내 오퍼랜드 필드의 내용
-> 기억장치 주소
-> 레지스터 번호
-> 데이터
- 기호
-> EA : 유효주소(데이터가 저장된 기억장치의 실제 주소)
-> A : 명령어 내의 주소 필드 내용(오퍼랜드 필드 내용이 기억장치 주소인 경우)
-> R : 명령어 내의 레지스터 번호(오퍼랜드 필드 내용이 레지스터 번호인 경우)
-> (A) : 기억장치 A번지의 내용
-> (R) : 레지스터 R의 내용
- 주소지정 방식의 종류
1) 직접 주소지정 방식
EA = A (오퍼랜드 필드의 내용이 유효 주소가 되는 방식)
장점) 데이터 인출을 위해 한 번의 기억장치 엑세스만 필요
단점) 연산 코드를 제외하고 남은 비트들만 주소 비트로 사용 되기에 직접 지정할 수 있는 기억장소의 수가 제한
2) 간접 주소지정 방식
EA = (A) (오퍼랜드 필드에 기억장치 주소가 있지만 그 주소는 기억 장치에 데이터 유효 주소를 저장)
장점) 최대 기억장치 단어 길이에 의하여 결정 -> 주소지정 가능한 기억장치 용량 확장
단점) 실행 사이클 동안 두 번의 기억장치 엑세스 필요(1. 주소 인출 2. 주소가 지정하는 기억장소에서 실제 데이터 인출)
명령어 형식에 간접비트(I)필요 -> 만약 I=0 (직접 주소지정 방식), I=1 (간접 주소지정 방식)->간접 사이클 실행
다단꼐 간접 주소 지정 방식 : EA = ((..(A)..))
3) 묵시적 주소지정 방식
명령어 실행에 필요한 데이터 위치가 묵시적으로 지정
ex) SHL 명령어 : 누산기 내용을 좌측으로 시프트, PUSH R1 명령어 : 레지스터 R1의 내용을 스택에 저장
장점) 명령어 길이가 짧다
단점) 종류가 제한된다.
4) 즉시 주소지정 방식(직접데이터방식)
데이터가 명령어에 포함되어 있는 방식
용도 : 프로그램에서 레지스터나 변수 초기 값을 상수값으로 세트하는데 사용
장점) 데이터 인출을 위한 기억장치 엑세스가 필요없다.
단점) 상수값 크기가 오퍼랜드 필드 수에 의해 제한
5) 레지스터 주소지정 방식
연산에 사용될 데이터가 내부 레지스터에 저장되어 있는 경우, 명령어의 오퍼랜드가 해당 레지스터를 가리키는 방식
EA=R
장점) 오퍼랜드 필드의 비트 수가 적어도 된다. 데이터 인출을 위해 기억장치 엑세스가 필요없다.
단점) 데이터가 저장될 수 이는 공간이 CPU 내부 레지스터들로 제한
6) 레지스터 간접 주소지정 방식
오퍼랜드 필드(레지스터 번호)가 가리키는 레지스터 내용을 유효 주소로 사용하여 실제 데이터를 인출하는 방식
EA=(R)
장점) 주소지정 할 수 있는 영역이 확장, 레지스터 길이 16비트 -> 주소지정 영역 2^16
7) 변위 주소지정 방식
7-1) 상대 주소지정 방식
7-2) 인덱스 주소지정 방식
7-3) 베이스-레지스터 주소지정 방식
'학교수업' 카테고리의 다른 글
컴퓨터 그래픽스 5주차 (0) | 2022.04.06 |
---|---|
윈도우즈프로그래밍 4주차 (0) | 2022.04.01 |
컴퓨터 그래픽스 기초 4주차 (0) | 2022.03.30 |
인공지능개론 4주차 (0) | 2022.03.30 |
게임공학개론 4주차 (0) | 2022.03.28 |