Chapter 3. Arithmetic for Computers

박병준·2022년 4월 9일
0

컴퓨터 구조론

목록 보기
3/5

3.2 Additon and Subtration

Overflow

같은 부호의 덧셈에서 오버플로우가 일어날 수 있다.

Multimedia

멀티미디어에서는 오버플로우가 일어나도 표현할 수 있는 최댓값이나 최솟값으로 표현된다.


3.3 Multiplication

Optimized Multiplier

병렬(parallel)로 단계를 수행한다: add/shift

Faster Multiplier

결과를 빨리 얻을 수 있지만(성능은 높지만), 하드웨어를 많이 사용하므로 비용이 많이 든다.

RISC_V multiplication

  • mul
    곱의 하위 32비트를 가진다.
  • mulh
    곱의 상위 32비트를 가진다. 부호있는 수를 계산한다.
  • mulhu
    곱의 상위 32비트를 가진다. 부호없는 수를 계산한다.
  • mulhus
    곱의 상위 32비트를 가진다. 부호있는 수와 부호없는 수를 계산한다.

3.4 Division

Optimized Division

partial-remainder에 뺄 때마다 하나의 싸이클이 진행된다.

Faster Division

  • multiplier처럼 병렬적(parallel)인 하드웨어를 사용할 수 없다.
  • 나눗셈에서는 remainder에 divisor를 뺀(subtraction) 결과가 음수인지 아닌지에 따라 다르게 동작하므로 여러 개의 하드웨어가 병렬적으로 처리할 수 없다.

RISC_V multiplication

  • div, rem
  • divu, remu

3.5 Floating Point

  • 정수가 아닌 수(실수)를 표현한다.
  • 아주 작은 수(0.000...)나 아주 큰 수를 포함한다.
  • scientific notation
    정수부가 일의 자리인 표현을 정규화된(normalized) 표현,
    아니면 not normalized scientific notation.

    -2.34 10^56 (normalized) = -2.34e56
    0.002
    10^(-4) (not normalized) = 2.0e-7
    987.02 * 10^9 (not normalized) = 9.8702e11

IEEE Floating-Point Format

  • S: sign bit. 부호 비트. (양수는 0, 음수는 0)

  • 정규화된 significand: 이진법이므로, 1.0 ≤|significand|<2.0
    significand는 fraction에 숨겨진 "1."을 앞에 합치면 된다.

  • exponent: 초과 표현(실제 exponent + bias).
    exponent 비트는 unsigned 표현이다.

    IEEE 754에서, single-precision의 bias는 127이고, double-precision의 bias는 1023.

Floating Point Percision

Relative precision(상대적인 정확도)

  • single: fraction이 23비트. 2^(-23)의 정확도. 10진법 기준 소숫점 6자리까지.
  • double: fraction이 52비트. 2^(-52)의 정확도. 10진법 기준 소숫점 16자리까지.

Floating Point Numbers

Floating Point 덧셈

  1. 소수점 정렬한다.
  2. significand끼리 더한다.
  3. 결과를 정규화하고, 오버플로우/언더플로우 하지 않았는지 검사한다.
  4. 필요하다면 반올림한다.

Floating Point Adder Hardware

정수 가산기보다 훨씬 복잡하다.

Floating Point 곱셈

  1. exponent끼리 더한다.
  2. significand끼리 곱한다.
  3. 결과를 정규화하고, 오버플로우/언더플로우 하지 않았는지 검사한다.
  4. 필요하다면 반올림한다.
  5. 피연산자들의 부호로부터, 결과 부호를 결정한다.

Floating Point Arithmetic Hardware

  • Floating Point multiplier의 복잡도는 Floating Point adder와 비슷하다.
    하지만 adder에서는 significand끼리 더했지만, multiplier는 곱한다.

  • Floating Point operation은 일반적으로 여러 번의 cycle로 동작한다.
    pipeline화 될 수 있다.


FP Instructions

Floating point용의 레지스터가 따로 있다.(f0 ~ f31)

Load and Store

  • flw, fld
  • fsw, fsd

Single-precision Arithmetic

fadd.s, fsub.s fmul.s, fdiv.s, fsqrt.s

Double-precision Arithmetic

fadd.d, fsub.d fmul.d, fdiv.d, fsqrt.d

Single- and Double-precision Comparison

  • feq.s, flt.s, fle.s
  • feq.d, flt.d, fle.d
  • 연산결과로 나온 0이나 1로 다시 브랜치 명령을 써서 이동해야 한다.

Rounding

Always round up

  • 무조건 올림

Always round down

  • 무조건 내림

Round to nearest even

  • 0.5일 때만 짝수로 반올림한다.
  • 가장 많이 쓰인다.
    1.001100 : round up(nearest even) to 1.010
    1.000100 : round down(nearest even) to 1.000
profile
뿌셔뿌셔

0개의 댓글