누산기(컴퓨팅)
Accumulator (computing)
컴퓨터의 중앙 처리 장치(CPU)에서, 누적기(accumulator)는 중간 연산 로직 유닛의 결과가 저장되는 레지스터입니다.
누적기와 같은 레지스터가 없으면 각 계산 결과( 덧셈, 곱셈, 시프트 등)를 메인 메모리에 기록해야 하며, 다음 작업에서 사용하기 위해 다시 바로 다시 읽을 수 있습니다.
대용량 메인 메모리에 사용되는 기술은 레지스터에 사용되는 기술보다 느리기 때문에 메인 메모리에 대한 액세스는 어큐뮬레이터와 같은 레지스터에 대한 액세스보다 느립니다.초기의 전자 컴퓨터 시스템은 축적기가 있는 그룹과 없는 그룹으로 나뉘는 경우가 많았습니다.
현대의 컴퓨터 시스템은 종종 축약기로 작동할 수 있는 여러 개의 범용 레지스터를 가지고 있으며, 이 용어는 더 이상 예전만큼 흔하지 않습니다.그러나 설계를 단순화하기 위해 다수의 특수 목적 프로세서는 여전히 하나의 축적기를 사용합니다.
기본개념
수학적 연산은 종종 한 연산의 결과를 다음 연산의 입력으로 사용하여 단계적인 방식으로 이루어집니다.예를 들어, 근로자의 주급을 수동으로 계산하면 다음과 같습니다.
- 직원의 타임 카드에서 근무 시간을 조회합니다.
- 테이블에서 그 직원의 급여율을 조회합니다.
- 그들의 기본적인 주급을 받기 위해 시간에 임금을 곱합니다.
- 소득세를 계산하기 위해 그들의 기본급에 일정한 비율을 곱합니다.
- 세후 주급을 받기위해 기본급에서 그 숫자를 빼다.
- 그 결과에 또 다른 일정 비율을 곱하여 은퇴 계획을 설명합니다.
- 모든 공제 후 주급을 받기 위해 기본급에서 그 숫자를 빼라.
동일한 작업을 수행하는 컴퓨터 프로그램은 검색되는 값이 모두 컴퓨터 메모리에 저장되지만, 동일한 기본 동작 순서를 따릅니다.초기 컴퓨터에서는 시간 수가 펀치 카드에 저장되고 급여율이 다른 형태의 메모리, 즉 자기 드럼에 저장될 가능성이 높습니다.곱하기가 완료되면 결과를 어딘가에 배치해야 합니다."드럼 머신"에서 이 작업은 드럼으로 다시 돌아갈 가능성이 높습니다. 상당한 시간이 걸리는 작업입니다.그리고 바로 다음 작업은 그 값을 다시 읽어 들여야 합니다. 이로 인해 또 다른 상당한 지연이 발생합니다.
어큐뮬레이터는 한 작업의 결과를 다음 작업에 제공할 수 있는 스크래치 패드 영역을 제공함으로써 이러한 시스템에서 성능을 획기적으로 개선합니다.위의 예에서, 기본 주급을 계산하여 적립기에 배치하면 소득세 계산에 의해 즉시 사용될 수 있습니다.이렇게 하면 일반적으로 곱셈 자체보다 수십 배에서 수백 배 더 오래 걸리던 연산인 시퀀스에서 저장 및 읽기 작업이 하나씩 제거됩니다.
축전지기
어큐뮬레이터 머신(accumulator machine) 또는 1-오퍼랜드 머신(1-operand machine) 또는 어큐뮬레이터 기반 아키텍처를 가진 CPU는 CPU의 일종으로, 여러 레지스터를 가질 수 있지만 CPU는 계산 결과를 일반적으로 "어큐뮬레이터"라고 불리는 하나의 특수 레지스터에 대부분 저장합니다.거의 모든 초기[clarification needed] 컴퓨터는 여러 개의 레지스터를 가진 고성능 "슈퍼 컴퓨터"만 있는 어큐뮬레이터 기계였습니다.그 후 메인프레임 시스템이 마이크로컴퓨터에 자리를 내주면서 어큐뮬레이터 아키텍처가 다시 인기를 끌었고, MOS 6502가 주목할 만한 예가 되었습니다.PIC micro 및 8051과 같이 2014년 현재도 여전히 인기 있는 많은 8비트 마이크로컨트롤러는 어큐뮬레이터 기반 기계입니다.
최신 CPU는 일반적으로 2-오퍼랜드 또는 3-오퍼랜드 머신입니다.추가 피연산자는 계산을 위한 소스 및 대상으로 사용되는 여러 범용 레지스터("범용 누적기"[1]라고도 함) 중 하나를 지정합니다.이러한 CPU는 "누적 시스템"으로 간주되지 않습니다.
하나의 레지스터를 컴퓨터 아키텍처의 누적기로 구별하는 특징은 누적기(아키텍처가 하나 있다면)가 산술 명령에 대한 암묵적 연산자로 사용된다는 것입니다.예를 들어 CPU에는 다음과 같은 명령어가 있을 수 있습니다.ADD memaddress
메모리 위치 memaddress에서 읽은 값을 누적기의 값에 추가하여 결과를 누적기에 다시 배치합니다.누적기는 명령어에서 레지스터 번호로 식별되지 않으며, 명령어에 암시적이며 다른 레지스터는 명령어에서 지정할 수 없습니다.일부 아키텍처는 명령어에서 특정 레지스터를 누적기로 사용하지만 다른 명령어는 명시적인 피연산자 사양을 위해 레지스터 번호를 사용합니다.
컴퓨터 축적기의 역사
여러 작업의 결과를 저장하기 위해 단일 "메모리"를 사용하는 모든 시스템은 누적기로 간주될 수 있습니다.J. Presper Eckert는 Gottfried Leibniz와 Blaise Pascal의 초기 추가 기계까지도 어큐뮬레이터 기반 시스템으로 언급합니다.[2]퍼시 러드게이트는 1909년 그의 분석 기계에서 최초로 곱셈기를 구상했습니다.[3]
역사적 관습은 일련의 산술 연산 동안 문자 그대로 숫자를 축적하는 "산술 기관"인 "누적기"에 레지스터를 바칩니다.
- "산술기관의 첫번째 부분은...숫자를 받아 이미 포함되어 있는 숫자에 추가할 수 있는 병렬 저장 기관이어야 하며, 이 기관은 내용물을 지울 수 있고 포함된 내용을 저장할 수 있습니다.우리는 그러한 기관을 어큐뮬레이터라고 부를 것입니다.그것은 데스크 곱셈기, 표준 IBM 카운터, 보다 현대적인 중계기, ENIAC"와 같이 가장 다양한 유형의 컴퓨팅 기계에서 원칙적으로 상당히 관습적입니다(Goldstine and von Neumann, 1946; Bell and Newell 1971의 페이지 98).
예를 들어 몇 가지 지침이 있습니다(일부 현대적인 해석이 있음).
- 누산기를 지우고 메모리 위치 X에서 숫자 추가
- 누산기를 지우고 메모리 위치 X에서 숫자를 뺀다.
- 메모리 위치 X에서 복사한 숫자를 누적기의 내용에 추가합니다.
- 축약기의 내용에서 메모리 위치 X에서 복사한 숫자를 풉니다.
- 누산기를 지우고 레지스터의 내용을 누산기로 옮깁니다.
레지스터에서 누적기로, 누적기에서 레지스터로 작업 이름에 관한 규칙이 없습니다.종래의 기술(예를 들어, Donald Knuth(1973)의 가상 MIX 컴퓨터)은, 예를 들어, 레지스터/메모리로부터의 로드 어큐뮬레이터(예를 들어, "LDAr")라고 하는 2개의 명령어를 사용하고, 레지스터/메모리를 저장하기 위해 어큐뮬레이터를 저장합니다(예를 들어, "STAR").Knuth의 모델은 다른 많은 지시사항들도 가지고 있습니다.
주목할 만한 누산기 기반 컴퓨터

