Lec2-ISA I

한국어판 강의자료 · 33쪽
1쪽
p.1CSED311 컴퓨터구조 – 강의 2
  • instruction set architecture (ISA)(명령어 집합 아키텍처) I
  • 김광선
  • 컴퓨터공학과
  • POSTECH
2쪽
p.2드론을 구입했다고 상상해보자
  • 드론을 어떻게 조종하는지 배우려면 어떻게 해야 할까?
3쪽
p.3드론 기능 사양 예시
4쪽
p.4컴퓨터가 무엇을 하는지 어떻게 사양할까?
  • 아키텍처(명령어 집합 아키텍처) 수준
  • 자동차: 운전 매뉴얼 및 운영 매뉴얼
  • // 자동차 정비사가 아니어도 자동차를 운전할 수 있음
  • 컴퓨터: 명령어 집합 매뉴얼 (예: Intel x86-64, Arm v8, RISC-V)
  • // 회로 설계자가 아니어도 컴퓨터를 사용할 수 있음
  • 마이크로아키텍처(구현) 수준
  • 특정 자동차 설계는 전기 및 기계적 구성 요소의 특정 구성
  • 특정 컴퓨터 설계는 datapath(데이터 경로) 및 control logic units(제어 논리 회로)의 특정 구성
  • 다수의 맥락(예: 뉴스 기사)에서 아키텍처와 microarchitecture(마이크로아키텍처)를 서로 바꿔 쓰는 경우가 많음
  • 이 수업에서는 용어의 엄격한 정의를 따를 것임
5쪽
p.5차량의 전송 방식 – 아키텍처 수준
  • 수동 변속기
  • 자동 변속기
6쪽
p.6차량의 전송 방식 – microarchitecture(마이크로아키텍처) 수준
  • 수동 변속기
  • 자동 변속기
  • 출처: DOI: 10.3844/ajeassp.2018.586.597
  • 출처: https://youtu.be/Ugao6jTyM7k
7쪽
p.7Intel x86 아키텍처 매뉴얼
8쪽
p.8microarchitecture(마이크로아키텍처) 예시
  • NVIDIA A100 GPU
  • Arm Neoverse N1 코어
  • 출처: https://en.wikichip.org/wiki/arm_holdings/microarchitectures/neoverse_n1
  • 출처: NVIDIA
9쪽
p.9컴퓨터가 무엇을 하는지 어떻게 지정할까?
  • 아키텍처 (명령어 집합 아키텍처) 수준
  • 자동차: 운전 매뉴얼 및 운영 매뉴얼
  • ※ 자동차 정비사가 아니어도 자동차를 운전할 수 있음
  • 컴퓨터: 명령어 집합 매뉴얼 (예: Intel, Arm, RISC-V)
  • ※ 회로 설계자가 아니어도 컴퓨터를 사용할 수 있음
  • 마이크로아키텍처 (구현) 수준
  • 특정 자동차 설계는 전기적·기계적 구성 요소의 특정 구성
  • 특정 컴퓨터 설계는 datapath(데이터 경로) 및 control logic units(제어 논리 회로)의 특정 구성
  • 회로 (=물리적 구현) 수준
  • 자동차: 금속 판, 크랭크, 샤프트, 기어 등
  • 컴퓨터: 게이트, 와이어, 반도체, 트랜지스터 등
10쪽
p.10저장 프로그램 (von Neumann) 아키텍처
  • stored program architecture(저장 프로그램 아키텍처)
  • 명령어는 선형 메모리 배열에 저장됨
  • • 명령어(및 데이터)는 메모리에 있음
  • • 명령어는 데이터처럼 수정될 수 있음
  • • 둘 다 0과 1로 구성됨
  • 순차적 명령어 처리
  • 1. 프로그램 카운터 (PC)는 현재 명령어를 식별함
  • 2. 명령어는 메모리에서 가져와 실행됨
  • 3. program counter (PC)(프로그램 카운터)가 명령어에 따라 증가함
  • 4. 반복함
  • Burks, Goldstein, von Neumann, 1946년, 전자 계산 장치의 논리적 설계에 대한 초안 논의
