shopkeeper/korean_wiki_content_only_120125 huggingface dataset:
원래 계획은 트랜스퓨터의 단가가 몇 달러에 불과하게 만드는 것이었다. 인모스는 트랜스퓨터가 컴퓨터의 주 CPU로 작동하는 것부터 같은 기계의 디스크 드라이브용 채널 컨트롤러로 작동하는 것까지 실질적으로 모든 곳에 사용될 것으로 보았다. 예를 들어, 전통적인 기계에서는 디스크가 액세스되지 않을 때 디스크 컨트롤러의 처리 능력이 유휴 상태였다. 대조적으로 트랜스퓨터 시스템에서는 이러한 트랜스퓨터의 여유 사이클을 다른 작업에 사용할 수 있어 기계의 전체 성능을 크게 향상시킬 수 있었다.
트랜스퓨터는 온칩 메모리가 커서 본질적으로 메모리 내 프로세서였다. 단일 트랜스퓨터라도 자체적으로 작동하는 데 필요한 모든 회로를 가지고 있었는데, 이는 마이크로컨트롤러에서 더 흔히 볼 수 있는 기능이었다. 의도는 트랜스퓨터를 가능한 한 쉽게 연결할 수 있도록 하는 것이었으며, 복잡한 버스나 메인보드가 필요 없었다. 전력과 간단한 클럭 신호만 공급하면 되었고, 그 외에는 거의 필요 없었다. 랜덤 액세스 메모리(RAM), RAM 컨트롤러, 버스 지원, 심지어 실시간 운영체제(RTOS)까지 모두 내장되어 있었다. 이런 방식으로, 마지막 트랜스퓨터는 당시 떠오르는 SoC 시장에서 단일 재사용 가능한 마이크로 코어(RMC)였다.
초기 트랜스퓨터는 작은 면적에서 높은 성능을 달성하기 위해 매우 간단하고 다소 특이한 아키텍처를 사용했다. 마이크로코드를 데이터 경로를 제어하는 주요 방법으로 사용했지만, 당시의 다른 설계와 달리 많은 명령이 실행하는 데 단일 사이클만 소요되었다. 명령어 명령 코드는 마이크로코드 고정 기억 장치(ROM)의 진입점으로 사용되었으며, ROM의 출력은 데이터 경로에 직접 전달되었다. 다중 사이클 명령의 경우, 데이터 경로가 첫 번째 사이클을 수행하는 동안 마이크로코드는 두 번째 사이클에 대한 네 가지 가능한 옵션을 디코딩했다. 이 옵션 중 어느 것이 실제로 사용될지에 대한 결정은 첫 번째 사이클이 끝날 무렵에 이루어질 수 있었다. 이로 인해 아키텍처를 일반적으로 유지하면서도 매우 빠른 작동이 가능했다.
20 MHz의 클럭 속도는 그 시대에 상당히 높았고, 설계자들은 그렇게 빠른 클럭 신호를 보드에 분배하는 실용성에 대해 매우 우려했다. 5 MHz의 더 느린 외부 클럭이 사용되었고, 이는 위상동기회로(PLL)를 사용하여 필요한 내부 주파수로 곱해졌다. 내부 클럭은 실제로 네 개의 겹치지 않는 위상을 가졌으며, 설계자들은 원하는 어떤 조합이든 자유롭게 사용할 수 있었으므로, 트랜스퓨터가 실제로는 80 MHz로 작동했다고 주장할 수도 있다. 동적 논리는 면적을 줄이고 속도를 높이기 위해 설계의 여러 부분에서 사용되었다. 안타깝게도 이러한 방법은 자동 시험 패턴 생성 스캔 테스트와 결합하기 어려워 이후 설계에서는 선호되지 않게 되었다.
프렌티스 홀은 트랜스퓨터의 일반적인 원리에 관한 책을 출판했다.
트랜스퓨터의 기본 설계에는 "os-link"로 알려진 직렬 통신이 포함되어 있었는데 이를 통해 최대 4개의 다른 트랜스퓨터와 각각 5, 10 또는 20 Mbit/s로 통신할 수 있었으며, 이는 1980년대에는 매우 빠른 속도였다. 어떤 수의 트랜스퓨터도 링크(수십 미터까지 연결 가능)를 통해 연결되어 하나의 컴퓨팅 팜을 형성할 수 있었다. 가상의 데스크톱 기계는 "저가형" 트랜스퓨터 두 개가 직렬 라인의 일부에서 입출력(I/O) 작업을 처리하고 (적절한 하드웨어에 연결됨) 다른 라인에서는 CPU 역할을 하는 더 큰 사촌과 통신할 수 있었다.
이러한 방식으로 구축될 수 있는 시스템의 크기에는 제한이 있었다. 각 트랜스퓨터가 고정된 지점 대 지점 레이아웃으로 다른 트랜스퓨터에 연결되어 있었기 때문에, 더 먼 트랜스퓨터로 메시지를 보내려면 라인의 각 칩이 메시지를 중계해야 했다. 이는 링크를 통한 각 "홉"마다 지연을 유발하여 대규모 네트워크에서 긴 지연을 초래했다. 이 문제를 해결하기 위해 인모스는 최대 32개의 트랜스퓨터(또는 스위치)를 훨씬 더 큰 네트워크로 연결하는 제로 지연 스위치를 제공했다.
트랜스퓨터는 대부분의 컴퓨터처럼 메모리에서 부팅할 수 있었지만, 네트워크 링크를 통해서도 부팅할 수 있었다. 칩의 특수 핀인 BootFromROM은 어떤 방법을 사용해야 하는지를 나타냈다. 칩이 재설정될 때 BootFromROM이 활성화되면 메모리 상단에서 2바이트 떨어진 명령부터 처리를 시작했는데, 이는 일반적으로 부팅 코드로 역방향 점프를 수행하는 데 사용되었다. 이 핀이 활성화되지 않으면 칩은 대신 어떤 네트워크 링크에서든 바이트가 수신되기를 기다렸다. 수신되는 첫 번째 바이트는 뒤따를 코드의 길이를 나타냈다. 다음 바이트들은 낮은 메모리에 복사된 다음 해당 바이트 수가 수신되면 점프되었다.
이 시스템의 일반적인 개념은 하나의 트랜스퓨터가 연결된 여러 트랜스퓨터를 포함하는 시스템을 부팅하는 중앙 권한 역할을 하는 것이었다. 선택된 트랜스퓨터는 BootFromROM이 영구적으로 활성화되어 시작 시 ROM에서 부팅 프로세스를 실행하기 시작했다. 다른 트랜스퓨터는 BootFromROM이 낮게 연결되어 단순히 기다렸다. 로더는 중앙 트랜스퓨터를 부팅한 다음, 네트워크의 다른 트랜스퓨터로 부팅 코드를 보내기 시작했으며, 각 트랜스퓨터로 보내는 코드를 사용자 정의할 수 있었다. 예를 들어, 하드 드라이브에 연결된 트랜스퓨터로 장치 드라이버를 보낼 수 있었다.
이 시스템에는 PEEK과 POKE를 위해 예약된 0과 1이라는 '특수' 코드 길이도 포함되어 있었다. 이를 통해 부팅되지 않은 트랜스퓨터의 RAM을 검사하고 변경할 수 있었다. 엿보기를 수행한 후 메모리 주소 또는 주소와 단일 데이터 워드를 사용하여 포크를 수행한 후, 트랜스퓨터는 부트스트랩을 기다리는 상태로 돌아갔다. 이 메커니즘은 일반적으로 디버깅에 사용되었다.
추가 회로가 링크를 통한 트래픽을 스케줄링했다. 통신을 기다리는 프로세스는 네트워킹 회로가 읽기 또는 쓰기를 완료하는 동안 자동으로 일시 중지되었다. 그러면 트랜스퓨터에서 실행 중인 다른 프로세스에 해당 처리 시간이 주어졌다. 실시간 및 다중 처리 작업을 개선하기 위해 두 가지 우선순위 수준이 포함되었다. 동일한 논리 시스템이 하나의 트랜스퓨터에서 실행되는 프로그램 간의 통신에 사용되었으며, 메모리의 가상 네트워크 링크로 구현되었다. 따라서 모든 입출력을 요청하는 프로그램은 작업이 완료되는 동안 자동으로 일시 중지되었는데, 이는 일반적으로 하드웨어의 중재자 역할을 하는 운영체제가 처리해야 하는 작업이었다. 트랜스퓨터의 운영체제는 스케줄링을 처리할 필요가 없었다. 칩 자체에 운영체제가 내장되어 있다고 볼 수 있었다.
이 모든 기능을 하나의 칩에 포함하기 위해 트랜스퓨터의 코어 논리는 대부분의 CPU보다 간단했다. 일부 사람들은 그 희박한 특성과 당시 바람직한 마케팅 버즈워드였기 때문에 축소 명령어 집합 컴퓨터(RISC)라고 불렀지만, 이는 마이크로코드로 심하게 구성되어 있었고, 제한된 레지스터 세트와 복잡한 메모리 대 메모리 명령어를 가지고 있었으며, 이 모든 것이 이를 확고히 CISC 진영에 놓이게 했다. 레지스터가 많은 로드/스토어 RISC CPU와 달리 트랜스퓨터는 스택처럼 작동하는 3개의 데이터 레지스터만 가지고 있었다. 또한 작업 공간 포인터는 codice_1 및 codice_2 명령어를 통해 쉽게 접근할 수 있는 일반적인 메모리 스택을 가리켰다. 이는 작업 공간 포인터를 다른 프로세스가 사용하는 메모리로 단순히 변경함으로써 매우 빠른 문맥 교환을 가능하게 했다 (이는 TMS9900과 같은 여러 동시대 설계에서 사용된 방법이다). 3개의 레지스터 스택 내용은 트랜스퓨터가 문맥 전환을 수행할 수 있을 때, Jump와 같은 특정 명령어를 지나서도 보존되지 않았다.
트랜스퓨터 명령어 세트는 명령 코드와 피연산자니블로 구성된 8비트 명령어로 이루어져 있었다. 상위 니블은 가능한 16개의 주요 명령어 코드를 포함하여, 상업화된 최소 명령어 집합 컴퓨터 중 하나였다. 하위 니블은 하나의 즉시 상수 피연산자를 포함했으며, 일반적으로 작업 공간(메모리 스택) 포인터에 대한 오프셋으로 사용되었다. 두 개의 접두어 명령어는 뒤따르는 명령어의 피연산자에 하위 니블을 접두어로 붙여 더 큰 상수를 구성할 수 있게 했다. 추가 명령어는 명령어 코드 Operate(codice_3)를 통해 지원되었는데, 이는 상수 피연산자를 확장된 0-피연산자 명령 코드로 디코딩하여, 트랜스퓨터의 새로운 구현이 도입됨에 따라 거의 무한하고 쉬운 명령어 세트 확장을 제공했다.
16개의 '기본' 단일 피연산자 명령은 다음과 같다.
이 모든 명령어는 오프셋 또는 산술 상수를 나타내는 상수를 취한다. 이 상수가 16보다 작으면 이 모든 명령어가 1바이트로 코딩된다.
OPR 기본 명령어를 사용하는 첫 번째 16개의 '보조' 0-피연산자 명령어는 다음과 같다.
다중 트랜스퓨터 시스템의 프로토타이핑, 구축 및 구성을 용이하게 하기 위해 인모스는 1987년 TRAM(TRAnsputer Module) 표준을 도입했다. TRAM은 본질적으로 트랜스퓨터와 선택적으로 외부 메모리 및 주변 장치로 구성된 빌딩 블록 도터보드였으며, 전원, 트랜스퓨터 링크, 클럭 및 시스템 신호를 제공하는 간단하고 표준화된 커넥터를 갖추고 있었다. 기본 Size 1 TRAM(3.66 x 1.05인치)부터 Size 8(3.66 x 8.75인치)까지 다양한 크기의 TRAM이 정의되었다. 인모스는 ISA 버스(ISA), 마이크로채널 또는 VME버스와 같은 다양한 호스트 버스용 TRAM 메인보드를 생산했다. TRAM 링크는 10 Mbit/s 또는 20 Mbit/s로 작동한다.
트랜스퓨터는 커뮤니케이팅 시퀜셜 프로세스(CSP) 프로세스 계산에 기반한 프로그래밍 언어인 Occam을 사용하여 프로그래밍하도록 설계되었다. 트랜스퓨터는 파스칼이나 C와 같은 언어를 실행하도록 만들어진 현대의 CISC 설계보다 Occam을 실행하도록 특별히 만들어졌다. Occam은 병행성과 채널 기반의 프로세스 간 또는 프로세서 간 통신을 언어의 기본적인 부분으로 지원했다. 칩과 언어가 직접 상호 작용하는 병렬 처리 및 통신이 내장되어 있었기 때문에 장치 컨트롤러와 같은 코드를 작성하는 것이 사소한 일이 되었다. 가장 기본적인 코드조차도 I/O를 위해 직렬 포트를 감시할 수 있었고, 데이터가 없을 때는 자동으로 절전 모드로 전환되었다.
트랜스퓨터를 위한 초기 Occam 개발 환경은 인모스 D700 트랜스퓨터 개발 시스템(TDS)이었다. 이는 편집기, 컴파일러, 링커 및 (사후) 디버거를 통합한 비정통적인 통합 개발 환경이었다. TDS는 Occam으로 작성된 트랜스퓨터 애플리케이션이었다. TDS 텍스트 편집기는 코드 블록을 숨기거나 보이게 하여 코드의 구조를 더 명확하게 만들 수 있는 폴딩 편집기라는 점이 특징이었다. 불행히도, 낯선 프로그래밍 언어와 마찬가지로 낯선 개발 환경의 조합은 트랜스퓨터의 초기 인기에 아무런 도움이 되지 않았다. 나중에 인모스는 보다 전통적인 Occam 크로스 컴파일러인 Occam 2 툴셋을 출시했다.
C, 포트란, 에이다, 포스, 파스칼과 같은 더 주류적인 프로그래밍 언어의 구현은 나중에 인모스와 타사 공급업체 모두에서 출시되었다. 이들은 일반적으로 Occam과 유사한 병행성과 채널 기반 통신을 덜 우아한 방식으로 제공하는 언어 확장 또는 라이브러리를 포함했다.
트랜스퓨터는 가상 메모리를 지원하지 않아 유닉스 운영체제의 주류 변형을 포팅하는 데 어려움이 있었지만, 유닉스 계열 운영체제(예: 미닉스 및 화이트스미스의 아이드리스)의 포팅은 제작되었다. 고급 유닉스 계열 분산 운영체제인 헬리오스는 페리헬리온 소프트웨어에 의해 다중 트랜스퓨터 시스템을 위해 특별히 설계되었다.
최초의 트랜스퓨터는 1983년에 발표되었고 1984년에 출시되었다.
마이크로컨트롤러와 같은 장치로서의 역할에 따라, 온보드 RAM과 내장된 RAM 컨트롤러가 포함되어 있어 추가 하드웨어 없이 더 많은 메모리를 추가할 수 있었다. 다른 설계와 달리 트랜스퓨터는 I/O 라인을 포함하지 않았다. 이들은 기존 직렬 링크에 연결된 하드웨어로 추가되어야 했다. 기존 프로세서의 인터럽트 라인과 유사한 '이벤트' 라인이 하나 있었다. 채널로 처리되어, 프로그램은 이벤트 채널에서 '입력'할 수 있었고, 이벤트 라인이 활성화된 후에만 진행할 수 있었다.
모든 트랜스퓨터는 외부 5 MHz 클럭 입력에서 작동했다. 이것은 프로세서 클럭을 제공하기 위해 곱해졌다.
트랜스퓨터에는 메모리 관리 장치(MMU)나 가상 메모리 시스템이 포함되지 않았다.
트랜스퓨터 변형(취소된 T9000 제외)은 세 그룹으로 분류할 수 있다. 16비트 T2 시리즈, 32비트 T4 시리즈, 64비트 IEEE 754 부동소수점 지원을 갖춘 32비트 T8 시리즈이다.
T2: 16비트.
프로토타입 16비트 트랜스퓨터는 S43으로, 스케줄러와 링크의 DMA 제어 블록 전송 기능이 없었다. 출시 당시 T212와 M212(후자는 온보드 디스크 컨트롤러 포함)가 16비트 제품으로 제공되었다. T212는 17.5 및 20 MHz 프로세서 클럭 속도 등급으로 제공되었다. T212는 온칩 RAM이 2 KB에서 4 KB로 확장된 T222로 대체되었고, 나중에는 T225로 대체되었다. T225는 디버깅-브레이크포인트 지원(명령어 "&lt;samp&gt;J 0&lt;/samp&gt;" 확장)과 T800 명령어 세트의 일부 추가 명령어를 추가했다. T222와 T225 모두 20 MHz로 작동했다.
T4: 32비트.
1985년 10월에 출시된 T414는 900,000개의 트랜지스터에 해당하는 기능을 사용했고 공정 기술로 제조되었다. 이 칩은 32비트 설계로, 32비트 데이터 단위를 처리하고 최대 4 GB의 주 메모리를 주소 지정할 수 있었다. 원래 첫 번째 32비트 변형은 T424였으나, 제조상의 어려움으로 인해 4 KB 대신 2 KB 온보드 RAM을 갖춘 T414로 재설계되었다. T414는 15 MHz 및 20 MHz 버전으로 제공되었다. RAM은 나중에 T425(20, 25, 30 MHz 버전)에서 4 KB로 복원되었으며, T425는 또한 &lt;samp&gt;J 0&lt;/samp&gt; 브레이크포인트 지원과 추가 T800 명령어를 추가했다. 1989년 9월에 출시된 T400은 2 KB와 4개 대신 2개의 링크를 가진 저가형 20 MHz T425 파생 제품으로, 임베디드 시스템 시장을 겨냥했다.
T8: 부동소수점.
1987년에 도입된 2세대 T800 트랜스퓨터는 확장된 명령어 세트를 가졌다. 가장 중요한 추가 사항은 64비트 부동소수점 장치(FPU)와 부동 소수점을 위한 3개의 추가 레지스터였는데, IEEE 754-1985 부동 소수점 표준을 구현했다. 또한 4 KB의 온보드 RAM을 가졌고 20 또는 25 MHz 버전으로 제공되었다. 나중에 T801과 T805에 브레이크포인트 지원이 추가되었는데, 전자는 성능 향상을 위해 별도의 주소 및 데이터 버스를 특징으로 했다. T805는 나중에 30 MHz 부품으로도 제공되었다.
더 많은 RAM, 더 많고 빠른 링크, 추가 명령어, 개선된 마이크로코드를 가질 향상된 T810이 계획되었지만, 1990년경에 취소되었다.
인모스는 또한 C004 32방향 링크 스위치 및 트랜스퓨터 링크를 8비트 데이터 버스와 인터페이스할 수 있도록 하는 C011 및 C012 "링크 어댑터"와 같은 트랜스퓨터 프로세서를 위한 다양한 지원 칩을 생산했다.
T400.
원래 인모스 전략의 일부는 CPU를 매우 작고 저렴하게 만들어 다른 논리와 하나의 장치로 결합할 수 있도록 하는 것이었다. 시스템 온 칩(SoC)이 지금은 유비쿼터스이지만, 이 개념은 1980년대 초반에는 거의 들어본 적이 없었다. 1983년경 M212와 TV-toy라는 두 가지 프로젝트가 시작되었다. M212는 ST 506 및 ST 412 슈가트 표준용 디스크 컨트롤러를 추가한 표준 T212 코어에 기반을 두었다. TV-toy는 비디오 게임 콘솔의 기반이 될 예정이었고 인모스와 싱클레어 리서치 간의 공동 프로젝트였다.
T212 및 T414/T424 트랜스퓨터의 링크에는 하드웨어 DMA 엔진이 있어 다른 프로세스의 실행과 병렬로 전송이 이루어질 수 있었다. CPU가 이러한 전송을 처리하는 T400이라는 디자인 변형(나중에 같은 이름의 트랜스퓨터와 혼동하지 말 것)이 설계되었다. 4개의 링크 엔진이 전체 CPU와 거의 같은 크기였기 때문에 장치 크기가 상당히 줄어들었다. T400은 당시 시스템 온 실리콘(SOS) 장치라고 불리던 것, 즉 현재는 시스템 온 칩(SoC)으로 불리는 장치의 코어로 사용될 예정이었다. 이 디자인이 TV-toy의 일부를 형성할 예정이었다. 이 프로젝트는 1985년에 취소되었다.
T100.
이전 SoC 프로젝트가 제한적인 성공을 거두었지만(M212는 한동안 판매되었다), 많은 설계자들은 여전히 그 개념을 굳게 믿었고 1987년에 새로운 프로젝트인 T100이 시작되었다. 이 프로젝트는 트랜스퓨터 CPU의 8비트 버전과 상태 기계 기반의 구성 가능한 로직을 결합했다. 트랜스퓨터 명령어 세트는 8비트 명령어에 기반을 두고 있으며 8비트의 배수인 모든 워드 크기와 쉽게 사용할 수 있다. T100의 목표 시장은 퓨처버스(Futurebus)와 같은 버스 컨트롤러 및 표준 링크 어댑터(C011 등)의 업그레이드였다. 이 프로젝트는 T840(나중에 T9000의 기반이 됨)이 시작되면서 중단되었다.
TPCORE.
TPCORE는 FPGA에서 실행되는 os-링크를 포함한 트랜스퓨터 구현이다.
T9000.
인모스는 T9000(개발 중에는 H1이라는 코드명)을 도입하여 T8 시리즈 트랜스퓨터의 성능을 향상시켰다. T9000은 T800의 대부분의 기능을 공유했지만, 설계의 여러 부분을 하드웨어로 옮기고 슈퍼스칼라 지원을 위한 여러 기능을 추가했다. 이전 모델과 달리 T9000은 RAM 대신 실제 16 KB의 고속 CPU 캐시 (무작위 교체 사용)를 가졌지만, 이를 메모리로 사용할 수 있도록 허용했으며, 이 모든 것을 처리하는 MMU와 유사한 기능(PMI라고 불림)을 포함했다. 더 빠른 속도를 위해 T9000은 이전 버전의 3개 대신 스택의 상위 32개 위치를 캐싱했다.
T9000은 더욱 빠른 속도를 위해 5단계 파이프라인을 사용했다. 흥미로운 추가 기능은 캐시에서 명령어를 수집하여 최대 8바이트의 더 큰 패키지로 묶어 파이프라인에 더 빠르게 공급하는 그루퍼였다. 그런 다음 그룹은 더 빠른 CPU에서 작동하는 단일 더 큰 명령어처럼 한 사이클에 완료되었다.
링크 시스템은 새로운 100 MHz 모드로 업그레이드되었지만, 이전 시스템과 달리 링크는 더 이상 하향 호환되지 않았다. 이 새로운 패킷 기반 링크 프로토콜은 DS-링크라고 불렸으며, 나중에 IEEE 1355 직렬 상호 연결 표준의 기반이 되었다. T9000은 또한 VCP(Virtual Channel Processor)라고 불리는 링크 라우팅 하드웨어를 추가하여 링크를 지점 간(point-to-point)에서 진정한 네트워크로 변경하여 링크에 어떤 수의 가상 채널이든 생성할 수 있도록 했다. 이는 프로그램이 더 이상 연결의 물리적 레이아웃을 알 필요가 없다는 것을 의미했다. C104 32방향 크로스바 스위치 및 C101 링크 어댑터와 같은 다양한 DS-링크 지원 칩도 개발되었다.
T9000 개발의 긴 지연은 출시될 무렵에는 이미 더 빠른 로드/스토어 설계가 이를 능가하고 있었다는 것을 의미했다. T800보다 10배 빠른 성능 목표를 지속적으로 달성하지 못했다. 프로젝트가 마침내 취소되었을 때에도 50 MHz에서 약 36 MIPS만 달성하고 있었다. 생산 지연은 T9000을 위한 최고의 호스트 아키텍처가 오버헤드 프로젝터였다는 농담을 낳았다.
이것은 인모스에게는 너무나 큰 부담이었고, 개발을 계속할 자금이 없었다. 이 무렵 회사는 SGS-Thomson(현재 ST마이크로일렉트로닉스)에 매각되었는데, 이 회사는 임베디드 시스템 시장에 중점을 두었으며 결국 T9000 프로젝트는 중단되었다. 그러나 임베디드 애플리케이션용으로 완전히 재설계된 32비트 트랜스퓨터인 ST20 시리즈가 나중에 T9000을 위해 개발된 일부 기술을 사용하여 생산되었다. ST20 코어는 셋톱박스 및 GPS 애플리케이션용 칩셋에 통합되었다.
ST20.
엄밀히 말하면 트랜스퓨터는 아니지만, ST20은 T4와 T9의 영향을 많이 받았으며, 트랜스퓨터의 마지막이라고 할 수 있는 T450의 기반을 형성했다. ST20의 목표는 당시 떠오르던 SoC 시장에서 재사용 가능한 코어가 되는 것이었다. ST20의 원래 이름은 RMC(Reusable Micro Core)였다. 아키텍처는 마이크로코드 제어 데이터 경로를 갖춘 원래 T4 아키텍처를 느슨하게 기반으로 했다. 그러나 이는 설계 언어로 VHDL을 사용하고 최적화된(그리고 다시 작성된) 마이크로코드 컴파일러를 사용하여 완전히 재설계되었다. 이 프로젝트는 T9가 많은 애플리케이션에 너무 클 것이라는 점이 인식되었던 1990년에 처음 구상되었다. 실제 설계 작업은 1992년 중반에 시작되었다. 트랩을 통해 소프트웨어로 구현된 복잡한 명령어를 가진 매우 간단한 RISC 스타일 CPU부터 토마술로 알고리즘과 유사한 개념의 다소 복잡한 슈퍼스칼라 설계에 이르기까지 여러 시험 설계가 수행되었다. 최종 설계는 원래 T4 코어와 매우 유사했지만, 성능 향상을 위해 일부 간단한 명령어 그룹화와 작업 공간 캐시가 추가되었다.
트랜스퓨터는 많은 동시대 설계에 비해 간단하면서도 강력했지만, CPU와 마이크로컨트롤러 역할 모두에서 보편적으로 사용되겠다는 목표에 거의 도달하지 못했다. 마이크로컨트롤러 시장에서는 비용이 가장 중요한 고려 사항인 8비트 기계가 시장을 지배했다. 여기서는 심지어 T2도 대부분의 사용자에게 너무 강력하고 비쌌다.
컴퓨터 데스크톱 및 워크스테이션 분야에서 트랜스퓨터는 상당히 빨랐다(20 MHz에서 약 1천만 초당 명령 수(MIPS)로 작동). 이는 1980년대 초반에는 뛰어난 성능이었지만, 부동소수점 장치(FPU)를 장착한 T800이 출시될 무렵에는 다른 RISC 설계가 이를 능가했다. 이는 계획대로 여러 트랜스퓨터를 사용했다면 크게 완화될 수 있었겠지만, T800은 도입 당시 개당 약 400달러였으므로 가격 대비 성능비가 좋지 않았다. 트랜스퓨터 기반 워크스테이션 시스템은 거의 설계되지 않았으며, 가장 주목할 만한 것은 아마도 아타리 트랜스퓨터 워크스테이션일 것이다.
트랜스퓨터는 1980년대 후반 여러 공급업체가 트랜스퓨터 기반 시스템을 생산했던 대규모 병렬 컴퓨터 분야에서 더 성공적이었다. 여기에는 메이코 사이언티픽 (전 인모스 직원들이 설립), 플로팅 포인트 시스템즈, 파르지텍 및 파르시스가 포함되었다. 여러 영국 학술 기관은 브리스틀 폴리테크닉의 브리스틀 트랜스퓨터 센터와 에든버러 대학교의 에든버러 동시 슈퍼컴퓨터 프로젝트를 포함하여 트랜스퓨터 기반 병렬 시스템 적용에 대한 연구 활동을 시작했다. 또한 DESY의 하드론 전자 링 시설(HERA) 충돌기용 고에너지 물리학 ZEUS 실험의 데이터 수집 및 2차 트리거 시스템은 여러 하위 시스템으로 나뉜 300개 이상의 동기식 클록 트랜스퓨터 네트워크를 기반으로 했다. 이들은 맞춤형 검출기 전자 장치의 판독을 제어하고 물리학 이벤트 선택을 위한 재구성 알고리즘을 실행했다.
트랜스퓨터의 병렬 처리 능력은 1990년대 초 세계 최대 인쇄 회사인 R. R. 도넬리 &amp; 선즈에 의해 영상 처리를 위해 상업적으로 활용되었다. 인쇄 준비를 위해 디지털 이미지를 빠르게 변환하는 능력은 이 회사에 경쟁업체보다 상당한 우위를 제공했다. 이 개발은 R. R. 도넬리 기술 센터의 마이클 벵스턴이 주도했다. 몇 년 안에 데스크톱 컴퓨터의 처리 능력만으로도 이 회사를 위한 맞춤형 다중 처리 시스템의 필요성이 없어졌다.
독일 회사 Jäger Messtechnik는 초기 ADwin 실시간 데이터 준비 및 제어 제품에 트랜스퓨터를 사용했다.
프랑스 회사는 최대 144개의 T800 및 T400 트랜스퓨터를 갖춘 아르키펠 볼복스 슈퍼컴퓨터를 구축했다. 이 컴퓨터는 UNIX를 실행하는 실리콘 그래픽스 인디고2와 볼복스 백플레인에 인터페이스하는 특수 카드로 제어되었다.
트랜스퓨터는 지멘스/텍트로닉스 K1103과 같은 프로토콜 분석기와 군사 애플리케이션에서도 사용되었다. 군사 애플리케이션에서는 어레이 아키텍처가 레이더와 같은 애플리케이션에 적합했으며, (1980년대에 고속이었던) 직렬 링크는 하위 시스템 통신에서 비용과 무게를 절약하는 데 큰 도움이 되었다.
트랜스퓨터는 또한 가상 현실 관련 제품에서도 등장했다. 브리스틀의 Division Limited에서 만든 ProVision 100 시스템이 그 예인데, 인텔 i860, 80486/33, 도시바 HSP 프로세서와 함께 T805 또는 T425 트랜스퓨터를 사용하여 렌더링 엔진을 구현했고, 이 엔진은 PC, 선 SPARC스테이션 또는 VAX 시스템에서 서버로 접근할 수 있었다.
아스트리움 새틀라이트와 프랑스 국립 우주 연구 센터가 개발하고 피카르 위성 등에서 사용되는 유럽의 초소형 위성 플랫폼인 미리아드는 T805를 기반으로 하며 약 4 MIPS의 성능을 제공하고 2015년까지 생산될 예정이다.
통신과 연산의 비동기 작동은 베인의 "비동기 다항식 근 찾기" 알고리즘과 같은 비동기 알고리즘의 개발을 가능하게 했다. 비동기 알고리즘 분야와 현재 알고리즘의 비동기 구현은 엑사스케일 컴퓨팅으로의 전환에 핵심적인 역할을 할 가능성이 있다.
고에너지 천이 탐색기 2(HETE-2) 우주선은 4개의 T805 트랜스퓨터와 8개의 DSP56001을 사용하여 약 1억 초당 명령 수(MIPS)의 성능을 제공했다.
내부 병렬 처리의 증가는 기존 CPU 설계 개선의 원동력 중 하나였다. (트랜스퓨터에서 사용되는) 명시적인 스레드 수준 병렬 처리 대신, CPU 설계는 명령어 수준에서 암시적인 병렬 처리를 활용하여 데이터 의존성을 위해 코드 시퀀스를 검사하고 여러 독립적인 명령어를 다른 실행 장치에 발행했다. 이를 슈퍼스칼라 처리라고 한다. 슈퍼스칼라 프로세서는 순차적으로 구성된 코드 조각의 실행을 최적화하는 데 적합하다. 슈퍼스칼라 처리와 투기적 실행의 조합은 기존 코드 본체(대부분 파스칼, 포트란, C, C++로 작성됨)에서 상당하고 규칙적인 성능 향상을 제공했다. 기존 코드의 이러한 실질적이고 규칙적인 성능 향상으로 인해 더 많은 태스크 수준 병렬 처리를 노출하는 언어나 코딩 스타일로 소프트웨어를 다시 작성할 유인이 거의 없었다.
그럼에도 불구하고 협력하는 동시 프로세서 모델은 21세기 슈퍼컴퓨터 설계를 지배하는 클러스터 컴퓨팅 시스템에서 여전히 찾아볼 수 있다. 트랜스퓨터 아키텍처와 달리, 이러한 시스템의 처리 장치는 일반적으로 상당한 양의 메모리 및 디스크 저장 장치에 접근할 수 있는 슈퍼스칼라 CPU를 사용하며, 기존 운영 체제 및 네트워크 인터페이스를 실행한다. 더 복잡한 노드로 인해 이러한 시스템에서 병렬 처리를 조정하는 데 사용되는 소프트웨어 아키텍처는 일반적으로 트랜스퓨터 아키텍처보다 훨씬 더 무겁다.
근본적인 트랜스퓨터의 동기는 남아 있었지만, 트랜지스터 수가 반복적으로 두 배로 늘어나면서 20년 이상 가려져 있었다. 필연적으로 마이크로프로세서 설계자들은 결국 더 많은 물리적 자원을 사용할 방법을 다 소진했고, 거의 동시에 기술 스케일링이 한계에 부딪히기 시작했다. 전력 소비, 즉 열 방출 요구 사항으로 인해 추가적인 클럭 속도 증가는 불가능해졌다. 이러한 요인들은 산업을 인모스가 제안한 것과 본질적으로 크게 다르지 않은 해결책으로 이끌었다.
컬럼비아 대학교의 설계에 기반을 두고 IBM 블루 진으로 구축된 세계에서 가장 강력한 슈퍼컴퓨터 중 일부는 트랜스퓨터의 꿈을 현실화한 것이다. 이들은 동일하고 비교적 성능이 낮은 SoC의 거대한 집합체이다.
최근의 경향은 또한 인모스에게조차 너무 미래적이었을 방식으로 트랜지스터 딜레마를 해결하려고 노력해 왔다. CPU 다이에 구성 요소를 추가하고 하나의 시스템에 여러 다이를 배치하는 것 외에도, 최신 프로세서는 점점 더 하나의 다이에 여러 코어를 배치하고 있다. 트랜스퓨터 설계자들은 트랜지스터 예산에 단 하나의 코어도 맞추기 위해 고군분투했다. 오늘날 설계자들은 1000배 증가한 트랜지스터 밀도를 가지고 이제 일반적으로 많은 코어를 배치할 수 있다. 가장 최근의 상업적 개발 중 하나는 XMOS 회사에서 나왔는데, 이 회사는 트랜스퓨터 및 인모스와 강력하게 공명하는 임베디드 다중 코어 다중 스레드 프로세서 제품군을 개발했다. 셀 프로세서, 어댑테바 에피파니 아키텍처, 틸레라 등과 같이 칩 위의 네트워크(NoC) 접근 방식을 취하는 새로운 등급의 멀티코어/매니코어 프로세서가 등장하고 있다.
트랜스퓨터와 인모스는 브리스틀, 영국을 마이크로전자 설계 및 혁신의 중심지로 확립하는 데 기여했다.
차도르(유튜버)(1991년 5월 15일 ~ )는 대한민국의 격투기 해설가이다. 현재 tvN SPORTS에서 UFC 해설위원을 맡고 있고, 격투기 전문 유튜버로 활동하고 있다. 2025년 10월을 기준으로 구독자는 약 91만명이고 조회수는 12억뷰를 기록하고 있다.
전직 뉴질랜드 변호사 출신으로, 2019년 중반까지 상법 분야에서 활동하다가 변호사직을 내려놓고 미디어 회사를 설립하였다. 이후 유튜브를 비롯한 미디어 활동에 전념하고 있으며, 현재는 UFC를 비롯한 다양한 격투기 단체 해설위원으로 활동하고 있다.
모듈러 산술 계산에서 몽고메리 모듈러 곱셈(Montgomery modular multiplication)은 일반적으로 몽고메리 곱셈이라고 불리며, 빠른 모듈러 곱셈을 수행하는 방법이다. 이 방법은 1985년 미국의 수학자 피터 L. 몽고메리에 의해 소개되었다.
몽고메리 모듈러 곱셈은 몽고메리 형식이라고 불리는 특별한 숫자 표현에 의존한다. 이 알고리즘은 와 의 몽고메리 형식을 사용하여 의 몽고메리 형식을 효율적으로 계산한다. 효율성은 값비싼 나눗셈 연산을 피하는 데서 비롯된다. 고전적인 모듈러 곱셈은 이중 폭의 곱 를 으로 나누어 나머지만을 취함으로써 축소한다. 이 나눗셈은 몫 자릿수 추정과 보정을 필요로 한다. 이와 대조적으로, 몽고메리 형식은 과 서로소인 상수 에 의존하며, 몽고메리 곱셈에 필요한 유일한 나눗셈은 로 나누는 것이다. 상수 은 로 나누는 것이 쉽게 되도록 선택할 수 있어, 알고리즘의 속도를 크게 향상시킨다. 이진 컴퓨터에서 은 항상 2의 거듭제곱이며, 2의 거듭제곱으로 나누는 것은 비트 시프팅으로 구현할 수 있다.
와 를 몽고메리 형식으로 변환하고, 그 결과를 몽고메리 형식에서 벗어나게 변환하는 과정이 필요하므로, 몽고메리 곱셈으로 단일 곱셈을 계산하는 것은 기존의 배럿 축소 알고리즘보다 느리다. 그러나 모듈러 지수화와 같이 많은 곱셈을 연속해서 수행할 때는 중간 결과를 몽고메리 형식으로 유지할 수 있다. 그러면 초기 및 최종 변환이 전체 계산에서 무시할 수 있는 부분이 된다. RSA 및 디피-헬먼 키 교환과 같은 많은 중요한 암호 시스템은 큰 홀수에 대한 모듈러 산술 연산을 기반으로 하며, 이러한 암호 시스템의 경우 을 2의 거듭제곱으로 하는 몽고메리 곱셈을 사용하는 계산이 사용 가능한 대안보다 빠르다.
모듈러 산술.
을 양의 정수 모듈러라고 하자. 몫환 는 을 법으로 하는 잉여류들로 구성된다. 즉, 그 원소들은 다음과 같은 형태의 집합이다.
여기서 는 정수 범위에 걸쳐 있다. 각 잉여류는 집합 내의 임의의 두 정수의 차이가 으로 나누어지는 정수들의 집합이다(그리고 잉여류는 그 속성에 대해 최대적이다. 정수들은 나눗셈 조건을 위반하지 않는 한 잉여류에서 제외되지 않는다). 에 해당하는 잉여류는 로 표기한다. 잉여류의 같음을 합동이라고 하며 다음과 같이 표기한다.
잉여류는 무한히 많은 원소를 가지므로, 전체 잉여류를 컴퓨터에 저장하는 것은 불가능하다. 대신 잉여류는 대표원(representative)으로 저장된다. 일반적으로 이 대표원들은 인 정수 이다. 가 정수이면, 의 대표원은 으로 표기한다. 합동을 쓸 때, 정수를 그 정수가 나타내는 잉여류와 동일시하는 것이 일반적이다. 이 관례에 따라 위 등식은 으로 표기된다.
잉여류에 대한 산술은 먼저 그 대표원에 대한 정수 산술을 수행함으로써 이루어진다. 정수 연산의 결과는 잉여류를 결정하며, 모듈러 연산의 결과는 잉여류의 대표원을 계산함으로써 결정된다. 예를 들어, 일 때, 잉여류 과 의 합은 정수 합 를 구한 다음, 22와 17의 차이가 17의 배수인 0과 16 사이의 정수인 을 결정함으로써 계산된다. 이 경우, 그 정수는 5이므로, 이다.
몽고메리 형식.
와 가 범위의 정수라면, 그 합은 범위에 있고, 그 차이는 범위에 있으므로, 의 대표원을 결정하는 데는 의 뺄셈 또는 덧셈(각각)이 최대 한 번 필요하다. 그러나 곱셈 는 범위에 있다. 중간 정수 곱셈 를 저장하는 데는 또는 보다 두 배 많은 비트가 필요하며, 에서 대표원을 효율적으로 결정하려면 나눗셈이 필요하다. 수학적으로, 0과 사이에서 와 합동인 정수는 유클리드 나눗셈 정리를 적용하여 표현할 수 있다.
여기서 는 몫 formula_4이고, 나머지 은 구간에 있다. 나머지 은 이다. 을 결정하는 것은 를 계산한 다음, 에서 을 빼는 방식으로 할 수 있다. 예를 들어, 다시 formula_5로, 곱셈 는 formula_6를 계산하고, formula_7을 나눈 다음, formula_8을 뺄셈하여 결정된다.
의 계산은 나눗셈을 필요로 하므로, 대부분의 컴퓨터 하드웨어에서 바람직하지 않게 비싸다. 몽고메리 형식은 값비싼 나눗셈 없이 모듈러 곱셈을 계산할 수 있는 링의 원소를 표현하는 다른 방법이다. 나눗셈은 여전히 필요하지만, 다른 제수 에 대해 수행할 수 있다. 이 제수는 2의 거듭제곱으로 선택할 수 있으며, 이 경우 나눗셈은 시프팅으로 대체될 수 있고, 또는 전체 기계어 워드 수로 선택할 수 있으며, 이 경우 나눗셈은 워드를 생략함으로써 대체될 수 있다. 이러한 나눗셈은 빠르므로, 몽고메리 형식을 사용하여 모듈러 곱셈을 계산하는 비용의 대부분은 일반 곱셈을 계산하는 비용이다.
보조 모듈러스 은 인 양의 정수여야 한다. 계산상의 목적으로 에 대한 나눗셈과 축소가 저렴해야 하며, 이 아니면 모듈러스는 모듈러 곱셈에 유용하지 않다. 에 대한 잉여류 의 몽고메리 형식은 이다. 즉, 잉여류 의 대표원이다. 예를 들어, 이고 이라고 가정하자. 3, 5, 7, 15의 몽고메리 형식은 각각 , , , 이다.
몽고메리 형식에서의 덧셈과 뺄셈은 분배 법칙 때문에 일반적인 모듈러 덧셈 및 뺄셈과 동일하다.
몽고메리 형식으로 연산을 수행하는 것이 몫환 에서 연산을 수행하는 것에 비해 정보를 잃지 않는다는 점에 유의해야 한다. 이는 이므로, 을 곱하는 것이 덧셈군 에 대한 동형 사상이기 때문이다. 예를 들어, 는 몽고메리 형식으로 이 된다.
그러나 몽고메리 형식에서의 곱셈은 겉보기에는 더 복잡하다. 과 의 일반적인 곱셈은 이라는 추가 인자가 있기 때문에 와 의 곱을 나타내지 않는다.
몽고메리 형식으로 곱셈을 계산하려면 의 추가 인자를 제거해야 한다. 로 나누는 것은 저렴하지만, 중간 곱셈 은 모듈러 연산이 이 속성을 파괴했기 때문에 로 나누어지지 않는다. 따라서 예를 들어, R = 100일 때 7과 15를 17을 법으로 하는 몽고메리 형식으로 곱하면 3과 4의 곱인 12가 된다. 12는 100으로 나누어지지 않으므로, 의 추가 인자를 제거하기 위한 추가적인 노력이 필요하다.
의 추가 인자를 제거하는 것은 을 만족하는 정수 을 곱함으로써 수행할 수 있다. 즉, 을 을 법으로 하는 모듈러 역원인 의 잉여류를 곱하는 것이다. 그러면 을 법으로 작업할 때,
정수 은 과 이 서로소라는 가정 때문에 존재한다. 이는 확장 유클리드 호제법을 사용하여 구성할 수 있다. 확장 유클리드 호제법은 베주 항등식을 만족하는 정수 와 을 효율적으로 결정한다.
, 이며, 다음을 만족한다.
이는 몽고메리 형식으로 곱셈을 수행하는 것이 가능함을 보여준다. 따라서 몽고메리 형식으로 숫자를 곱하는 간단한 알고리즘은 , , 그리고 을 정수로 곱하고 을 법으로 줄이는 것이다.
예를 들어, 7과 15를 17을 법으로 몽고메리 형식으로 곱하려면, 다시 으로, 위와 같이 3과 4의 곱을 계산하여 12를 얻는다. 확장 유클리드 호제법은 임을 의미하므로 이다. 12에 8을 곱하여 96을 얻고 17을 법으로 줄이면 11이 된다. 이는 예상대로 3의 몽고메리 형식이다.
REDC 알고리즘.
위의 알고리즘은 정확하지만, 을 곱하고 으로 나누어야 하기 때문에 표준 표현법에서의 곱셈보다 느리다. REDC로도 알려진 몽고메리 환원은 에 의한 곱셈과 을 법으로 하는 환원을 단순한 방법보다 빠르게 동시에 계산하는 알고리즘이다. 수를 보다 작게 만드는 데 중점을 두는 기존의 모듈러 환원과 달리, 몽고메리 환원은 수를 로 더 잘 나누어지게 만드는 데 중점을 둔다. 이는 을 법으로 하는 나머지를 상쇄하도록 정교하게 선택된 의 작은 배수를 추가함으로써 이루어진다. 그 결과를 로 나누면 훨씬 작은 수가 나온다. 이 수는 너무 작아서 거의 을 법으로 하는 환원과 같으며, 을 법으로 하는 환원을 계산하는 데는 최종 조건부 뺄셈만 필요하다. 모든 계산은 이 아닌 에 대한 환원과 나눗셈만을 사용하여 수행되므로, 이 알고리즘은 나눗셈을 통한 직접적인 모듈러 환원보다 빠르게 실행된다.
function REDC is
input: 정수 R과 N, 을 만족,
정수 N′ ( 범위), 을 만족,
정수 T ( 범위).
output: 정수 S ( 범위), 을 만족
m ← ((T mod R)N′) mod R
t ← (T + mN) / R
if t ≥ N then
이 알고리즘이 올바르다는 것을 확인하려면, 먼저 이 이 로 나누어지도록 정확하게 선택된다는 것을 관찰해야 한다. 어떤 숫자가 로 나누어지는 것은 을 법으로 0과 합동일 필요충분조건이며, 우리는 다음을 얻는다.
따라서 는 정수이다. 둘째, 출력은 또는 인데, 둘 다 과 합동이므로, 출력이 과 합동임을 증명하려면 가 임을 증명하는 것으로 충분하다. 는 다음을 만족한다.
따라서 출력은 올바른 잉여류를 가진다. 셋째, 은 에 있으며, 따라서 은 0과 사이에 있다. 그러므로 는 보다 작으며, 정수이므로 는 범위에 있다. 따라서 를 원하는 범위로 줄이는 데는 최대 한 번의 뺄셈만 필요하므로, 알고리즘의 출력은 올바른 범위에 있다.
REDC를 사용하여 17을 법으로 하는 7과 15의 곱을 계산하려면, 먼저 몽고메리 형식으로 변환하고 정수로 곱하여 위와 같이 12를 얻는다. 그런 다음 , , 및 를 사용하여 REDC를 적용한다. 첫 번째 단계에서 을 로 설정한다. 두 번째 단계에서는 를 로 설정한다. 은 예상대로 100의 배수인 1100임을 알 수 있다. 는 11로 설정되고, 11은 17보다 작으므로 최종 결과는 11이 되며, 이는 이전 섹션의 계산과 일치한다.
다른 예로, 의 곱을 으로 고려해보자. 확장 유클리드 호제법을 사용하여 을 계산하면, 은 이 된다. 7과 15의 몽고메리 형식은 각각 와 이다. 이들의 곱 28은 REDC의 입력 이며, 이므로 REDC의 가정은 만족된다. REDC를 실행하려면 을 으로 설정한다. 그런 다음 이므로 이다. 이므로, 이는 의 몽고메리 형식이다.
중국인의 나머지 정리를 통한 해석.
몽고메리 환원에서 사용된 계수 과 몽고메리 기수 이 주어졌을 때, 잉여류환
을 고려하면, 중국인의 나머지 정리 (CRT)에서 비롯되는 동형 사상이다.
중간 곱을 위한 CRT 재구성.
formula_17인 정수 formula_18 (두 잉여류를 곱하여 formula_18가 발생하는 일반적인 경우)에 대해, 그 환원들을 취하면 다음과 같다.
CRT는 명시적인 재구성 공식을 제공한다.
우변이 이미 formula_22을 법으로 취해졌기 때문에, 이것은 다음과 같이도 쓸 수 있다.
두 합산항은 모두 반개방 구간 formula_24에 놓인다.
따라서, 정수 방정식(단순한 합동이 아님)으로 다음과 같이 쓸 수 있다.
T mod N을 포함하는 항 분리.
formula_28에 대해 풀기 위해 첫 번째 합산항을 분리하면 다음과 같다.
위의 모든 양은 정수이며, 좌변은 formula_30의 배수이다. 따라서 각 우변은 formula_30로 나눌 수 있다. formula_30로 나누면 다음과 같다.
결과 관계.
이는 두 가지 핵심 사실을 제공한다.
을 다시 으로 법을 취하여 환원하면, formula_38을 나타내는 음이 아닌 잉여류를 얻는다.
몽고메리 형식의 산술.
을 법으로 하는 많은 흥미로운 연산들은 몽고메리 형식으로도 잘 표현될 수 있다. 덧셈, 뺄셈, 부정, 등호 비교, 몽고메리 형식이 아닌 정수와의 곱셈, 그리고 과의 최대공약수는 모두 표준 알고리즘으로 수행될 수 있다. 야코비 기호는 formula_39로 계산될 수 있으며, 이때 formula_40이 저장되어야 한다.
일 때, 다른 대부분의 산술 연산은 REDC로 표현될 수 있다. 이 가정은 을 법으로 하는 두 표현의 곱이 보다 작다는 것을 의미하며, 이는 REDC가 정확한 출력을 생성하는 데 필요한 정확한 가정이다. 특히, 과 의 곱은 이다. 곱셈과 REDC를 결합한 연산을 종종 몽고메리 곱셈이라고 부른다.
몽고메리 형식으로의 변환은 을 계산하여 수행된다. 몽고메리 형식에서 벗어나는 변환은 을 계산하여 수행된다. 의 모듈러 역수는 이다. 모듈러 지수승은 제곱을 이용한 지수승을 사용하여 수행될 수 있으며, 초기 곱을 몽고메리 형식의 1, 즉 으로 초기화하고, 곱셈 및 제곱 단계를 몽고메리 곱셈으로 대체한다.
이러한 연산을 수행하려면 적어도 과 을 알아야 한다. 이 작은 양의 정수 의 거듭제곱일 때, 은 헨젤의 보조정리로 계산될 수 있다. 의 를 법으로 하는 역수는 순진한 알고리즘(예: 이면 역수는 1)으로 계산되고, 헨젤의 보조정리가 반복적으로 사용되어 의 더 높은 거듭제곱을 법으로 하는 역수를 찾으며, 을 법으로 하는 역수를 알게 되면 멈춘다. 은 이 역수의 부정이다. 상수 과 은 과 으로 생성될 수 있다. 기본적인 연산은 곱의 REDC를 계산하는 것이다. 독립적인 REDC가 필요할 때, 과의 곱의 REDC로 계산될 수 있다. 직접적인 을 법으로 하는 환원이 필요한 유일한 곳은 의 사전 계산이다.
다중 정밀도 정수에서의 몽고메리 산술.
대부분의 암호화 응용 프로그램은 수백 또는 심지어 수천 비트 길이의 숫자를 필요로 한다. 이러한 숫자는 단일 머신 워드에 저장하기에는 너무 크다. 일반적으로 하드웨어는 특정 베이스 를 법으로 하는 곱셈을 수행하므로, 더 큰 곱셈을 수행하려면 여러 작은 곱셈을 결합해야 한다. 베이스 는 일반적으로 마이크로 전자 응용 프로그램의 경우 2, 8비트 펌웨어의 경우 28 또는 소프트웨어 응용 프로그램의 경우 232 또는 264이다.
REDC 알고리즘은 을 법으로 하는 곱셈을 필요로 하며, 일반적으로 이므로 REDC를 사용하여 곱셈을 계산할 수 있다. 그러나 이 의 거듭제곱일 때, 머신 워드 크기의 정수의 곱셈만 필요한 REDC의 변형이 있다. 양의 다중 정밀도 정수가 리틀 엔디언으로 저장된다고 가정하자. 즉, 는 배열 로 저장되며, 모든 에 대해 이고 이다. 알고리즘은 다중 정밀도 정수 로 시작하여 한 워드씩 환원한다. 먼저 가 로 나눌 수 있도록 의 적절한 배수가 추가된다. 그런 다음 가 로 나눌 수 있도록 의 배수가 추가되는 식이다. 결국 는 로 나눌 수 있게 되고, 로 나눈 후 알고리즘은 계산 후의 REDC와 동일한 위치에 있게 된다.
함수 MultiPrecisionREDC 은
입력: 인 정수 N, p 워드 배열로 저장됨,
정수 , --따라서 r = logB R
인 범위의 정수 N′,
범위의 정수 T, 워드 배열로 저장됨.
출력: 인 범위의 정수 S, p 워드 배열로 저장됨.
으로 설정 (추가 자리올림 워드)
for do
--loop1- T를 로 나눌 수 있게 만듦
c ← 0
m ←
--loop2- 와 이전 자리올림을 더하고 새로운 자리올림을 찾음
x ←
T[i + j] ←
c ←
--loop3- 자리올림 계속
S[i] ← T[i + r]
함수 끝
최종 비교 및 뺄셈은 표준 알고리즘으로 수행된다.
위 알고리즘은 REDC가 올바른 것과 본질적으로 동일한 이유로 올바르다. 루프를 돌 때마다 은 이 로 나눌 수 있도록 선택된다. 그런 다음 가 에 더해진다. 이 양은 을 법으로 0이므로, 이를 더해도 의 값에 영향을 미치지 않는다. 가 루프의 번째 반복에서 계산된 의 값을 나타낸다면, 알고리즘은 를 으로 설정한다. MultiPrecisionREDC와 REDC는 동일한 출력을 생성하므로, 이 합은 REDC 알고리즘이 만들 의 선택과 동일하다.
의 마지막 워드인 (그리고 결과적으로 )는 오직 자리올림을 저장하는 데 사용되는데, 이는 초기 환원 결과가 범위의 결과에 묶여 있기 때문이다. 따라서 임이 미리 알려져 있다면 이 추가 자리올림 워드를 완전히 피할 수 있다. 일반적인 이진 구현에서, 이는 의 비트 수가 의 비트 수보다 작다면 이 자리올림 워드를 피할 수 있다는 것과 동등하다. 그렇지 않으면 자리올림은 0 또는 1이 된다. 프로세서에 따라 이 워드를 전체 크기의 워드 대신 자리올림 플래그로 저장하는 것이 가능할 수도 있다.
다중 정밀도 곱셈과 REDC를 단일 알고리즘으로 결합하는 것이 가능하다. 이 결합된 알고리즘은 일반적으로 몽고메리 곱셈이라고 불린다. Koç, Acar 및 Kaliski는 여러 가지 다른 구현을 설명한다. 이 알고리즘은 워드 (더하기 자리올림 비트)만큼 적은 저장 공간을 사용할 수 있다.
예를 들어, , , 이라고 하자. 및 이라고 가정하자. 와 의 몽고메리 표현은 와 이다. 을 계산한다. MultiPrecisionREDC의 초기 입력 는 [6, 4, 8, 5, 6, 7]이 된다. 숫자 은 [7, 9, 9]로 표현된다. 확장 유클리드 호제법은 이므로, 은 7이 된다고 말한다.
i ← 0
j T c
0 0485670 2 (첫 번째 루프의 첫 번째 반복 후)
1 0485670 2
2 0485670 2
3 0487670 0 (두 번째 루프의 첫 번째 반복 후)
4 0487670 0
5 0487670 0
6 0487670 0
0 0087670 6 (첫 번째 루프의 첫 번째 반복 후)
1 0067670 8
2 0067670 8
3 0067470 1 (두 번째 루프의 첫 번째 반복 후)
4 0067480 0
5 0067480 0
i ← 2
0 0007480 2 (첫 번째 루프의 첫 번째 반복 후)
1 0007480 2
2 0007480 2
3 0007400 1 (두 번째 루프의 첫 번째 반복 후)
4 0007401 0
따라서, 최종 비교 및 뺄셈 전에 이다. 최종 뺄셈은 숫자 50을 산출한다. 의 몽고메리 표현이 이므로, 이는 예상된 결과이다.
2진수 기반에서 작업할 때, 각 단계에서 올바른 을 결정하는 것은 특히 쉽다. 현재 작업 비트가 짝수이면 은 0이고, 홀수이면 은 1이다. 또한 MultiPrecisionREDC의 각 단계는 가장 낮은 비트만 알면 되므로, 몽고메리 곱셈은 자리올림수 저장 가산기와 쉽게 결합될 수 있다.
부채널 공격.
몽고메리 환원은 몫 자리 추정치가 부정확할 때 기존 나눗셈에서 필요한 보정 단계를 피하므로, 타이밍 및 전력 부채널 공격의 주요 목표인 조건부 분기에서 거의 자유롭다. 실행되는 명령어 시퀀스는 입력 피연산자 값과 독립적이다. 유일한 예외는 계수의 최종 조건부 뺄셈이지만, 이를 저항할 수 있도록 (항상 계수 또는 0을 빼도록) 쉽게 수정할 수 있다. 물론 곱셈 기본 요소로 구축된 지수승 알고리즘도 저항력이 있는지 확인해야 한다.
니콜로 롱고바르도(, 1559년 ~ 1655년)는 시칠리아 출신의 예수회 선교사로, 17세기 중국에서의 선교 활동으로 알려져 있다. 니콜로 롱고바르디() 등으로도 표기되었으며, 중국 이름은 용화민()이다. 1597년 중국에 들어왔으며 1610년 마테오 리치에 이어 예수회 중국 선교의 총장이 되었다. 1622년에 총장에서 물러났으나 사망할 때까지 선교 활동을 하였으며 사후 등공책란(滕公柵欄)에 묻혔다.
에이수스 ROG 얼라이(Asus ROG Ally)는 에이수스가 자사의 리퍼블릭 오브 게이머스(Republic of Gamers, ROG) 브랜드의 일환으로 개발 및 제조한 휴대용 게이밍 컴퓨터이다. 2023년 6월 13일에 출시된 이 장치는 밸브의 Steam Deck과 경쟁한다. ROG 얼라이는 윈도우 11 운영체제를 실행하며, AMD의 젠 4 프로세서인 AMD 라이젠 Z1과 Z1 익스트림을 사용한다. 휴대용으로 사용하는 것 외에도, ROG 얼라이는 도킹 스테이션이나 동글을 통해 TV 또는 모니터에 연결하여 데스크톱 컴퓨터나 가정용 비디오 게임기처럼 사용할 수 있다.
에이수스는 GPD Win 2와 같은 휴대용 컴퓨터와 경쟁하기 위해 2018년에 휴대용 게이밍 컴퓨터 개발을 시작했다. 이후 몇 년간 개발은 지연되었지만, 밸브가 2021년 Steam Deck을 발표하면서 휴대용 게이밍 컴퓨터에 대한 대중의 관심이 다시 높아지자 가속화되었다. 이 장치는 2023년 4월 1일에 발표되었는데, 많은 사람들이 만우절 장난이라고 생각했고, 에이수스는 3일 후 공식적으로 실제 제품임을 밝혔다.
에이수스는 2023년 6월 11일 ROG Ally의 출시일, 기술 사양 및 가격을 공개했다. 두 가지 모델이 발표되었는데, 하나는 $599에 판매되는 라이젠 Z1 프로세서 탑재 모델이고, 다른 하나는 $699에 판매되는 라이젠 Z1 익스트림 프로세서 탑재 모델이다. 후자는 2023년 6월 13일에 출시되었고, 전자는 2023년 3분기에 출시되었다.
컴퓨텍스 2024에서 에이수스는 Z1 익스트림 모델의 고성능 업데이트 버전인 ROG Ally X를 발표했다. 이 모델은 1TB의 NVMe 저장 공간, M.2 2230 대신 M.2 2280 슬롯, 24GB LPDDR5X-7500 RAM, 더 큰 배터리 및 기타 개선 사항을 갖추고 있으며, 가격은 $799이다.