1945년 ENIAC의 구성에는 20개의 축전지가 있었고, 이 축전지는 병렬로 작동할 수 있었습니다.[4]: 46 각각의 숫자는 8자리의 10진수 숫자를 저장하고 받은 숫자를 더하거나 뺄 수 있습니다.[4]: 33 1952년 진공관 IBM 701을 시작으로 IBM의 초기 바이너리 "사이언티픽" 컴퓨터 대부분은 단일 36비트 누적기와 별도의 승수/계수 레지스터를 사용하여 더 긴 결과로 연산을 처리했습니다.십진기인 IBM 650은 10자리 분배기 1개와 10자리 누산기 2개를 가지고 있었고, 나중에 트랜지스터화된 십진기인 IBM 7070은 3개의 누산기를 가지고 있었습니다.IBM System/360과 Digital Equipment Corporation의 PDP-6은 16개의 범용 레지스터를 가지고 있었지만 PDP-6과 그 후속 제품인 PDP-10은 어큐뮬레이터라고 부릅니다.
12비트 PDP-8은 애큐뮬레이터를 사용한 최초의 미니 컴퓨터 중 하나였으며 이후 많은 컴퓨터에 영감을 주었습니다.[5]PDP-8은 축적기가 하나밖에 없었습니다.HP 2100과 Data General Nova는 2개와 4개의 축적기를 가지고 있었습니다.Nova는 PDP-8의 후속작이 PDP-11이 되는 것에 찬성하여 거절되었을 때 만들어졌습니다.Nova는 AC0-AC3라는 4개의 축적기를 제공했지만 AC2와 AC3는 오프셋 주소를 제공하는 데 사용될 수도 있어 레지스터의 사용이 더 일반적인 경향이 있습니다.PDP-11은 시스템/360과 PDP-10의 라인을 따라 8개의 범용 레지스터를 가지고 있었습니다.
4004, 8008과 같은 초기의 4비트 및 8비트 마이크로프로세서는 일반적으로 단일 축적기를 가지고 있었습니다.8051 마이크로컨트롤러는 2개, 1차 누산기와 2차 누산기를 가지고 있는데, 두 번째 누산기는 단지 곱하기(MUL AB) 또는 나누기(DIV AB)일 때 명령에 의해서만 사용됩니다; 전자는 2개의 8비트 누산기 사이에서 16비트 결과를 분할합니다.반면 후자는 1차 누적기 A에 몫을 저장하고 나머지는 2차 누적기 B에 저장합니다.8008, 8080, 그리고 8086의 직접적인 후예로서, 현대의 유비쿼터스 인텔 x86 프로세서는 여전히 1차 누적기 EAX와 2차 누적기 EDX를 큰 수의 곱셈과 나눗셈에 사용합니다.예를 들어, MUL ECX는 32비트 레지스터 ECX와 EAX를 곱하고 EAX와 EDX 간에 64비트 결과를 분할합니다.그러나 MUL 및 DIV는 특수한 경우입니다. 다른 산술-논리적 명령(ADD, SUB, CMP, AND, OR, XOR, TEST)은 8개 레지스터 EAX, ECX, EDX, EBX, ESP, ESI, EDI 중 어느 하나를 누적기(즉, 왼쪽 피연산자 및 목적지)로 지정할 수 있습니다.결과의 상위 절반이 필요하지 않은 경우에는 곱셈도 지원됩니다.따라서 x86은 누산기 모델에 기반을 두고 있음에도 불구하고 상당히 일반적인 레지스터 아키텍처입니다.[6]x86, x86-64의 64비트 확장은 8개의 일반 레지스터 대신 16개로 더 일반화되었습니다.
참고문헌
- ^ "HC16 Overview". Freescale.com. Archived from the original on 28 September 2007. Retrieved 2008-09-22.
- ^ J. Presper Eckert, "디지털 컴퓨터 메모리 시스템의 조사", IEEE 컴퓨팅 역사 연보, 1988, pp. 15-28
- ^ "The Feasibility of Ludgate's Analytical Machine".
- ^ a b Haigh, Thomas; Priestley, Mark; Ropefir, Crispin (2016). ENIAC in Action: Making and Remaking the Modern Computer. MIT Press. ISBN 9780262334419.
- ^ Programmed Data Processor-1 Manual (PDF), Maynard, Massachusetts: Digital Equipment Corporation, 1961, p. 7: PDP-1 system block diagram, archived (PDF) from the original on 2022-10-09, retrieved 2014-07-03
- ^ Irvine, Kip R. (2007). Assembly Language for Intel-Based Computers (5th ed.). Pearson Prentice Hall. pp. 633, 622. ISBN 978-0-13-238310-3.
- Goldstine, Herman H. 및 von Neumann, John, "전자 컴퓨팅 도구를 위한 문제의 계획 및 코딩", Presp. 1947, Princeton Advanced Study,Bell, C. Gordon and Newell, Allen (1971)에서 92-119쪽으로 재인쇄, 컴퓨터 구조: 읽기와 예, McGraw-Hill Book Company, 뉴욕.ISBN 0-07-004357-4}.사진을 포함한 고대 기계에 대한 자세한 설명을 담은 진정한 보물창고입니다.