11쪽
p.11von Neumann vs. 데이터 흐름
  • von Neumann: von Neumann 프로그램을 고려해보자
  • 프로그램 순서의 의미는 무엇인가?
  • 저장 위치의 의미는 무엇인가?
  • 데이터 흐름: 명령어 순서는 데이터 흐름 의존성에 의해 지정됨 (프로그램 카운터 없음!!)
  • 각 명령어는 결과를 받을 대상을 지정함
  • 명령어는 모든 operand(피연산자)가 도착했을 때 '언제든지' 실행될 수 있음
  • 어느 쪽이 더 나은가?
  • v <= a + b;
  • w <= b * 2;
  • x <= v – w;
  • y <= v + w;
  • z <= x * y;
  • +
  • *2
  • -
  • +
  • *
  • b
  • z
  • a
  • ‘von Neumann bottleneck(폰 노이만 병목)’
12쪽
p.12명령어 집합 아키텍처 (ISA)
  • "컴퓨터 사용자 매뉴얼"
13쪽
p.13instruction set architecture (ISA)(명령어 집합 아키텍처)에서 정의/결정되는 사항은 무엇인가?
  • ‘기계 수준 또는 어셈블리 프로그래머에게 제공되어야 하는 모든 정보’
  • 데이터 유형
  • 인코딩 및 표현 방식
  • memory model(메모리 모델)
  • 프로그래머가 볼 수 있는 상태
  • general-purpose registers (GPR)(범용 레지스터)
  • 메모리 공간
  • program counter (PC)(프로그램 카운터)
  • 프로세서 상태
  • 명령어 집합
  • 명령어 및 형식
  • addressing modes(주소 지정 방식)
  • 데이터 구조
  • 시스템 모델
  • 상태
  • privilege level(권한 수준)
  • interrupt(인터럽트)
  • 입출력
  • external interface(외부 인터페이스)
  • 입출력 관리
  • ‘아키텍처’라는 용어는 프로그래머가 보는 시스템의 특성, 즉 개념적 구조와 기능적 행동을 설명하기 위해 사용되며, 데이터 흐름과 제어의 구성, 논리적 설계, 물리적 구현과는 구분된다.
  • --- IBM System/360 아키텍처, Amdahl, Blaauw 및 Brooks, 1964년, 1페이지 주석
14쪽
p.14프로그래머가 볼 수 있는 상태
  • M[0]
  • M[1]
  • M[2]
  • M[3]
  • M[4]
  • M[N-1]
  • 메모리
  • 주소로 인덱싱된 저장 위치의 배열
  • 프로그램 카운터 (32비트 ~ 64비트)
  • : 현재 명령어의 메모리 주소
  • 명령어(및 프로그램)는 프로그래머가 볼 수 있는 상태의 값을 변환하는 방법을 지정한다
  • 32비트 ~ 64비트
  • 레지스터
  • - ISA에서 특별한 이름을 부여받음 (주소와는 다름)
  • - general-purpose(범용) vs. special-purpose(특수 목적)
15쪽
p.15일반 명령어 클래스
  • 산술 및 논리 연산 (예: add, sub, and, or)
  • 일반적으로 정수 및 부동소수점 명령어로 분류됨
  • 1) 지정된 위치에서 operand(피연산자) 가져오기
  • 2) operand(피연산자)에 대한 함수로 결과 계산하기
  • 3) 결과를 지정된 위치에 저장하기
  • 4) PC를 다음 순차 명령어로 업데이트하기
  • 데이터 이동 연산 (예: move, load, store)
  • 1) 지정된 위치에서 operand(피연산자) 가져오기
  • 2) operand(피연산자) 값을 지정된 위치에 저장하기
  • 3) PC를 다음 순차 명령어로 업데이트하기
16쪽
p.16일반 명령어 클래스, 계속
  • 제어 흐름 연산 (예: branch, jump)
  • 1) 지정된 위치에서 operand(피연산자) 가져오기
  • 2) branch(브랜치) 조건과 타겟 주소 계산하기
  • 3) ‘branch(브랜치) 조건이 참’이면 PC ← 타겟 주소
  • 그렇지 않으면 PC ← 다음 순차 명령어
  • 모든 명령어는 일반적으로 atomic instruction(원자적 명령어)로 정의됨
17쪽
p.17초기 instruction set architecture (ISA)(명령어 집합 아키텍처): EDSAC (1949)
  • 단일 accumulator(누산기) 아키텍처, 즉 ACC ← ACC ⊕ M[n]
  • A n: M[n]을 ACC에 더하기
  • T n: ACC의 내용을 M[n]에 전송하고 초기화하기
  • E n: ACC ≥ 0이면 M[n]으로 branch(브랜치)하거나 순차적으로 진행하기
  • I n: 종이 테이프에서 다음 문자를 읽어 M[n]의 가장 낮은 5비트에 저장하기
  • Z: 기계를 정지하고 경고 벨을 울리기
  • 메모리 주소가 명령어에 하드코딩되어 있음 (‘n’)
  • opcode(연산 코드) 5비트
  • n 10비트
  • 예약됨
  • operand(피연산자) 크기
