본문 바로가기

컴퓨터시스템구조19

[컴퓨터시스템구조] 19. 프로세서(논리 설계, 조합 요소, 논리 요소) 소개 CPU 성능 요인 명령어 수(Instruction count) : ISA, 컴파일러에 의해 결정 CPI와 사이클시간(Cycle time) : CPU 하드웨어에 따라 결정 두 가지 MIPS 구현을 검토할 것이다. 1. 단순화된 버전 2. 현실적인 파이프라인 버전 단순 하위 집합으로 대부분의 측면을 보여줌 메모리 참조 : lw, sw 산술/논리 : add, sub, and, or, slt 제어 전달 : beq, j 명령어 실행 PC → 명령어 메모리, 명령어 가져오기 레지스터 번호 → 파일 등록, 레지스터 읽기 명령어 class에 따라 다르다. ALU를 사용하여 계산 산술 결과 로드/저장을 위한 메모리 주소 지점 대상 주소 로드/저장을 위해 데이터 메모리에 액세스 PC : 대상 주소 or PC + 4(.. 2023. 11. 6.
[컴퓨터시스템구조] 18. MIPS 부동 소수점 연산자 MIPS 부동소수점 연산자 부동소수점 하드웨어는 보조 프로세서(coprocessor) 1번 ISA를 확장하는 보조 프로세서 메인 메모리의 프로세스는 인덱스가 32비트*32개가 있었다. coprocessor도 인덱스가 32비트*32개가 있다. f로 시작 : $f0 ~ $f31번 까지 별도의 FP 레지스터 32 single-precision : $f0, $f1, ..., $f31 double-precision 쌍 : $f0/$f1, $f2/$f3, ... MIP 릴리스 2 ISA는 32*64비트 부동소수점 레지스터을 지원한다. double의 경우 짝수번만 사용한다. 부동소수점 명령어는 부동소수점 레지스터에서만 작동한다. 프로그램은 일반적으로 부동소수점 데이터에 대해 정수 연산을 수행하지 않으며 그 반대의 경.. 2023. 10. 19.
[컴퓨터시스템구조] 17. 부동 소수점 부동 소수점(Floating Point) 정수가 아닌 표현 매우 작은 숫자와 매우 큰 숫자 과학적 표기법과 유사 2.34 * 10^56 +0.002 * 10^–4 +987.02 * 10^9 2진법 ±1.xxxxxxx_2 * 2^yyyy C의 float 및 double 유형 부동 소수점 표준 IEEE Std 754-1985에 정의 표현의 다양화에 대응하여 개발됨 과학 코드의 이식성 문제 이제 거의 보편적으로 채택 두 가지 표현 Single precision (32비트) Double precision (64비트) IEEE 부동 소수점 형식 Sign Exponent(지수) Fraction(가수) single : 32비트 1비트 8비트 23비트 duoble : 64비트 1비트 11비트 52비트 X = (-1)^.. 2023. 10. 15.
[컴퓨터시스템구조] 16. 컴퓨터 산술(mult, mfhi, mflo, mul, div) 컴퓨터 산술 정수(integer) 연산 덧셈, 뺄셈 곱셈, 나눗셈 오버플로 처리 부동소수점 실수(Floating-point real number) 표현 및 연산자 산술 논리 장치(ALU) 정수 이진수의 산술/비트를 연산하는 조합 디지털 전자 회로 CPU, FPU, GPU를 포함한 다양한 컴퓨팅 회로의 기본 구성 요소 하나의 CPU, FPU, GPU에는 여러 ALU가 포함될 수 있다. 정수 덧셈 예) 7 + 6 결과가 범위를 벗어나면 오버플로가 발생한다. '+', '-' 피연산자 더하기 오버플로 없음 두 개의 '+' 피연산자 더하기 결과 부호(sign bit)가 1인 경우 : 오버플로 두 개의 '-' 피연산자 더하기 결과 부호(sign bit)가 0인 경우 : 오버플로 정수 뺄셈 두 번째 피연산자 부정 예.. 2023. 10. 15.
[컴퓨터시스템구조] 15. MIPS 배열 vs. 포인터 배열 vs. 포인터 배열 인덱싱 찾으려면 요소 크기에 인덱스를 곱해야한다. 배열 기본 주소에 추가 포인터는 메모리 주소에 직접적으로 대응한다. 인덱싱 복잡성을 피할 수 있다. 배열 C 코드 clear1(int array[], int size) { int i; for (i = 0; i < size; i += 1) array[i] = 0; } i : $t0 array 주소 : $a0 size : $a1 MIPS 코드 move $t0, $zero # i=0 loop1: sll $t1, $t0, 2 # $t1=i*4 add $t2, $a0, $t1 # $t2=&array[i] sw $zero, 0($t2) # array[i]=0 addi $t0, $t0, 1 # i+=1 slt $t3, $t0, $a1 # i 2023. 10. 15.