이 영역을 누르면 첫 페이지로 이동
컴퓨터와 수학, 몽상 조금 블로그의 첫 페이지로 이동

컴퓨터와 수학, 몽상 조금

페이지 맨 위로 올라가기

컴퓨터와 수학, 몽상 조금

컴퓨터공학, 딥러닝, 수학 등을 다룹니다.

6. 컴퓨터의 정수연산 (Integer Arithmetic of Computer)

  • 2020.10.27 18:53
  • 학부 수업/컴퓨터구조
반응형

컴퓨터의 산술연산은 크게 정수Integer의 연산과 실수(부동소수점Floating Point)의 연산으로 나뉜다.

정수 연산

컴퓨터에서 정수는 이진수로 표현되는데, 이때 음수는 2의 보수로 표현된다.
2의 보수에 대한 자세한 설명은 아래 글을 참고하자.

 

2. 수 체계: 진수 변환과 이진수의 실수/음수 표현(Number System)

컴퓨터에서의 수 체계 컴퓨터에서는 크게 4가지 수 체계를 사용한다. 10진수 2진수 8진수 16진수 $a$진수는 $a$의 $n$승을 하나의 자리로 가지는데, 예를 들어 10진수 213은 아래와 같다. $213_{(10)} = 2 \t

skyil.tistory.com

정수의 덧셈과 뺄셈

정수의 덧셈은 수 체계가 이진수일 뿐, 우리가 아는 덧셈과 똑같다. $1+1$이 되면 이진수에 $2$는 없으므로, 다음 자리로 올림한다. 예를들어, $11+10=101$이다.

2의 보수를 사용하여 음의 정수를 표현할 경우, 덧셈을 이용하여 정수의 뺄셈도 가능하다.

$6-4=6+(-4)$임을 이용하여, 그냥 서로 더하면 된다.

오버플로우

$n$비트의 정수 연산에서, 그 결과가 할당된 비트 $n$을 넘어설 경우 오버플로우가 발생한다. 예를들어 2비트 정수의 덧셈 $11+10$은 $101$이지만, 결과는 2비트까지 표시되므로 $01$이 된다.

오버플로우는 양수와 음수의 연산에서는 발생하지 않고, 같은 부호의 연산에서만 발생한다.

양수간의 연산 결과, 부호 비트가 1이면 오버플로우가 발생한 것이다.(양수의 덧셈이 음수가 되었으므로)
반대로 음수간의 연산 결과로 부호 비트가 0이면 오버플로우가 발생한 것이다.1

포화 연산Saturation Arithmetic

오버플로우가 발생한 경우, 해당 비트내에서 가능한 최대 비트를 반환하는 방법이 있다.

예를들어, $11+10 = 11$이다. 2비트로 표현 가능한 최대값이 $11$이기 때문이다.

SIMD

64비트 정수 연산을 64비트 가산기로 처리할 수도 있지만, 더 적은 용량의 가산기 여러개로 처리할 수도 있다.
예를들어, 8비트 가산기 8개를 이용하여 64비트 덧셈을 수행할 수 있다.

이러한 방법을 Single Instruction Multiple Data, SIMD라고 부른다.

정수의 곱셈

이진수의 곱셈도 우리가 흔히 아는 방법을 이용한다. $1000 \times 1001 = 1000+00000+000000+1000000$이다.

문제는 이를 컴퓨터로 구현하는 방법인데, 우선 곱하고자 하는 두 수를 각각 Multiplicand, Multiplier로 부르겠다.

  1. Multiplier에서 가장 우측의 한 비트와 Multiplicand를 곱하고, 이를 Product에 더한다.
  2. Multiplier는 우측으로 Shift하고, Multiplicand는 좌측으로 Shift한다.
  3. 1, 2를 반복하여 Multiplier의 모든 값을 곱한다.

예시

Multiplicand Multiplier 연산 Product
1000 1001 초기 상태 0
1000 1001 1000 * 1 1000
10000 0100 10000 * 0 1000
100000 0010 100000 * 0 1000
1000000 0001 1000000 * 1 1001000