18쪽
p.18같은 실수를 다시 하시겠습니까?
  • 함수 호출
  • 루프 내 배열 접근
  • ......
  • a:
  • E n1
  • ......
  • ......
  • b:
  • E n1
  • ......
  • f: ......
  • ......
  • ......
  • E n2
  • ?
  • ......
  • a:
  • ......
  • A n1
  • ......
  • ......
  • E n2
  • ......
  • i
  • i+1
  • i+2
  • 어떻게 고칠 수 있나요?
  • f
  • n1
  • n2
  • a+1
  • n1
  • n2
  • a
  • ?
19쪽
p.19레지스터 아키텍처의 진화
  • accumulator(누산기)
  • ‘덧셈 기계’ 시대의 유산
  • 계산기의 ‘AC’ 버튼?
  • accumulator(누산기) + address registers(주소 레지스터)
  • register indirect addressing(레지스터 간접 주소 지정)이 필요함
  • 초기에는 address registers(주소 레지스터)가 특수 목적 전용이었음 (즉, 간접 주소 지정용 주소를 저장하는 데만 사용됨)
  • 결국 address registers(주소 레지스터)에 산술 연산이 지원됨
  • general-purpose registers (GPR)(범용 레지스터)
  • 모든 레지스터가 모든 목적에 적합함
  • 몇 개의 레지스터에서부터 32개(RISC에서 흔함)까지, 128개(예: Intel Itanium)까지 다양함
  • 어떤 요인이 변화를 이끌었는가?
20쪽
p.20operand(피연산자) 출처?
  • operand(피연산자)의 수
  • 일항 연산
  • OP in2
  • (예: EDSAC)
  • 이항 연산
  • OP inout, in2
  • (예: IBM 시스템/360)
  • (메모리 절약을 위해 더 작은 인코딩에서 3개의 operand(피연산자) 사용)
  • 삼항 연산
  • OP out, in1, in2
  • (예: MIPS)
  • ALU operand(피연산자) 중 일부가 메모리에 있을 수 있는가?
  • 예!
  • 예: x86/VAX/‘CISC(복합 명령어 집합 컴퓨터)’
  • 아니요!
  • 예: MIPS/‘RISC(축소 명령어 집합 컴퓨터)’
  • → ‘Load-Store architecture(로드-스토어 아키텍처)’
  • 다양한 변형의 수
  • 매우 적음
  • 예: MIPS / RISC
  • 매우 많음
  • 예: x86
  • 모든 것이 가능함
  • 예: VAX
21쪽
p.21메모리 addressing modes(주소 지정 방식)
  • absolute addressing(절대 주소 지정)
  • LD rt, 10000
  • 주소로 즉시 값 사용
  • register indirect addressing(레지스터 간접 주소 지정)
  • LD rt, (rbase)
  • GPR[rbase]를 주소로 사용
  • displaced addressing(변위 주소 지정) 또는 based addressing(기준 주소 지정)
  • LD rt, offset(rbase)
  • offset + GPR[rbase]를 주소로 사용
  • indexed addressing(인덱스 주소 지정)
  • LD rt, (rbase, rindex)
  • GPR[rbase] + GPR[rindex]를 주소로 사용
  • memory indirect addressing(메모리 간접 주소 지정)
  • LD rt ((rbase))
  • M[GPR[rbase]]의 값을 주소로 사용
  • auto Increment/Decrement(자동 증가/감소)
  • LD rt, (rbase)
  • GPR[rbase]를 주소로 사용하지만, 매번 GPR[rbase]를 증가 또는 감소시킴
  • 기타 생각해볼 수 있는 것들……
  • 표기법 사용 설명: GPR[rbase]
  • 레지스터의 ID (즉, 레지스터 번호)
  • 레지스터 rbase의 값
