[컴퓨터 구조] 컴퓨터 연산
숭실대학교 하석재 교수님의 2022-1학기 컴퓨터 구조 강의를 정리 및 재구성했다.
[2진수 연산]
*ALU(Arithmetic Logic Unit)
산술 논리 장치는 덧셈, 뺄셈 같은 두 숫자의 산술연산과 배타적 논리합, 논리곱, 논리합과 같은 논리연산을 계산하는 디지털 회로이다.
-자리수 올림(carry), 자리수 내림(borrow)
-최대 숫자보다 넘어감 (Overflow) , 최소 숫자보다 작게 넘어감(underflow)
-MIPS는 오버플로를 탐지하면 예외(인터럽트)를 발생시킨다.
-오버플로가 발생한 명령어의 주소는 레지스터에 저장되고, 컴퓨터는 적절한 처리를 하기 위해서 해당 루틴으로 점프한다. 인터럽트가 걸린 주소를 저장해서 해당 처리를 한 다음에 프로그램 실행을 계속할 수 있게 한다.
[2진수 곱셉 연산의 변형]
-일반적인 곱셈기
-빠른 곰셈 하드웨어 : Unroll the loop
[Divide & Conquer]
-문제를 해결하는 기본방식
-큰 문제를 해결하려면 작은 문제 여러 개로 분할해서 해결
-ex) MECE(매킨지 컨설팅 회사) : Mutal Exclusive Collectively Exhaustive (상호배제 전체포괄)
[부동소수점]
-Floating Point vs Fixed Point
-2.34 X 10 ^ 56 vs 0.024
-소수(fraction,mantissa)부분과 지수(Exponent)부분으로 나뉜다.
-정확한 숫자가 아니고, 유효숫자에 따른 어림수 개념을 따른다. (오차가 존재한다.)
-IEEE 754의 부동소수점 표준을 따른다.
[단정밀도/ 배정밀도]
x = (-1)^부호 X (1+가수) X 2(지수-Bias)
*Bias
32비트(단정밀도): 127 / 64비트(배정밀도): 1023
[Biased Notation]
-음수 지수를 계산하기 빠르게 하기 위한 표현 방식.
-부동소수점은 고정 소수점과 다르게, 바로 대소 파악이 대소를 파악하기에 어렵기 때문에 이를 용이하게 하기 위해 표현한 방식이고, unsigned 처럼 계산한다.
[부동소수점 연산을 위한 전용 H/W]
-3개의 레지스터에 a=a+(b X c)연산을 하는 곱셈 후 덧셈하는 병령어.
-별도의 명령어를 곱하고 더하면 자리맞춤을 두 번 해야하는데, 덧셈 뒤에 한 번만 자리맞춤을 수행하면 된다.
-PowerPC, AMD SSE5, Intel AVX
[서브워드(데이터 수준) 병렬성)]
-128비트 덧셈기 내부의 올림수 체인(Carry Chain)을 분할하면, 프로세서가 병렬성을 활용해,
8비트 피연산자 16개/32비트 피연산자 4개/ 64비트 피연산자 2개를 동시에 연산할 수 있다.
-행렬 곱셈의 성능을 높이는데 도움이 된다(8개의 부동소수점 연산을 동시에 처리)
-Intel SSE/SSE2, AVX, ARM NEON
-NVIDIA Tensor Core
[FP16 vs FP32]
-브레인 부동 소수점 16의 등장
과학 연산 프로그램에서 거의 표준으로 사용되는 2배 정밀도 부동 소수점은 과하고 32비트면 충분하다. 학습과정에서 매우 작은 수를 다루기도 하며 많은 자리수를 필요하지 않기 때문에 만들어졌다.
-NVIDIA GPU (GPGPU/ Tensor 계산성능)