Optimized Multiplier

기존의 곱셈기는, Multiplicand와 Multiplier가 계속 Shift 되기 때문에, 32비트 연산에 64비트 변수 저장공간과 ALU가 필요했다. 이를 최적화하면, Multiplicand와 Multiplier를 32비트에 저장하고, ALU도 32비트로 처리할 수 있다.

Multiplier는 점점 작아지는 특성을 이용하면 된다.
일단 product 공간에 Multiplier를 저장해두고, Multiplicand는 아예 Shift없이 32비트로 고정한다.

Multiplier에서 값을 꺼내 Multiplicand와 곱한 후, Product의 앞부분에 넣어준다. 이후, Product안의 값을 우측으로 Shift하여, Multiplier도 Shift하고, Multiplicand를 좌측으로 Shift한 것과 같은 결과를 얻을 수 있다.

Array Multiplier

곱셈을 수행할 때, 덧셈 횟수를 최소화하기 위한 방법으로 Array Multiplier가 있다.

아래로 이어지는 선은 Sum, 좌하단 대각선은 Carry

다음 곱셈기에서, 덧셈은 병렬적으로 수행되어 최대 6회 수행된다.
각 자리수의 값을 모두 따로 더하는 것에 비하면 아주 빠른 시간이다.

반응형

'학부 수업 > 컴퓨터구조' 카테고리의 다른 글

8. 데이터패스 (The Datapath)  (0) 2020.11.24
7. 컴퓨터의 수 연산 (Arithmetic of Computer)  (0) 2020.11.23
5.5 프로그램의 실행 과정  (0) 2020.10.12
5. 메모리 접근 (Addressing)  (0) 2020.10.12
4. MIPS의 명령어 구조와 명령어들  (0) 2020.10.12

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • 8. 데이터패스 (The Datapath)

    8. 데이터패스 (The Datapath)

    2020.11.24
  • 7. 컴퓨터의 수 연산 (Arithmetic of Computer)

    7. 컴퓨터의 수 연산 (Arithmetic of Computer)

    2020.11.23
  • 5.5 프로그램의 실행 과정

    5.5 프로그램의 실행 과정

    2020.10.12
  • 5. 메모리 접근 (Addressing)

    5. 메모리 접근 (Addressing)

    2020.10.12
다른 글 더 둘러보기

정보

컴퓨터와 수학, 몽상 조금 블로그의 첫 페이지로 이동

컴퓨터와 수학, 몽상 조금

  • 컴퓨터와 수학, 몽상 조금의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (276)
    • Tech Trend (3)
    • Deep Learning (77)
      • 공부 노트 (21)
      • 논문 리뷰 (44)
      • 논문 스키밍 (1)
      • 영상처리 (11)
    • Engineering (3)
      • Tips (2)
      • Experiences (1)
    • Blog (42)
      • 회고 & 계획 (16)
      • 내 이야기 (8)
      • 리뷰 (3)
      • 군대에 간 공돌이 (9)
      • ML엔지니어 취업 도전기 (1)
      • 여행 (4)
    • 학부 수업 (141)
      • 머신러닝 (16)
      • C프로그래밍 (8)
      • 자료구조 (11)
      • 알고리즘 (17)
      • 디지털시스템 (25)
      • 컴퓨터구조 (11)
      • 확률과 통계 (21)
      • 선형대수학 (14)
      • 이산수학 (18)
      • 데이터시각화 (0)
    • 강의 (9)
      • 딥러닝 기초 (7)
      • Python (2)

공지사항

인기 글

정보

백지오의 컴퓨터와 수학, 몽상 조금

컴퓨터와 수학, 몽상 조금

백지오

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
반응형

나의 외부 링크

  • profile
  • github
  • linkedin

방문자

  • 전체 방문자
  • 오늘
  • 어제
Powered by Tistory / Kakao. © 백지오. Designed by Fraccino.

티스토리툴바