22쪽
p.22VAX-11: 중년기의 instruction set architecture (ISA)(명령어 집합 아키텍처)
  • 최초의 상용 32비트 컴퓨터 (DEC, 1977)
  • -- 중요한 이정표로 여겨짐
  • orthogonality(직교성)과 completeness(완전성)의 극치
  • 위의 모든 addressing modes(주소 지정 방식)
  • x {7개의 정수 형식 및 2개의 부동소수점 형식}
  • x {300개 이상의 opcode(연산 코드)}
  • opcode(연산 코드)의 과잉
  • 2연산자 및 3연산자 버전의 ALU 연산
  • INS(/REM)QUE (순환 이중 연결 리스트용)
  • "polyf": 4차 다항식 평가
  • variable-length encoding(가변 길이 인코딩) (1~56바이트)
  • → 어떤 트레이드오프가 있는가?
  • 예) addl3 r1,737(r2),(r3)[r4]
  • 7바이트, 순차적 디코딩
  • 이후 DEC는 Alpha라는 RISC 아키텍처로 전환함
  • VAX 11/780 컴퓨터
  • 출처: https://www.computerhistory.org/revolution/mainframe-computers/7/182/736
23쪽
p.23RISC(축소 명령어 집합 컴퓨터)
  • 간단한 연산
  • 2입력, 1출력 arithmetic and logical operations(산술 및 논리 연산)
  • 동일한 일을 수행하는 방법이 거의 없음
  • 간단한 데이터 이동
  • ALU 연산은 레지스터 간 연산 (큰 레지스터 파일 필요)
  • 메모리는 오직 로드 및 스토어 명령어를 통해 접근 가능 → ‘Load-Store architecture(로드-스토어 아키텍처)’
  • 간단한 branch(브랜치)
  • branch(브랜치) 조건 및 타깃의 종류가 제한됨
  • 간단한 instruction encoding(명령어 인코딩)
  • 모든 명령어가 동일한 비트 수로 인코딩됨 (왜냐하면?)
  • 형식이 매우 적음
  • 예: MIPS 및 RISC-V
  • 이러한 instruction set architecture (ISA)(명령어 집합 아키텍처)는 어셈블리 프로그래밍보다 컴파일된 코드를 위한 것이 목적임 (CISC와 대조)
24쪽
p.24instruction set architecture (ISA)(명령어 집합 아키텍처)의 진화
  • 왜 초기 instruction set architecture (ISA)(명령어 집합 아키텍처)는 그렇게 단순했는가?
  • 예: EDSAC
  • 기술적 한계
  • 경험 부족, 사례 부족
  • 왜 나중에 그렇게 복잡해졌는가?
  • 예: VAX-11, x86
  • 어셈블리 프로그래밍
  • 메모리 크기 및 성능 부족
  • microprogrammed implementation(마이크로프로그램 구현) (강의 6)
  • 왜 다시 단순해졌는가?
  • 예: MIPS, RISC-V, Arm
  • 메모리 크기 및 속도 (캐시!) (강의 14)
  • compiler(컴파일러)
  • 왜 x86은 여전히 ‘정상’인가?
  • 기술 vs. 경제
  • 기술 vs. 심리학
  • 기술 vs. 막대한 자금
  • ‘The Case for the Reduced Instruction Set Computer’ 논문을 읽어보라 (Patterson and Ditzel, 1980), 더 잘 이해할 수 있음
25쪽
p.25ISA를 설계해야 한다면?
26쪽
p.26개방형 설계: 추론과 예측
  • ‘고객의 계획과 프로그래밍에 10년간 신뢰할 수 있는 기반을 제공하며, 지속적인 실험실 개발을 가능하게 한다…’
  • 보통의 수명은 15~20년이지만….
  • 요소들의 ‘비동기적’ 운영
  • 정확한 시간, 성능 등을 추상화하여 (1) 기술 변화와 (2) 요소 간 상대적 속도 변화를 허용
  • 저장 용량, 다중 CPU, 다중 I/O 등에 대한 parameterization(파라미터화)
  • instruction encoding(명령어 인코딩)에서 여유 비트를 ‘예약’하여 미래 확장 허용
  • 확장 서브시스템에 대한 standard interface(표준 인터페이스) 제공
  • [Amdahl, Blaauw and Brooks, 1964]
27쪽
p.27일반 목적
  • 일반 목적 = 다양한 도메인(예: 상업, 과학, 실시간 등)에서 ‘크고 작은, 별도의, 혼합된 응용 프로그램’에 대해 효과적인 지원
  • 어떻게?
  • code-independent operation(코드 독립적 연산)
  • • 데이터 내 비트 패턴에 특별한 해석을 하지 않음
  • 예: ASCII 문자에 특별한 의미 없음
  • • 필수적인 경우를 제외하고는
  • 예: 정수, 부동소수점 등
  • 비트 및 데이터 엔티티에 대한 논리 조작의 완전한 일반성 지원
  • 세밀한 메모리 주소 지정 가능성 (예: 바이트 주소 지정 가능성)
  • [Amdahl, Blaauw and Brooks, 1964]
28쪽
p.28모델 간 호환성
  • 엄격한 프로그램 호환성 = ‘실행 시간에 의존하지 않는 유효한 프로그램이 구성 A에서 실행될 수 있다면, 구성 B에서도 실행될 수 있다. 단, 구성 B가 최소한 필요한 저장 용량과 최소한 필요한 I/O 장치를 포함하고 있다면…’
  • 비유효 프로그램은 동일한 결과를 내야 한다는 제약 없음
  • ‘비유효 프로그램’은 아키텍처 매뉴얼을 위반하는 프로그램을 의미하며, 예외를 발생시키는 프로그램을 의미하는 것은 아님
  • 예외 조건은 아키텍처의 일부
  • 논리적 구조 및 기능의 virtualization(가상화)를 통해
  • binary compatibility(이진 호환성)의 왕: Intel x86, IBM System/360
  • 소프트웨어 기반
  • 성능 확장성
  • [Amdahl, Blaauw and Brooks, 1964]
29쪽
p.29정리: 용어 정의
  • 명령어 집합 아키텍처 (ISA)
  • • 프로그래머가 관찰하고 제어할 수 있는 머신의 동작
  • 명령어 집합
  • • 컴퓨터가 이해하는 명령어의 집합
  • machine code(머신 코드)
  • • 이진 형식으로 인코딩된 명령어의 모음
  • • 하드웨어에 직접 소비 가능한 형태
  • assembly code(어셈블리 코드)
  • • ‘텍스트 형식’으로 표현된 명령어의 모음
  • 예: ADD r1, r2, r3
  • • 어셈블러에 의해 machine code(머신 코드)로 변환됨
  • • machine code(머신 코드)와 (대략) 일대일 대응
30쪽
p.30질문?
  • 공지사항
  • - 교재 읽기: P&H Ch. 2 및 선택적으로 Appendix D (모든 주요 ISA 요약)
  • (Appendices는 이 링크에서 제공됨)
  • - 논문 읽기: ‘The Case for the Reduced Instruction Set Computer’, Patterson and Ditzel, 1980
  • - 교재(&논문) 독서 그룹:
  • • 카메라를 켜고 마이크는 끄세요. 토론은 채팅을 이용하세요.
  • • 월, 수, 금 9-10pm 및 화, 목 8-9pm
  • • Zoom 링크: https://us02web.zoom.us/j/85840311354?pwd=cEdyZDJjUzJ4MlFsWnMzc041L3YwZz09
  • (회의 ID: 858 4031 1354, 비밀번호: v3td8m)
  • - 참고: 이 과정의 모든 독서 과제는 첫 번째 강의 노트에 제시됩니다.
31쪽
p.31백업 슬라이드
32쪽
p.32다양한 아키텍처의 예시
  • TOS
  • 프로세서
  • 메모리
  • ...
  • ...
  • 스택
  • 프로세서
  • 메모리
  • ...
  • ...
  • accumulator(누산기)
  • 프로세서
  • 메모리
  • ...
  • ...
  • 레지스터-메모리
  • 프로세서
  • 메모리
  • ...
  • ...
  • 레지스터-레지스터
33쪽
p.33C = A + B에 대한 코드 시퀀스 예시
  • 스택
  • accumulator(누산기)
  • 레지스터-메모리
  • 레지스터-레지스터
  • Push A
  • Push B
  • Add
  • Pop C
  • Load A
  • Add B
  • Store C
  • Load R1, A
  • Add R3, R1, B
  • Store C, R3
  • Load R1, A
  • Load R2, B
  • Add R3, R1, R2
  • Store C, R3
  • 4 명령어, 3 메모리 연산
  • 3 명령어, 3 메모리 연산
  • 3 명령어, 3 메모리 연산
  • 4 명령어, 3 메모리 연산
  • TOS
  • 프로세서
  • 메모리
  • ...
  • ...
  • 스택
  • 프로세서
  • 메모리
  • ...
  • ...
  • accumulator(누산기)
  • 프로세서
  • 메모리
  • ...
  • ...
  • 레지스터-메모리
  • 프로세서
  • 메모리
  • ...
  • ...
  • 레지스터-레지스터
단축키
Ctrl K · s자료 검색
[ ]이전·다음 강의
Space영상 재생·정지
j k다음·이전 section
n p다음·이전 slide
b강의 목록 접기·펴기
t맨 위
/강의 검색
Esc닫기