KR20080096485A - 일련의 컴퓨터 내에서의 데이터 처리를 위한 시스템 및방법 - Google Patents

일련의 컴퓨터 내에서의 데이터 처리를 위한 시스템 및방법 Download PDF

Info

Publication number
KR20080096485A
KR20080096485A KR1020080039578A KR20080039578A KR20080096485A KR 20080096485 A KR20080096485 A KR 20080096485A KR 1020080039578 A KR1020080039578 A KR 1020080039578A KR 20080039578 A KR20080039578 A KR 20080039578A KR 20080096485 A KR20080096485 A KR 20080096485A
Authority
KR
South Korea
Prior art keywords
data
computer
computers
series
logic
Prior art date
Application number
KR1020080039578A
Other languages
English (en)
Inventor
존 더블유 리블
마이클 비 몬트벨리시스키
Original Assignee
테크날러지 프라퍼티즈 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US11/741,649 external-priority patent/US7555637B2/en
Application filed by 테크날러지 프라퍼티즈 리미티드 filed Critical 테크날러지 프라퍼티즈 리미티드
Publication of KR20080096485A publication Critical patent/KR20080096485A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • G06F15/8015One dimensional arrays, e.g. rings, linear arrays, buses
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Multi Processors (AREA)

Abstract

일련의 컴퓨터 내에서의 데이터 처리를 위한 시스템 및 방법. 일련의 컴퓨터들은 제 1 및 마지막 컴퓨터들을 포함하며, 상기 제 1 컴퓨터를 제외한 각각의 컴퓨터들은 선행하는 이전 컴퓨터가 있으며, 상기 마지막 컴퓨터를 제외한 각각의 컴퓨터들은 후속 컴퓨터가 있다. 일 로직으로 제 1 데이터 경로를 통해 새로운 데이터를 판독하고, 일 로직으로 제 2 데이터 경로를 통해 오래된 데이터를 기록한다. 또한, 일 로직으로 상기 새로운 데이터를 처리하여 상기 오래된 데이터를 생성하며, 저장 엘리먼트는, 상기 마지막 컴퓨터를 제외하고, 상기 오래된 데이터를 저장한다. 상기 기록을 위한 로직은 상기 판독을 위한 로직 이후에 동작하고, 상기 기록을 위한 로직은 상기 처리를 위한 로직 이전에 동작한다.

Description

일련의 컴퓨터 내에서의 데이터 처리를 위한 시스템 및 방법{SYSTEM AND METHOD FOR PROCESSING DATA IN A SERIES OF COMPUTERS}
본 발명은 일반적으로 전기적 컴퓨터 및 프로세싱 구조(processing architecture)를 가지며 명령어 처리(instruction processing)를 수행하는 디지털 프로세싱 시스템에 관한 것으로, 보다 상세하게는, 데이터 전달(전송) 연산(data transfer operation)을 구체적으로 지원하거나 수행하는 명령어 데이터(instruction data) 처리에 관한 것이다.
연산(computing) 기술에 있어서, 처리속도(processing speed)는 절실히 요구되는 품질로서 보다 빠른 컴퓨터 및 프로세서를 구현하고자 하는 노력이 진행중에 있다. 그러나, 적어도 현재 주지된 기술을 이용해서는, 마이크로 프로세서 내부의 속도 증가에 대한 한계에 급속히 부딪히고 있다는 사실이 업계에서 일반적으로 인정된다. 따라서, 다중 프로세서들 사이에서 컴퓨터 태스크를 공유함으로써 전체적인 컴퓨터 속도를 증가시키는 다중 프로세서의 사용에 대한 관심이 증가하고 있다. 그러나, 업무수행(workload) 공유와 관련된 전체적인 효율이, 거의 불가피하게, 다소 떨어질 것이라는 사실은 일반적으로 인정된다. 즉, 한 사람이 60분 안에 포스트 홀(post hole)을 팔 수 있다고 해서, 60명의 사람이 1분 안에 포스트 홀을 팔 수 있다고 할 수는 없다는 오래된 격언이 적용될 것이다. 같은 원칙이 태스크들에 대한 임의의 분담에 적용되고, 프로세서들 사이의 태스크에 대한 분담이 예외는 아니다.
물론, 컴퓨터 프로세서들 사이에서 태스크의 공유를 보다 효율적으로 하기 위한 노력들이 진행되고 있다. 상기 태스크들이 할당되고 있는 정확한 방법에 대한 질문이 검사중이고, 프로세서들이 향상되고 있다. 이 분야에 대한 연구 중, 본 발명가들은 다중 CPU 환경 내에서 하나의 CPU에서 다른 CPU로의 데이터 전송이 일부 환경들 하에서 매우 어렵다는 것을 관측하였다. 예를 들어, 만일 데이터가 하나의 CPU에서 다른 CPU로 전송되어야 하고 타겟(target) CPU는 자신과 소스(source) CPU 사이에 있는 하나의 CPU에 의해 상기 소스 CPU로부터 분리되는경우, 상기 소스 CPU는 상기 데이터를 상기 CPU로 직접 라인을 이루어서(in line) 기록(write)해야만 한다. 이후, 상기 소스 CPU는 상기 데이터를 판독(read)한 후 판독된 데이터를 상기 타겟 CPU에 기록해야 한다. 이후, 상기 소스 CPU는 상기 기록된 데이터를 판독해야 한다. 이와 같은 프로세스은 많은 판독 및 기록 연산들을 요구하며, 만일 다양한 데이터가 전송중이라면, 그와 같은 판독 및 기록 명령어들(commands)이 시스템 연산을 방해할(clog) 수도 있다.
다양한 방향에서(즉, 동일한 시스템내의 다양한 서로 다른 CPU들 사이에서) 다수의 판독 및 기록 연산들(read and write operations)을 동시에 가능하게 하고자 하는 요구를 만족시키기 위하여, 다중 포트(multi-port) 판독 및 기록 연산을 위한 시스템 및 방법이 개발되고 있다. 이를 통해 상기 논의된 대부분의 관심들을 처리할 수 있지만, 특정한 두드러진 발전과 더불어, 이러한 시스템 및 방법들은 새로운 요구들을 제기하고 있다. 예를 들면, 다중-CPU 환경에서, CPU들이 파이프라인이나 다차원의 어레이 형태로 배열된 경우, 하나의 CPU가 다음의 CPU가 아닌 이전의 CPU에 기록하는 인버싱(역행, inversing)이 발생할 수 있다. 이를 방지하기 위한 메커니즘들이 고안될 수 있지만, 이는 하드웨어 변경 혹은 실질적 프로그래밍 및 CPU 간 통신을 요구하게 된다. 다른 예로서, 오늘날 많은 어플리케이션들은 실시간 처리를 요구하거나 단순히 프로세싱 속도 및 효율을 증가시키고자 하고 있다. 이로 인해, 다중 포트 판독 및 기록 연산들을 최적화시키는 것이 필요할 것이다. 비슷한 의도로, 다중 포트 연산들이 가능하게 된 지금, 이러한 연산들의 설정 및 수행이 보다 플렉서블하게 이루어지도록 하는 것 또한 요구될 것이다.
따라서, 본 발명의 일 목적은 컴퓨터의 파이프라인 및 어레이에서 데이터를 처리하기 위한 개선된 시스템 및 방법을 제공하는데 있다.
간단히 말하면, 본 발명의 일 측면은 일련의(다수의) 컴퓨터들의 데이터 처리 방법에 있다. 이러한 일련의 컴퓨터들은 제 1 및 마지막 컴퓨터를 포함하며, 상기 제 1 컴퓨터를 제외한 각각의 컴퓨터들은 이전 컴퓨터가 있으며, 마지막 컴퓨터를 제외한 각각의 컴퓨터들은 후속 컴퓨터가 있다. 상기 각각의 컴퓨터를 현재의 컴퓨터로 여김으로써 이러한 처리과정(process)을 보여줄 수 있다. 새로운 데이터는 (a)상기 현재의 컴퓨터로 판독된다. (b)오래된 데이터는 상기 현재의 컴퓨터로 기록된다. (c)상기 새로운 데이터는 상기 현재의 컴퓨터에서 처리되어 다음의 오래된 데이터를 생성(produce)한다. 이러한 동작 후, (d)상기 현재의 컴퓨터가 마지막 컴퓨터가 아닌 경우, 상기 오래된 데이터는 상기 현재의 컴퓨터에서 남아있게 된다. 상기 (c) 단계는 하나의 명령어 워드 내의 다수의 명령어를 실행하는 단계를 포함할 수 있다. 상기 (a) 및 (b) 단계들은 단일 명령어 워드를 통해 실행될 수 있다. (a), (b) 및 (c) 중 적어도 하나의 단계는 비동기적으로 수행될 수 있다.
간략히 말하면, 본 발명의 다른 측면은 데이터를 처리하기 위한 일련의(다수의) 컴퓨터들에 있다. 이러한 일련의 컴퓨터들에는 제 1 및 마지막 컴퓨터가 포함된다. 상기 제 1 컴퓨터를 제외한 각각의 컴퓨터들은 이전 컴퓨터가 있으며, 마지막 컴퓨터를 제외한 각각의 컴퓨터들은 후속 컴퓨터가 있다. 상기 컴퓨터들은 각각 제 1 데이터 경로(data path)를 통해 새로운 데이터를 판독하기 위한 로직(logic)과, 제 2 데이터 경로를 통해 오래된 데이터를 기록하기 위한 로직, 및 상기 새로운 데이터를 처리하여 다음의 오래된 데이터를 생성하기 위한 로직을 포함하고 있다. 상기 오래된 데이터는 저장 엘리먼트(storage element)에 저장되며, 이는 마지막 컴퓨터는 예외다. 상기 기록을 위한 로직은 상기 판독을 위한 로직 이후에 동작하고, 처리를 위한 로직 전에 동작한다. 상기 판독을 위한 로직 및 기록을 위한 로직은 단일 명령어 워드를 이용하는 프로그램에 의해 실행될 수 있다. 상기 판독을 위한 로직, 기록을 위한 로직 및 처리를 위한 로직 중 적어도 하나는 비동기적으로 수행된다.
본 발명은 또한 일련의 컴퓨터에서 구동시 상기 일련의 컴퓨터들이 본 발명의 일 측면에 따른 방법을 구현하도록 하는 컴퓨터 프로그램을 제공한다. 상기 프로그램은 캐리어 상에 있을 수 있으며, 상기 캐리어는 신호일 수도 있고 혹은 저장부(store)일 수도 있다. 상기 저장부는 예를 들어 레코딩 미디어 혹은 메모리장치일 수 있다.
본 발명의 일 실시예의 장점은 높은 순서에서 낮은 순서의 컴퓨터로 데이터가 기록되는 인버싱(inversing)이 발생하는 것을 방지할 수 있다는 것이다.
본 발명의 일 실시예의 다른 장점은 상기 컴퓨터들의 파이프라인 혹은 어레이를 통한 데이터의 초기 전달을 개선하여 각각의 프로세싱이 더 일찍 시작될 수 있게 한다는 것이다.
본 발명의 일 실시예의 다른 장점은 동일한 초기 데이터값이 일련의 컴퓨터 들 모두에 제공되어야 할 경우에 사용될 때 특히 적합하다는 것이다.
본 발명의 일 실시예의 다른 장점은 비동기식 다중 포트(multi-port) 판독 및 다중 포트 통신이 가능한 컴퓨터들의 파이프라인 혹은 어레이들을 이용할 경우에 특히 적합하다는 것이다.
본 발명의 이러한 목적들 및 그 밖의 목적 및 장점들은 본 발명을 수행하는 현재 가장 잘 알려진 모드에 대한 설명 및 이하 기술되며 도면에 도시된 바와 같은 바람직한 실시예의 산업상 적용가능성 측면에서 당업자들에게 명백해질 것이다.
본 발명의 실시예가 목적들을 달성하기 위한 모드들의 견지에서 기술되는 동안, 다양한 변형들이 본 발명의 정신 또는 범위를 벗어나지 아니한 상태에서 본 취지의 관점에서 이루어질 수 있다는 것은 당업자들에게 자명할 것이다.
이하 기재되고 또는 도면에 제시된 본 발명의 실시예들 및 변형들은 단지 예로써 제시된 것이고, 본 발명의 범위에 있어서 제한되지 아니한다. 특별한 언급이 없는 한, 본 발명의 개별적인 측면 및 구성요소는 생략 또는 변경될 수 있거나, 주지된 등가물들을 대체할 수도 있고, 아직 알려지지 않은 대체물로써 미래에 개발될 수 있거나, 미래의 수용가능한 대체물로 간주될 수 있다. 가능한 애플리케이션들의 범위가 넓고, 본 발명이 많은 변형예들에 적용되도록 의도되기 때문에, 본 발명은 또한 클레임의 정신과 범위 내에서 유지되는 동안 다양한 애플리케이션들에 대해 변경될 수 있다.
본 발명의 바람직한 실시예들은 컴퓨터들의 파이프라인 및 어레이들에서의 데이터 처리를 위한 개선된 시스템들 및 방법들에 관한 것이다. 이하, 다양한 도면에 도시되고, 특히 도 12b에 도시된 바와 같이, 본 발명의 바람직한 실시예들은 일반적인 참조번호 1000으로 나타내진다.
본 발명의 문맥 및 기초로써, 비동기식 컴퓨터 통신에 대한 상세한 배경(background) 예시를 먼저 설명한 후 이러한 비동기식 컴퓨터 통신에서의 다중 포트 판독 및 다중 포트 기록 연산에 대한 상세한 배경 예시를 설명한다.
상기 제 1 배경 예의 경우, 컴퓨터 어레이는 도 1의 개략적인 도면에 도시되어 있으며, 일반적인 참조번호 10으로 명시된다. 상기 컴퓨터 어레이(10)는 다수의(도시된 예에서는 24개) 컴퓨터들(12)(종종 어레이 예시에서 "코어들(cores)" 혹은 "노드들(nodes)"이라고 불림)을 갖는다. 상기 도시된 예에서, 모든 컴퓨터들(12)은 단일 다이 (die)(14)에 위치한다. 각각의 컴퓨터(12)는 일반적으로 독립적으로 연산하는 컴퓨터로써, 이하 보다 상세히 기술될 것이다. 상기 컴퓨터들(12)은 다수의 상호접속 데이터 버스들(interconnecting data buses)(16, 데이터 버스들의 양에 대해서는 이하 보다 상세히 논의될 것이다)에 의해 상호연결되어 있다. 상기 예에서, 상기 데이터 버스들(16)은 양방향 비동기식 고속 평행 데이터 버스들이지만, 이러한 기술의 범위내에서 다른 상호연결 수단들이 상기와 같은 목적으로 이용될 수도 있다. 상기 어레이(10)의 본 실시예에서, 상기 컴퓨터들(12)간의 데이터 통신이 비동기적일 뿐만 아니라 상기 개별 컴퓨터들(12) 또한 내부적으로 비동기식 모드로 연산한다. 이를 통해, 중요한 장점들이 제공된다는 사실이 밝혀졌다. 예를 들어, 클럭 신호는 상기 컴퓨터 어레이(10) 도처에(throughout) 분배될 필요 가 없으므로, 상당량의 전력에 절약된다. 또한, 클럭 신호를 분배하지 않아도 된다는 것은 상기 어레이(10)의 크기를 제한하거나 그 밖의 어려움들을 일으킬 수 있는 많은 타이밍 문제들을 제거하게 된다.
당업자라면 간결성을 위해 도 1에서 생략된 부가적인 성분들이 상기 다이(14) 상(on)에 있다라는 사실을 알 것이다. 그와 같은 부가적 성분들은 파워 버스, 외부 연결 패드, 및 마이크로프로세서 칩의 다른 일반적인 측면들을 포함한다.
컴퓨터(12e)는 상기 어레이(10)의 주변에 있지 않은 상기 컴퓨터들(12) 중 하나에 대한 예시이다. 즉, 컴퓨터(12e)는 4개의 직교하는 인접(adjacent) 컴퓨터들(12a, 12b, 12c, 12d)을 구비한다. 상기 컴퓨터들(12a-12e)의 그룹은 상기 어레이(10)의 상기 컴퓨터들(12) 사이의 통신에 대한 더욱더 상세한 설명과 관련하여 이하 사용될 것이다. 도 1에서 보여진 바와 같이, 컴퓨터(12e)와 같은 내부 컴퓨터들은 자신들이 상기 버스들(16)을 통해 통신할 수 있는 4개의 다른 컴퓨터들(12)을 가지게 될 것이다. 하기의 설명에 있어서, 상술한 원리들이 상기 어레이(10)의 주변에 있는 상기 컴퓨터들(12)이, 코너 컴퓨터들(12)의 경우 상기 컴퓨터들(12) 중 오직 3개 또는 2개의 컴퓨터와만 직접 통신을 수행한다 라는 사실을 제외하고, 상기 모든 컴퓨터들(12)에 적용될 것이다.
도 2는 도 1의 일부분에 대한 더욱 상세한 도면으로, 특히 컴퓨터들 (12a-12e)을 포함하는 상기 컴퓨터들의 일부만을 보여준다. 도 2는 또한 상기 데이터 버스들(16)이 각각 판독 라인(18), 기록 라인(20), 및 복수개의 (본 예에서는 18개) 데이터 라인들(22)을 구비한다는 것을 보여준다. 상기 데이터 라인들(22)은 하나의 18비트 명령어 워드가 지니고 있는 모든 비트들을 일반적으로 동시에 평행하게 전송할 수 있다. 다른 실시예로써, 상기 컴퓨터들(12) 중 일부는 인접한 컴퓨터들의 거울 이미지(mirror images)라는 것을 주지해야 한다. 그러나, 여기에서 상기 컴퓨터들(12)이 모두 똑같이 파생되었는지(oriented), 또는 인접 컴퓨터들의 거울 이미지들인가는 중요하지 않고, 이러한 전위 복잡성(potential complication)은 여기서 심도있게 논의되지 않을 것이다.
상기 컴퓨터(12e)와 같은 컴퓨터(12)는 자신의 판독 라인들(18) 중 하나, 둘, 셋, 또는 네 개가 각각 하나, 둘, 셋, 또는 네 개의 인접 컴퓨터들(12)로부터의 데이터를 수신할 수 있도록 설정할 수 있다. 유사하게, 컴퓨터(12)가 자신의 기록 라인들(2) 중 하나, 둘, 셋, 또는 네 개를 하이(high) 상태로 설정할 수 있다 (이 두 경우에 대해서는 이하 더욱더 상세히 논의된다).
상기 인접 컴퓨터들(12a, 12b, 12c 또는 12d) 중 하나가 자신과 상기 컴퓨터(12e) 사이에 기록 라인(20)을 하이 상태로 설정시, 만일 상기 컴퓨터(12e)가 이미 해당 판독 라인(18)을 하이 상태로 설정했을 경우, 워드(word)가 관련(associated) 데이터 라인들(22) 상에서 컴퓨터(12a, 12b, 12c 또는 12d)로부터 상기 컴퓨터(12e)로 전송된다. 이후, 상기 송신 컴퓨터(12)는 상기 기록 라인(20)을 해제(release)할 것이고, 상기 수신 컴퓨터(12e) (본 예시에서)는 상기 기록 인(20)과 상기 판독 라인(18)을 로우 상태로 풀링한다(pull). 후자의 경우는 상기 송신 컴퓨터(12)에게 상기 데이터가 수신되었음을 통보(acknowledge)해 줄 것이다. 상기의 서술이 이벤트들의 시퀀스를 순서대로 설명하는 것만은 아니라는 사실을 주 지하라. 현행 관습상, 상기 수신 컴퓨터는 상기 송신 컴퓨터(12)가 자신의 기록 라인(20)을 해제하기(하이 상태로 풀링(pull)하는 것을 멈추기) 전에, 상기 기록 라인(20)을 약간 로우 상태로 설정하려고 시도할 수 있다. 이와 같은 예시에서, 상기 송신 컴퓨터(12)가 자신의 기록 라인(20)을 해제하자마자, 상기 기록 라인(20)은 상기 수신 컴퓨터(12e)에 의해 로우 상태로 풀링될 것이다.
본 예시에 있어서, 프로그래밍 에러만이 상기 버스들(16) 중 하나의 대향단들(opposite ends) 상의 두 개의 컴퓨터들(12)이 자신들 사이의(therebetween) 상기 두 개의 판독 라인들(18)을 하이 상태로 설정하거나, 자신들 사이의(therebetween) 상기 두 개의 기록 라인들(20)을 동시에 하이 상태로 설정하기 위한 시도를 하도록 야기시킨다. 그러나, 상기 컴퓨터들(12) 중 하나가 자신의 해당 기록 라인(20)을 하이 상태로 설정하기 위해 상기 선택된 컴퓨터들(12) 중 첫 번째 컴퓨터로부터의 데이터를 기다리는 대기 상태(wait state)에 있을 수 있도록, 상기 판독 라인들(18)의 서로 다른 조합들을 하이 상태로 설정하는 것이 바람직한 경우가 있을 것이라고 현재 기대된다.
상술한 예시에 있어서, 컴퓨터(12e)는 인접 컴퓨터(12a, 12b, 12c 또는 12d 중 하나 또는 다수)가 자신의 기록 라인(20)을 하이 상태로 설정하기 전에, 자신의 판독 라인들(18) 중 하나 또는 다수를 하이 상태로 설정한다고 설명되었다. 그러나, 상기 프로세스은 분명히 반대 순서로 일어날 수 있다. 예를 들어, 만일 상기 컴퓨터(12e)가 상기 컴퓨터(12a)에 기록하려고 시도하고 있었다면, 상기 컴퓨터(12e)는 상기 컴퓨터(12e)와 컴퓨터(12a) 사이의 상기 기록 라인(20)을 하이 상 태로 설정한다. 만일, 컴퓨터(12e)와 컴퓨터(12a) 사이의 상기 판독 라인(18)이 컴퓨터(12a)에 의해 하이 상태로 설정되어 있지 않았다면, 상기 컴퓨터(12e)는 컴퓨터(12a)가 판독 라인(18)을 하이 상태로 설정할 때까지 기다리기만 할 것이다. 이후, 상술한 바와 같이, 한 쌍의 해당 판독 라인들(18) 및 기록 라인들(20)이 하이 상태로 설정되었을 경우, 상기 데이터 라인들(22) 상에서 전송되기를 기다리고 있는 상기 데이터는 전송된다. 이후, 상기 수신 컴퓨터(12a)(본 예에서)는 상기 송신 컴퓨터(12e)가 상기 데이터를 해제하자마자, 컴퓨터 상기 두 대의 컴퓨터들(12e, 12a) (본 예에서) 사이의 상기 판독 라인(18)과 기록 라인(20) 둘 다를 로우 상태로 설정한다. 상기 컴퓨터(12e)와 같은 컴퓨터(12)가 자신의 기록 라인들(20) 중 하나를 기록을 기대하고 하이 상태로 설정했다면, 상기 데이터가 전송되어질 상기 컴퓨터(12)가 자신의 판독 라인(18)을 하이 상태로 이미 설정하지 않았을 경우, 상술한 바와 같이, 적절한 인접 컴퓨터(12)로부터 상기 데이터가 '요청될(requested)'때까지 전력을 사용하지 않고 단순히 대기할 것이다. 이 경우, 상기 데이터는 즉시 전송이 된다. 유사하게, 컴퓨터(12)가 자신의 판독 라인들(18) 중 하나 또는 다수 개를 판독을 기대하고 하이 상태로 설정할 때마다, 상기 컴퓨터(12)는 선택된 컴퓨터(12)로 연결된 상기 기록 라인(20)이 하이 상태로 설정되어 상기 두 대의 컴퓨터들(12) 사이로 명령어 워드(instruction word)를 전송할 때까지 전력을 사용하지 않고 단순히 대기할 것이다.
상기 컴퓨터들(12)이 상술한 바와 같이 연산하도록 하는 몇 가지의 가능한(potential) 수단 및/또는 방법들이 있을 수 있다. 그러나, 본 예시에서, 상기 컴퓨터들(12)은 자신들이 일반적으로 내부적으로 비동기적으로 연산하고 있기 때문에 (상술한 비동기적 방법으로 자신들 사이에서 데이터를 전송하는 것 외에도), 그렇게 단순히 연산한다. 즉, 명령어들이 순차적으로 완성된다. 기록 또는 판독 명령어가 발생할 때, 상기 명령어가 완성될 때까지 (또는 다른 방법으로, 상기 명령어가 'reset' 또는 기타에 의해 폐기될 때까지) 보다 심화된 동작이 없을 수 있다. 종래의 기술 관점에서 보면, 규칙적인(regular) 클럭 펄스가 없다. 오히려, 펄스가 생성되어, 상기 실행되고 있는 명령어가 판독 또는 기록형 명령어가 아닐 경우 (상기 판독 또는 기록형 명령어는 다른 엔티티에 의한 완성을 요구한다), 또는 상기 판독 또는 기록형 연산이 사실상 완료되었을 경우에만, 다음의 명령어를 완성한다.
도 3은 도 1 및 2의 상기 컴퓨터들 중 하나에 대한 일반적인 배치를 보여주는 블록도이다. 도 3으로부터 알 수 있듯이, 상기 컴퓨터들(12) 각각은 자신의 고유한 RAM(24)과 ROM(26)을 구비하는 일반적으로 자신 포함형 컴퓨터(self contained computer)이다. 상술한 바와 같이, 상기 컴퓨터들(12)은 종종 개별형 'cores'(본 예에서는, 단일 칩 상에 결합됨)라고 언급되기도 한다.
상기 컴퓨터(12)의 다른 기본적 구성품들은 리턴 스택(28), 명령영역(30), 산술 로직유닛(ALU:32), 데이터 스택(34), 및 명령어 워드 디코딩을 위한 디코딩 로직섹션(36)을 포함한다. 해당 분야의 지식을 가지는 사람이라면 일반적으로 본 예에서의 상기 컴퓨터들(12)과 같은 스택 기반(stack based) 컴퓨터들의 연산에 친숙할 것이다. 상기 컴퓨터들(12)은 상기 데이터 스택(34) 및 개별(separate) 리턴 스택(28)을 구비하는 이중 스택 컴퓨터들이다.
본 발명의 본 실시예에 있어서, 상기 컴퓨터(12)는 인접 컴퓨터들(12)과 통신하기 위한 4개의 통신 포트들(38)을 갖는다. 상기 통신 포트들(38)은 OFF 상태, (신호들을 상기 컴퓨터(12) 내부에서) 구동하기 위한 수신 상태, (신호들을 상기 컴퓨터(12) 밖에서) 구동하기 위한 송신 상태를 구비하는, 3-상태 드라이버들이다. 물론, 상기 특정 컴퓨터(12)가 컴퓨터(12e)의 예와 같은 상기 어레이(도 1)의 내부 상에 있지 않다면, 상기 통신 포트들 중 하나 또는 다수개가 적어도 여기에 기재되는 상기 목적들을 위하여 상기 특정 컴퓨터 내에서 사용되지 않을 것이다. 상기 명령영역(30)은 다수개의 레지스터들(40)을 포함하는데, 이는 본 예에서 'A'레지스터(40a), 'B'레지스터(40b), 'P'레지스터(40c), 및 입출력(I/O) 제어 및 상태 레지스터(IOCS 레지스터:40d)에 해당한다. 본 예에서, 상기 'A'레지스터(40a) 및 IOCS 레지스터(40d)는 18 풀비트 레지스터들인 반면, 상기 'B'레지스터(40b) 및 'P'레지스터(40c)는 9-비트 레지스터들이다.
비록 본 발명이 본 예시에 의해 제한되지는 않지만, 상기 컴퓨터(12)는 네이티브 포스 언어(native Forth language) 명령어들을 실행하도록 구현된다. 상기 포스 컴퓨터 언어와 친숙한 사람이라면, 포스 워드(Forth words)로 알려진 복잡한 포스 명령어가 상기 컴퓨터 내부로 디자인된 상기 네이티브 프로세서 명령어들로부터 구축된다는 것을 이해하게 될 것이다. 포스 언어들의 집합체는 '사전(dictionary)'으로 알려져 있다. 다른 언어들에 있어서, 이는 '도서관(library)'으로 알려져 있을 수 있다. 이하, 더욱더 상세히 기술되는 바와 같이, 상기 컴퓨터(12)는 RAM(24)과 ROM(26)으로부터 한 번에 18 비트들을 판독하거나, 상기 데이터 버스들(16: 도 2) 중 하나로부터 직접 판독한다. 그러나, 대부분의 포스 명령어들(적은 피연산자 명령어들(operand-less instructions)이라고 알려짐)은 자신들의 피연산자들을 상기 스택들(28, 34)로부터 직접 획득하기 때문에, 길이 측면으로 볼 때 겨우 5 비트에 불과하다. 이는 오직 3 비트만을 필요로 하는 제한된 집합의 명령어들로부터 상기 그룹내의 마지막 명령어가 선택된다는 조건 하에서, 4개의 명령어들까지 단일 18 비트 명령어 워드 내부에 포함되도록 하는 길이에 해당한다. 본 발명의 상기 실시예에서, 상기 데이터 스택(34) 내부의 상부(top) 두 개의 레지스터들은 'T' 레지스터(44)와 'S'레지스터(46)이다. 슬롯 시퀀서(slot sequencer 42: 곧 상세히 논의될 예정임)가 또한 도 3의 블록 도표(block diagrammatic form) 내에 도시된다.
도 4는 명령어 워드(48)에 대한 도식 대표(diagrammatic representation)이다 (상기 명령어 워드(48)는 명령어, 데이터, 또는 그것들의 일부 조합을 실제적으로 포함할 수 있다는 것을 주지해야 한다). 상기 명령어 워드 워드(48)는 18개의 비트들(50)로 이루어진다. 이진수 컴퓨터이기 때문에, 상기 비트들(50) 각각은 '1' 또는 '0'이 될 것이다. 상술한 바와 같이, 상기 18 비트 폭을 지닌 명령어 워드(48)는 '슬롯 0(54a)', '슬롯 1(54b)', '슬롯 2(54c)', '슬롯 3(54d)'라고 불리우는 4개의 슬롯들(54) 안에서 네 개의 명령어들(52)까지 포함할 수 있다. 본 발명에서, 상기 18 비트 명령어 워드(48)는 항상 전체적으로 판독된다. 따라서, 상기 명령어 워드(48) 내에서 4개의 명령어까지 가질 수 있는 전위(potential)가 있기 때문에, 놉(no-op:no operation 무연산) 명령어는 예를 들어 상기 유효한 슬롯들(54)에 대한 사용이 불필요하거나 심지어 바람직하지 않을 경우에 대비하여, 상 기 컴퓨터(12)의 명령어 집합 내에 포함된다. 특정 실시예에 따르면, 교번적인 슬롯들(특히, 슬롯 1(54b)과 슬롯 3(54c))내부의 비트들(50)의 극성(액티브 '로우'와 비교했을 때 액티브 '하이')이 반전(reverse)된다는 것을 주지해야 한다. 그러나, 이는 필요하지 않고, 따라서 본 발명을 보 다 잘 설명하기 위해서 상기 전위 복잡성(potential complication)이 또한 다음의 논의에서 생략된다.
도 5는 도 3의 슬롯 시퀀서(sequencer)의 개략적 대표도이다. 도 5에서 보여지는 바와 같이, 상기 슬롯 시퀀서(42)는 링 모양으로 배치된 복수개의(본 예에서는 14개) 인버터들(56) 및 하나의 'NAND' 게이트(58)를 포함하여, 신호가 상기 14개의 인버터들(56)과 상기 'NAND' 게이트(58)을 통해 이동하는 동안 홀수 번 역전(invert) 되도록 한다. 'OR' 게이트(60)로 입력된 상기 두 신호 중 하나가 '하이'상태가 될 때, 신호가 상기 슬롯 시퀀서(42) 내에서 초기화된다. 첫 번째 'OR' 게이트 입력(62)이 실행되고 있는 중인 상기 명령어(52)의 i4 비트(66, 도 4)로부터 인출된다(derived). 만일 i4 비트(66)가 '하이' 상태라면, 특정 명령어(52)가 산술 로직 유닛(ALU) 명령어이고, 상기 i4 비트(66)는 '1'이다. 상기 i4 비트(66)가 '1'일 경우, 상기 첫 번째 'OR' 게이트 입력(62)은 '하이' 상태이고, 상기 슬롯 시퀀서(42)는 트리거되어(triggered) 다음 명령어(52)의 실행을 야기시킬 펄스를 초기화한다.
상기 슬롯 시퀀서(42)가 트리거되었을 때, '하이' 상태로 가고 있는 상기 첫 번째 'OR' 게이트 입력(62)과 '하이' 상태로 가고 있는 상기 두 번째 'OR' 게이트 입력(64)(이하 논의될 예정임) 둘 중 하나에 의해, 신호가 매 번 슬롯 시퀀서 출 력(68)에서 출력을 생성하면서, 상기 슬롯 시퀀서(42) 주위를 두 번 이동하게 될 것이다. 상기 신호가 상기 슬롯 시퀀서 출력(68)을 통과하는 첫 번째에는 '로우' 상태로 될 것이고, 두 번째에는 상기 슬롯 시퀀서 출력(68)에서의 상기 출력은 '하이' 상태가 될 것이다. 상기 슬롯 시퀀서 출력(68)으로부터 나온 상대적으로 넓은 출력은 폭이 좁은 타이밍 펄스를 출력으로써 생성하는 펄스 생성기(70, 블록 도표내에 도시)로 제공된다. 해당 분야의 지식을 지니고 있는 사람이라면 상기 좁은 타이밍 펄스가 상기 컴퓨터(12)의 연산을 정확히 초기화시키기 위해 바람직하다는 것을 알게 될 것이다.
상기 실행중인 특정 명령어(52)가 판독 또는 기록 명령어일 때, 또는 상기 실행중인 명령어(52)가 다음 명령어(52)에 대한 즉각 실행을 순서대로 트리거하는 것이 바람직하지 않은 임의의 다른 명령어일 때, 상기 i4 비트(66)는 '0'(로우)이 되고 상기 첫 번째 'OR' 게이트 입력(62)도 또한 '로우' 상태가 된다. 해당 분야의 통상 지식을 지니고 있는 당업자라면 상기 컴퓨터들(12)과 같은 장치 내의 이벤트들의 타이밍이 일반적으로 꽤 중요하고, 이는 예외가 아니라는 사실을 알게 될 것이다. 상기 슬롯 시퀀서(42)를 검사하자마자, 해당 분야의 통상 지식을 지니고 있는 당업자라면 상기 'OR' 게이트(60)로부터의 상기 출력이, 상기 신호가 상기 링의 두 번째'lap'을 초기화하기 위해 상기 'NAND'게이트(58)를 통과하여 순환을 할 때까지 '하이' 상태를 유지해야 한다는 것을 알게 될 것이다. 이후, 상기 'OR' 게이트(60)로부터의 출력은 상기 회로의 바람직하지 않은 계속적인 진동(oscillation)을 방지하기 위해 상기 두 번째의 'lap' 동안 '로우' 상태가 될 것이다.
상술한 설명의 견지에서 이해될 수 있듯이, 상기 i4 비트(66)가 '0'일 경우, 상기 슬롯 시퀀서(42)는, 상기 두 번째의 'OR' 게이트 입력(64)이 '하이' 상태가 아니라는 (이후 논의될 예정임) 가정 하에, 트리거되지 않을 것이다.
상술한 바와 같이, 각 명령어(52)의 상기 i4 비트(66)는 상기 명령어가 판독 또는 기록형 명령어인지의 여부에 따라 설정된다. 상기 명령어(52) 내부의 잔존 비트들(50)은 상기 명령어를 위한 특정 옵코드(opcode)의 잔차(remainder)를 제공한다. 판독 또는 기록형 명령어일 경우, 상기 비트들 중 하나 또는 다수가 데이터가 상기 특정 컴퓨터(12) 내부의 판독 또는 기록 위치를 지시하기 위해 사용될 수 있다. 본 예시에서, 기록될 데이터는 항상 상기 'T'레지스터(44, 상기 데이터 스택(34)의 탑(top))으로부터 나오지만, 데이터는 상기 'T'레지스터(44) 및 자신이 실행될 수 있는 상기 명령영역(30) 중 하나의 내부로 선택적으로 판독될 수 있다. 이는 상기 특정 실시예에서, 데이터 또는 명령어가 상술한 방법으로 통신될 수 있고, 따라서 명령어들이 반드시는 아닐지라도 상기 데이터 버스(16)로부터 직접 실행될 수 있기 때문이다. 게다가, 상기 비트들(50) 중 하나 또는 다수는 상기 포트들(38) 중 어느 것이 판독 또는 기록을 위해 설정될 것인가를 지시하기 위해 사용될 것이다. 상기 후자의 연산은 상기 'A'레지스터(40a), 'B'레지스터(40b), 또는 기타와 같은 레지스터(40)를 지정하기 위한 하나 또는 다수의 비트들을 사용하여 선택적으로 달성된다. 그와 같은 예에 있어서, 상기 지정된 레지스터(40)는 상기 포트들(38) (및, 또한, 메모리, 외부 통신 포트 등과 같은 상기 컴퓨터(12)가 통신을 시도하고 있는 임의의 전위 엔터티) 각각에 해당하는 비트를 지닌 데이터와 함 께 프리로딩(preload) 될 것이다. 예를 들어, 상기 특정 레지스터(40) 내의 4개의 비트들 각각은 상기 상부 포트(38a), 우측 포트(38b), 좌측 포트(38c), 또는 하측 포트(38d)에 각각 대응할 수 있다. 상기 비트 위치들 중 임의의 위치에 '1'이 있는 경우, 통신이 상기 해당 포트(38)를 통해 이루어지도록 설정될 것이다.
바로 뒤따르는 예시에서는, 비록 상기 예시가 임의의 인접 컴퓨터들(12) 사이의 통신에 적용될 수 있을지라도, 컴퓨터(12e)가 컴퓨터(12c)에 기록하기를 시도하는 중인 통신을 가정할 것이다. 기록 명령어가 기록 컴퓨터(12e) 내에서 실행될 때, 상기 선택된 기록 라인(20)(본 예시에서, 컴퓨터들(12e 및 12c) 사이의 상기 기록 라인(20))은 '하이' 상태로 설정된다. 만일 상기 해당 판독 라인(18)이 이미 '하이' 상태이라면, 데이터가 상기 선택된 통신 포트(38)를 통해 상기 선택된 위치로부터 즉시 전송된다. 다른 방법으로, 만일 해당 판독 라인(18)이 이미 '하이' 상태가 아니라면, 컴퓨터(12e)는 해당 판독 라인(18)이 '하이' 상태가 될 때까지 단순히 연산을 멈출 것이다. 판독 또는 기록형 명령어가 있을 경우, 상기 컴퓨터(12a)를 정지시키는 (또는, 보다 정확히는 상기 컴퓨터(12a)의 심화된 연산들을 인에이블 하지 않는) 상기 메커니즘은 본문에서 이전에 언급되었다. 요약하면, 상기 명령어(52)의 'opcode'는 i4 비트(66) 위치에서 '0'을 가지게 될 것이고, 그 결과 상기 'OR' 게이트(60)의 첫 번째 'OR' 게이트 입력(62)은 '로우' 상태이고, 상기 슬롯 시퀀서(42)는 트리거되지 않아 인에이블링 펄스를 생성한다.
판독 또는 기록형 명령어가 완성될 때, 상기 컴퓨터(12e)의 연산이 재개(resume)되는 방법과 관련한 상기 메커니즘은 다음과 같다. 컴퓨터들(12e, 12c) 사이의 상기 판독 라인(18) 및 해당 기록 라인(20) 모두가 '하이' 상태에 있을 경우, 상기 두 개의 라인들(18, 20)은 자신들을 '하이' 상태로 유지하고(hold) 있는 상기 컴퓨터(12)들 각각에 의해 해제될 것이다 (본 예시의 경우, 상기 수신 컴퓨터(12c)가 상기 판독 라인(18)을 '하이' 상태로 유지시키는 동안, 상기 전송 컴퓨터(12e)는 상기 기록 라인(20)을 '하이' 상태로 유지시킬 것이다). 이후, 상기 수신 컴퓨터(12c)는 상기 라인들(18, 20) 둘 다를 '로우' 상태로 '풀링(pull)' 할 것이다. 현행 관습상, 상기 전송 컴퓨터(12e)가 상기 기록 라인(20)을 해제하기 전에, 상기 수신 컴퓨터(12c)는 상기 라인들(18, 20) 둘 다를 '로우' 상태로 풀링하기 위한 시도를 할 수 있다. 그러나, 상기 라인들(18, 20) 모두가 '하이' 상태로 풀링되고 '로우' 상태로 단지 약하게 유지(래칭)되기 때문에, 상기 라인(18 또는 20)이 자신을 '하이' 상태로 래칭하고 있는 상기 컴퓨터(12)에 의해 해제될 때까지, 상기 라인(18) 또는 상기 라인(20)을 풀링하기 위한 임의의 노력이 현실적으로 성공하지 못할 것이다.
데이터 버스(16) 내부의 라인들(18, 20)이 '로우' 상태로 풀링될 때, 이는 '응답(acknowledge)' 조건이다. 상기 컴퓨터들(12e, 12c) 각각은 상기 응답 조건에 들어서자마자, 자신의 내부 응답 라인(72)를 '하이' 상태로 설정한다. 도 5에서 보여지듯이, 상기 응답 라인(72)은 두 번째의 'OR' 게이트 입력(64)을 제공한다. 상기 'OR' 게이트 입력들(62, 64)로의 입력이 상기 'OR' 게이트(60)로부터의 출력이 '하이' 상태가 되도록 할 것이기 때문에, 이는 상기 명령어 워드(48)의 다음 슬롯(54) 내에서의 상기 명령어가 실행될 수 있도록 이전에 서술한 방법으로 상기 슬 롯 시퀀서(42)의 연산을 초기화할 것이다. 상기 응답 라인(72)은 위조 어드레스들이 상기 어드레스 버스에 도달하는 것을 막기 위해, 다음의 명령어(52)가 디코딩될 때까지 '하이' 상태에 머무른다.
상기 실행되고 있는 중인 명령어가 상기 명령어 워드(48)의 상기 슬롯 내의 세 위치에 존재하는 경우, 상기 컴퓨터(12)가 물론 상기 i4 비트(66)가 '0'이 아니라면 다음의 대기중인(awaiting) 18 비트 명령어 워드(48)를 패치(fetch)할 것이다. 현행 관습상, 명령어들을 '프리패칭(prefetching)'하기 위한 장치 및 방법은 상기 패치가 상기 명령어 워드(48) 내의 모든 명령어들(52)에 대한 실행이 끝나기 전에 시작될 수 있도록 포함될 수 있다. 그러나, 이 또한 비동기적인 데이터 통신을 위해 반드시 필요한 것은 아니다.
컴퓨터(12e)가 컴퓨터(12c)로 기록하고 있는 중인 상기 예가 상세히 기술되었다. 상기 진술의 관점에서 이해될 수 있듯이, 상기 연산들은 컴퓨터(12e)가 처음에 컴퓨터(12c)로 기록하기 위해 시도하든지, 또는 컴퓨터(12c)가 처음에 컴퓨터(12e)로부터 판독하기 위해 시도하든지 본질적으로 똑같다. 상기 연산은 컴퓨터들(12e, 12c) 둘 다가 준비될 때까지 완료될 수 없고, 어느 컴퓨터(12e 또는 12c)가 먼저 준비된다 할지라도 상기 첫 번째 컴퓨터(12)는 다른 컴퓨터(12e 또는 12c)가 상기 전송을 마칠 때까지 단순히 '휴면(sleep)' 상태로 들어선다. 상술한 프로세스을 살펴보는 다른 방법으로, 실제적으로, 상기 기록 컴퓨터(12e) 및 상기 수신 컴퓨터(12c)가 각각 상기 기록 및 판독 명령어들을 실행할 때 휴면상태로 들어선다. 그러나, 상기 거래(transaction) 내부로 진입하는 마지막 컴퓨터는 상기 판독 라인(18) 및 상기 기록 라인(20) 모두가 '하이' 상태에 있을 때 거의 순간적으로 다시 각성되는(reawaken) 반면에, 상기 거래를 초기화하기 위한 첫 번째 컴퓨터(12)는 상기 두 번째 컴퓨터(12)가 상기 과정을 종료시킬 준비가 될 때까지 거의 한없이 휴면상태(asleep)에 머무를 수 있다.
장치들 간에 효율적인 비동기적 통신을 인에이블링 하기 위한 중요한 특징은 일부 종류의 응답 신호 또는 조건이라고 알려져 있다. 종래 기술에서는, 장치들 사이의 대부분의 통신이 클럭되었고, 전송 장치가 상기 수신 장치가 상기 데이터를 적절하게 수신했는지에 대해 직접 알 수 있는 방법이 없다. 검사합(checksum) 연산과 같은 방법이 데이터가 정확히 수신되었는지에 대한 확인을 위한 시도로 사용되었을 수도 있지만, 상기 전송 장치는 상기 연산이 완료되었다는 직접적인 지시를 가지고 있지 않다. 여기에 기술되는 바와 같이, 본 방법은 상기 장치들 사이의 비동기적인 통신을 허락하는, 또한 상기 비동기적인 통신이 적어도 실용적이 되도록 하는 필요 응답 조건을 제공한다. 게다가, 상기 응답 조건은 또한 상기 응답 조건이 발생할 때까지 상기 장치들 중 하나 또는 다수가 '휴면상태'에 들어갈 수 있도록(go to sleep) 해준다. 물론, 응답 조건은 상기 컴퓨터들(12) 사이에서(상기 상호접속 데이터 버스(16) 상에서, 또는 개별(separate) 신호 라인 상에서) 전송되고 있는 중인 개별 신호에 의해 상기 컴퓨터들(12) 사이에서 통신될 수 있다. 그러나, 상기 응답을 위한 방법이 상기 통신에 실제적으로 영향을 끼치는 임의의 부가적인 신호, 클럭 사이클, 타이밍 펄스, 또는 상술한 것 이외의 임의의 자원을 필요로 하지 않는다는 점에서 (이와 관련하여) 훨씬 더 경제적이라고 평가될 수 있다.
상기의 것들을 달성하기 위한 절차 및 수단에 대한 상술한 설명의 관점에서, 배경 방법의 예시에 대한 다음의 간략한 서술을 이제 이해할 수 있다.
도 6은 본 발명에 따르는 방법의 일 예를 보여주는 흐름도(flow diagram)이다. '통신 초기화' 연산(76)에 있어서, 하나의 컴퓨터(12)는 자신을 다른 컴퓨터(12)와 통신하도록 하는 명령어(52)를 실행한다. 이는 기록을 위한 시도일 수도 있고, 판독을 위한 시도일 수 있다. 상기 '통신 초기화' 연산(76)과 일반적으로 동시에 일어나는 '첫 번째 라인의 하이 상태로의 설정' 연산(78)에서, 판독 라인(18) 및 기록 라인(20) 둘 중 하나가 (상기 첫 번째 컴퓨터(12)가 판독 또는 기록을 시도하고 있는 중인지의 여부에 따라) '하이' 상태로 설정된다. 상기 '첫 번째 라인의 하이 상태로의 설정' 연산(78)의 일부로써, 상기 컴퓨터(12)는 상술한 바와 같이 연산할 것이다. '두 번째 라인의 하이 상태로의 설정' 연산(80)에서, 상기 두 번째 라인(상기 기록 라인(20) 또는 판독 라인(18))이 상기 두 번째 컴퓨터(12)에 의해 '하이' 상태로 설정된다. '데이터 통신' 연산(82)에서, 데이터(또는 명령어 워드 등등)가 상기 데이터 라인들(22) 상으로 전송되고 수신된다. '라인들의 로우 상태로의 풀링' 연산(84)에서, 상기 판독 라인(18) 및 기록 라인(20)이 해제되고 '로우' 상태로 풀링된다. '계속' 연산(86)에서, 상기 응답 조건이 상기 컴퓨터들(12)이 자신들의 연산을 재개하도록 한다. 본 발명의 예시의 경우, 상기 응답 조건은 응답 신호(88, 도 5)를 야기시키는데, 이 경우, 상기 응답 신호는 상기 응답 라인(72)의 '하이' 조건에 '불과하다.
제 2 배경 예시의 경우, 도 7은 도 1 및 2의 상기 컴퓨터 어레이(10)의 섹 션(100)을 보여주는 상세도(detailed diagram)이다. 그러나, 상기 섹션(100)이 상기 제 1 배경 예시의 기술을 통해 형성된다는 점을 강조하기 위해, 상기 컴퓨터들(노드, 코어, 등등)은 이제 'CPUs(12)'로 언급된다.
도 7에서 보여지는 바와 같이, 중앙 CPU(12e)는 판독 라인(18), 기록 라인(20), 및 18 개의 데이터 라인들(22)을 포함하는 각 데이터 버스들(16)을 통하여 주변 CPUs(12a, 12b, 12c, 12d)와 연결된다. 그러나, CPU(12) 내에서, 상기 버스들(16)은 내부적으로 연결되고, 하나의 포트(38, 도 3) 이상이 동시에 판독될 경우 정의되지 않은 하드웨어 상태들을 생성한다. 이러한 조건은 그와 같은 상황들로부터의 회복을 허락하기 위해 소프트웨어적 설계 관점에서 설명되어야 한다.
상기 CPU(12e)는 자신의 메모리(102)(예를 들어, 도 3에서 보여진 상기 RAM(24) 및 ROM(26))를 구비하는데, 이는 자신의 소프트웨어(104)를 포함할 수 있다. 상기 CPU(12e)는 또한 연산을 위한 조작 포인터들(manipulation pointers)을 포함하는 레지스터들(40)의 집합을 지닌다. 이는 데이터 연산을 위한 'A'레지스터(40a) 및 'B'레지스터(40b), 프로그램 포인터를 저장하기(hold) 위한 'P'레지스터(40c), 및 I/O 제어 및 상태(IOCS) 레지스터(40d, 도 3)를 포함한다.
도 8a 내지 8f는 도 7의 상기 섹션(100)의 상기 CPUs(12) 내에서 사용가능한 포트 어드레스 디코딩에 대한 개요를 보여주는 테이블도(table diagram)이다. 도 8a는 레지스터(40) 내부의 어드레스 비트(108)가 '1'로 설정되었을 경우, 상기 레지스터(40)가 보통 하나 또는 다수의 상기 포트들(38)을 어드레싱한다는 것을 보여준다. 역으로, 도면에 도시되진 않았지만, 상기 어드레스 비트(108)가 '0'으로 설 정되었을 경우, 상기 레지스터(40)가 상기 메모리(102) 내의 위치를 어드레싱한다. 상기 어드레스 비트(108)가 '하이' 상태로 설정될 경우, 다음의 8 비트들은 선택 비트들(110) 역할을 한 후, 어느 특정 포트(38) 또는 포트들(38a)이 선택되었는지 및 그것들이 판독 또는 기록될 지에 대한 여부를 구체화한다. 따라서, CPU(12e) 내의 레지스터들(40)에 대해서, '우측'은 오른쪽 또는 동쪽의 주변(neighboring) CPU(12a)를 지칭하고, '하측'은 아래쪽 또는 남쪽 주변 CPU(12b)를 지칭하고, '좌측'은 왼쪽 또는 서쪽 주변 CPU(12c)를 지칭하고, '상측'은 위쪽 또는 북쪽 주변 CPU(12d)를 지칭한다. 'RR'의 액션을 위해 설정된 선택 비트(110)는 보류중인(pending) 판독 요청이고, 'WR'의 액션을 위해 설정된 선택 비트(110)는 보류중인 기록 요청이다.
일관성을 유지하고 혼란을 최소화하기 위해, 하이 상태의 값 또는 '1'은 참 조건(true condition)을 지칭하고, 로우 상태의 값 또는 '0'은 거짓 조건(false condition)을 지칭하는 일반적인 규칙을 따른다는 것을 주지하라. 그러나, 이는 필수 사항은 아니고, 다른 규칙이 사용될 수 있다. 예를 들어, 상기 CPUs(12)의 일부 제시된 실시예들은 상기 RR 비트 위치들 내부의 참값을 위한 '0'을 사용하고, 상기 WR 비트 위치들 내부의 참값을 위한 '1'을 사용한다.
상술한 포트 어드레스 디코딩 접근법은 또한 상기 하이 어드레스 비트(108)가 '1'로 설정되도록 하고, 상기 선택 비트들(110) 중 어느 것도 설정되지 않도록 한다. 이는 상기 CPU(12) 내의 다른 엘리먼트를 어드레싱하기 위해 유익하게 사용될 수 있다. 예를 들어, 상기 IOCS 레지스터(40d)는 이와 같은 방법으로 어드레싱 될 수 있다.
상기 CPU들(12)의 본 실시예들에서, 상기 IOCS 레지스터(40d)는 상기 포트들(38)의 상기 판독 라인들(18) 및 기록 라인들(20)의 현재 상태를 보고하기 위해동일 포트 어드레스 배열(arrangement)을 사용한다. 이는 상기 IOCS 레지스터(40d) 내의 각 비트들을 유용하게 하여 입출력 연산들의 상태를 프로그래밍적으로 테스트할 수 있도록 한다. 예를 들어, CPU(12b)가 상기 공유된 기록 라인(20)을 '하이' 상태로 아직 설정하지 않았을 경우 CPU(12e)는 휴면상태로 들어가게 되는, CPU(12e)에 의한 CPU(12b)로부터의 비동기적인 판독 실행 대신, 상기 CPU(12e)는 상기 IOCS 레지스터(40d) 내의 비트(13)의 상태(DOWN/WR)를 테스트할 수 있고 (CPU(12b)를 CPU(12e)와 연결시키는 상기 기록 라인(20)의 상태를 반영하면서), CPU(12b)로부터의 상기 준비된 데이터의 즉각적인 판독을 위한 분기(branch) 및 다른 명령어를 즉각 실행하라는 분기(branch) 중 하나를 선택할 수 있다.
도 8b는 간단한 첫 번째 예를 보여준다. 여기서, 우측/RR을 위한 상기 선택 비트(110)가 설정되어, 상기 포트(38b)가 판독될 예정이라는 것을 지시한다. 도 8c는 간단한 두 번째 예를 보여준다. 여기서, 우측/WR을 위한 상기 선택 비트(110)가 설정되어, 상기 포트(38b)가 기록될 예정이라는 것을 지시한다.
종래의 기술에 따르면, 오직 하나의 선택 비트(110)만이 인에이블되어 임의의 주어진 시간에 단일 포트(38) 및 단일 동작(판독 또는 기록)을 구체화한다. 다중의 하이 상태 비트들이 이후 에러 상태(error condition)로써 디코딩된다. 그러나, 여기에 제시된 새로운 접근법은 이러한 규칙을 따르지 않는다. 오히려, 상기 포트들(38)에 대한 상기 선택 비트들(110) 중 하나 이상이 동시에 유리하게 인에이블되어, 다중의 판독 및/또는 기록 연산들을 요청한다. 이와 같은 경우, 상기 데이터는 상기 새로운 데이터가 제시된다는 것을 지시하는 신호를 포함하여, 상기 모든 포트들(38) 상에 제시된다.
도 8d-f는 다중 판독 및/또는 기록 연산들의 일부 예시들을 보여준다. 도 8d는 CPU(12e) 내의 레지스터(40)가 CPU(12b)로부터의 판독 및 CPU(12a)로의 기록을 동시에 구체화할 수 있는 방법을 보여준다. 도 8e는 CPU(12b)로부터의 판독 및 CPU(12c)로의 기록을 동시에 구체화할 수 있는 방법을 보여준다. 그리고, 도 8f는 CPU(12b)로부터의 판독 및 CPU(12a)와 CPU(12b) 중 하나로의 기록을 구체화하는 방법을 보여준다. [예고(foreshadowing)되는 바와 같이, 도 8d-f를 데이터 전송로가 화살표 132 및 134로 나타난 도 9와 비교할 수 있다].
실제, 다중 기록 연산 동안, 상기 CPU(12e)는 상기 데이터를 제시하고, 자신이 상기 타겟 CPU들(12a, 12b, 12c 또는 12d) 중 하나 또는 다수와 공유하는 상기 버스들(16) 상에서 상기 기록 라인들(20)을 '하이' 상태로 설정할 것이다. 상기 소스 CPU(12e)는 이후 자신이 상기 데이터가 판독되었음을 지시하는 신호를 수신할 때까지 기다릴 것이다. 추측상, 일부 최종 지점에서, 상기 타겟 CPU들(12a, 12b, 12c 또는 12d) 중 하나 또는 다수가 CPU(12e)와 공유하는 상기 버스(16) 상에서 자신들의 각 판독 라인(18)을 '하이'상태로 설정한다. 타겟 CPU(12)는 이후, 상기 데이터를 형식적으로 판독하고, CPU(12e)와 공유하는 상기 버스(16) 상에서 상기 판독 라인(18) 및 기록 라인(20) 둘 다를 '로우'상태로 풀링하여, CPU(12e)로부터 상 기 데이터의 수신을 확인(acknowledge)한다.
도 9는 도 7 및 8d-f 에서 보여진 상기 다중 기록 접근(multiple-write approach) 방법이 하나의 데이터 워드(120) 안에 명령어를 4개까지 포함할 수 있는 능력과 특수하게 결합하는 방법을 보여주는 개략적인 블록도이다. 각 명령어는 전형적으로 5비트이고, 따라서 18 비트 폭을 지닌 상기 데이터 워드(120)는 대략 3개의 명령어들을 저장한다. 이후, 마지막 명령어는 겨우 3비트가 될 수 있지만 그것은 많은 명령어들에 있어서 충분하다. 이에 대한 주목할 만한 유리한 측면은 매우 효율적인 데이터 전송 메커니즘들을 사용하도록 허락한다는 점이다.
하기에서, @는 패치, !는 저장, 그리고 'p'는 상기 '프로그램 카운터' 또는 'P' 레지스터(40c)를 지칭한다. @p+ 및 !p+ 에서의 상기 '+'는, 만일 다른 레지스터 또는 포트를 어드레싱할 경우 상기 레지스터 컨텐츠가 증가하지 않는다는 것을 제외하고, 실행 후 상기 레지스터 내에서의 메모리 어드레스에 대한 증가를 의미한다. 따라서, 상기 후자의 경우들에 있어서의 상기 '+'는 상기 명령어들을 정상의 @p 및 !p 명령어들이라기 보다는 '특별한(special)' 명령어로 차별화한다.
도 9는 데이터를 하나의 CPU(12)로부터 다른 CPU로 데이터를 전송하기 위한 단일 명령어 시퀀스 프로그램이 상기 데이터를 판독 및 기록하기 위해 사용되는 상기 P레지스터(40c)와 함께 단일 18 비트 데이터 워드(120) 내에 포함될 수 있는 방법을 보여주는 예이다. 여기서, "@p+"는 '슬롯 0'(54a) 내에서 로딩되는 명령어(122)이다. 이는 상기 'P' 레지스터(40c) 내에서 특정화된 현재의 어드레스로부터 이후의 18 비트 데이터 워드(120)를 패치하고, 상기 데이터 워드(120)를 상기 데이터 스택(34) 상으로 푸시(push)하는 리터럴(literal) 연산이다. [그리고, 일반적으로 상기 어드레스가 레지스터 또는 포트용일 경우 이것이 행해지지 않는다는 것을 제외하고, 상기 'P'레지스터(40c) 내의 상기 어드레스를 증가시킨다. 여기서 상기 'P'레지스터(40c) 내부의 상기 하이 어드레스 비트(108)는 포트들이 현재 특정되고 있는 중이라는 것을 지시해 줄 것이다.] "."는 '슬롯 1'(54b) 내에서 로딩되는 명령어(124)이다. 이는 아무것도 하지 않는 단순한 무연산 (no operation)이다. 다음, "!p+"는 '슬롯 2'(54c) 내에 로딩되는 명령어(126)이다. 이는 상기 탑 데이터 워드(120)를 상기 데이터 스택(34)으로부터 인출(pop)하여, 상기 18 비트 데이터 워드(120)를 상기 'P'레지스터(40c) 내부에서 특정되는 현재의 어드레스로 기록한다. 상기 'P'레지스터(40c) 내에서 특정되는 상기 어드레스가 변화되지 않았을 경우, 그것은 다른 주변 CPU들이 접근될 수 있도록 함수적으로 야기시킨다. 마지막으로, "unext"는 '슬롯 3'(54d) 내에서 로딩되는 명령어(128)이다. 이는 상기 리턴 스택(28)의 상부(top)가 '0'인지의 여부에 따라 다르게 연산하는 마이크로 넥스트(micro-next) 연산이다. 상기 리턴 스택(28)이 '0'이 아닐 경우, 상기 마이크로 넥스트는 상기 리턴 스택(28)이 감소하도록 하고, 실행을 위해 현재 저장된(cached) 데이터 워드(120)의 '슬롯 0'(54a) 내의 명령어에서 지속되도록 한다 (즉, 본 예에서는 다시 명령어 워드(122)에서이다). 특히, 여기서 상기 마이크로 넥스트를 사용하는 것이 패치될(to be fetched) 새로운 데이터 워드(120)를 요구하지 않는다는 것을 주지하라. 대조적으로, 상기 리턴 스택(28)이 '0'일 경우, 상기 마이크로 넥스트는 이후의 데이터 워드(120)를 상기 'P'레지스터(40c) 내에서 특정 된 현재의 어드레스로부터 패치하고, 상기 새로운 데이터 워드(120)의 상기 '슬롯 0'(54a) 내부의 상기 명령어에서 실행이 시작되도록 한다.
이러한 특별 예시를 위해, 상기 'P'레지스터(40c)는 '101100000b'와 함께 로딩될 수 있고, 상기 리턴 스택(28)의 상부(top)는 101b(십진수 5: 5 decimal)를 포함할 수 있다. 상기 'P'레지스터(40c)는 '101100000b'(예를 들어, 도 8a, 8b 참조)를 포함하기 때문에, 여기서 명령어(122) 내의 상기 "@p+"는 CPU(12e)가 CPU(12b)로부터 이후의 데이터 워드(120)를 판독하여, 상기 데이터 워드(120)를 상기 데이터 스택(34) 상으로 푸시하도록 지시한다. 그러나, 상기 'P'레지스터(40c) 내의 상기 어드레스는 포트용이기 때문에 증가하지 않는다. 여기서, 명령어(124) 내의 상기 "." 무연산은 현재 데이터 워드(120)의 18 비트까지를 채울 수 있는 필러(filler)이다. 상기 'P'레지스터(40c)는 여전히 '101100000b'를 포함하기 때문에, 여기서 명령어(126) 내부의 상기 '!p+'는 CPU(12e)가 상기 탑 데이터 워드(120)(명령어 워드(122)에 의해 데이터 스택에 막 입력된 데이터 워드)를 상기 데이터 스택(34)으로부터 인출(pop)하여, 상기 데이터 워드(120)를 (포트 38b를 통하여) CPU(12a)에 기록하도록 지시한다. 다시, 상기 'P'레지스터(40c) 내부의 상기 어드레스는 포트용이기 때문에 증가하지 않는다. 이후, 명령어 워드(128) 내부의 상기 'unext'는 상기 리턴 스택(28)이 100b(십진수 4)로 감소하도록 하고, 실행을 위해 명령어(122)에서 지속하도록 한다. 그리고 명령어들(122, 124, 126, 128) 내부의 상기 단일 워드 프로그램은, 상기 리턴 스택(28)을 '011b, 010b, 001b'로 감소시켜 결국에는 000b(십진수 0)로 감소시키고, 이후의 데이터 워드(120)를 CPU(12b)로부터 패치하고, 상기 새로운 데이터 워드(120)의 '슬롯 0'(54a) 내부의 상기 명령어를 실행하는 방법으로 지속된다(continues).
요약하면, 본 예에서의 상기 'P'레지스터(40c)는 소스(source) 및 목적(destination) 장치 (포트들 38d, 38b 및 CPUs 12b,12a) 둘 다를 특정하는(specify) 하나의 어드레스 값을 가지고 로딩되고, 상기 리턴 스택(28)은 반복 카운트(5)를 가지고 로딩되었다. 이후, 다섯 개의 데이터 워드들(120)이 CPU(12e)를 통해 효율적으로 전송되고(파이프라이닝 되고), 이후 CPU(12b)에 의해 또한 제공된 6번째 데이터 워드(120)의 '슬롯 0'(54a) 내의 상기 명령어에서 지속된다.
상기 간단하지만 격조 높은(elegant) 방법을 사용함으로써 이외의 다양한 장점들을 얻을 수 있다. 예를 들어, 상기 'A'레지스터(40a) 및 'B'레지스터(40b)는 사용될 필요가 없고, 따라서 다른 데이터 목적을 위해 CPU(12e)에 의해 사용될 수 있다. 이에 수반하여, 데이터 전송을 수행시 포인터 스와핑(pointer swapping(trashing))이 또한 제거될 수 있다.
예를 들어, 데이터 파이프라이닝을 위한 종래의 소프트웨어 루틴(routine)은 일부 지점에서(at some point) 입력 포트로부터 데이터를 읽고, 다른 지점에서 출력 포트에 데이터를 기록한다. 이를 위해, 각 입력 및 출력 포트들로의 포인터들 이외에도 메모리 내부로의 적어도 하나의 포인터가 필요할 것이다. 상기 포트들이 서로 다른 어드레스들을 구비하고 있기 때문에, 여기서 프로세싱하기 위한 가장 직접적인 방법으로, 상기 입력 포트 어드레스를 리터럴(literal) 명령어를 가지고 스택 상에 로딩시키고, 상기 어드레스를 어드레싱 레지스터 내부에 저장(put)하고, 상기 입력 포트로부터 판독을 수행하고, 이후 상기 출력 포트의 상기 어드레스를 리터럴(literal) 명령어를 가지고 상기 스택 상에 로딩시키고, 상기 어드레스를 어드레싱 레지스터 내부에 저장하고, 상기 출력 포트로 기록을 실행하는 방법을 들 수 있다.
본 접근 방법에서의 상기 두 개의 리터럴 로드들(literal loads)은 각각 4개의 주기(cycle)를 지니며, 상기 두 개의 레지스터 집합 명령어들은 각각 1개의 주기를 지닐 것이다. 즉, 상기 루프 내에서 상기 입력 및 출력 포인터들을 설정하기 위해 소비되는 총 주기 수는 10개이다. 게다가, 상기 루프 내에서 메모리의 세 개의 워드들이 요구되기 때문에, 그와 같은 포인터 스와핑이 필요할 경우, 별도의 벌칙(penalty)이 있고, 이로 인해 단일 18 비트 워드 안에 포함된 루프의 사용을 허락하지 않는다. 따라서, 본 예에서의 명령어 루프는 메모리 접근을 갖는 분기(branch)를 요구할 것이고, 이는 심화된 오버헤드의 4개의 주기를 더하고, 전체 포인터 스와프 및 루프 오버헤드를 적어도 14개의 주기로 만든다.
그러나, 대조적으로, 다중 포트 어드레싱이 상기 CPU(12) 내에서 가능하기 때문에, 상기 입력 포트(38) 및 출력 포트(38) 둘 다를 선택하는 상기 어드레스는 입출력 루프 밖에서 로딩될 수 있고, 입력 및 출력용으로 사용될 수 있다. 본 접근 방법은, 오직 하나의 주변 장치로부터의 데이터가 다중 포트 판독 동안 판독되고, 오직 하나의 주변장치가 다중 포트 기록 동안 판독하기 때문에 적용된다. 따라서, 일반적으로 상기 입력 및 출력 포인터들을 설정하는 데 소비된 루프 안의 14 주기 오버헤드는 필요하지 않다. 상기 루프는 판독 명령어 및 기록 명령어를 여전히 지 니고 있지만, 상기 판독 명령어 및 기록 명령어 둘 다는 동일 포인터를 사용할 수 있다. 따라서 상기 루프는 변할 필요가 없다.
이것은 상기 다중 포트 기록 방법의 사용이 일부 형태의 입출력 루프들의 오버헤드를 14주기 만큼(또는 이상) 감소시킬 수 있음을 의미한다. 본 발명가들의 관측에 따르면, 최상의 경우에 있어서, 이는 CPU(12)의 프로세싱 루프 내에서 23주기를 6주기로 감소시킬 수 있도록 한다. 한 주기가 대략 1 나노초를 차지하는 상황에서, 이는 효과적인 프로세서 속도에서 43MHz 에서 167MHz 로의 증가를 의미하고, 이는 상당한 발전을 의미한다.
간략히 계속 설명하여, 도 8f와 도 9는 다중 기록들이 심지어 단일 워드 프로그램들을 가지고 어떻게 실행될 수 있는가를 보여준다. 여기서, 상기 CPU(12e)는 CPU(12b)로부터 판독하여, CPU(12a) 또는 CPU(12c)에 기록한다. 실제로, 여기서의 상기 파이프라이닝은 첫 번째 유효한 CPU(12a) 또는 CPU(12c)이다. 이는 상기 CPU들(12) 내에서 가능한 상기 부가된 융통성(added flexibility)을 보여주고, 본 발명에 따르는 CPU들(12)이 지금까지 너무 어렵거나 비실용적이라고 여겨진 방법을 사용하여 유용해지는 법을 보여주는 단지 하나의 가능한 예시이다.
요약하면, 상기 CPU들(12)은 판독 및 포트들(38)로의 점핑(jumping)을 다루어야 한다. 다중 포트 어드레스로부터의 판독, 또는 다중 포트 어드레스로의 점핑에 있어서, 데이터 또는 명령어가 얻어지는 'WHICH' 포트(38)는 탐색(find out)을 위해 시행되고 있는 중인 명백한 코드 없이 알려지지 않는다. (가장 빠른 방법은 두 개의 CPU들(12)에 대한 동일한 상기 포트들(38)에 의존한다.) 일반적으로, 다른 데이터 또는 코드가 다른 포트들로부터 올 수 있기 때문에, 이는 피해야 할 문제라고 간주되어 왔다. 그러나, 가정된 협력 환경(cooperative environment postulated)에서, 본 발명가들은 모든 것을 이익으로 전환하는 방법에 대한 모색을 해왔다. 다음은 그와 같은 경우이다.
만일, CPU(12)가 다중 포트 어드레스로부터 실행을 하고, 상기 어드레싱된 모든 주변 CPU들(12)이 공동으로 기록하고 있는 중이라면(예를 들어, 동기화), 서로 다른 CPU들(12)이 상기 리터럴 데이터를 제공하는 동안, 하나의 주변 CPU(12)가 상기 명령어 스트림을 제공할 수 있다. 상기 리터럴 패치 옵코드(opcode: @p+)는 상기 'P'레지스터 (40c) 내부의, 서로 다른 주변 CPU들(12)에 의해 선택적으로 만족될 수 있는 (모든 리터럴이 이를 행할 필요가 있는 것은 아니다) 상기 다중 포트 어드레스로부터 판독을 야기시킨다. 이는 상기 주변 CPU들(12) 사이의 광범위의 '협력(cooperation)'을 요구할 뿐이다.
그러나, 하나의 이웃 CPU(12)가 판독하고 하나의 CPU(12)가 기록하고 있는 중인 파이프라이닝 다중 포트 사용에 있어서, 동일 다중 포트 어드레스로의 판독 및 기록은 문제점들을 야기하지 않는다. 상기 다중 포트 어드레스로의 점핑 및 상기 리터럴 저장 옵코드(!p+)에 대한 실행은 상기 'P'레지스터(40c)가 100% 안전하게 두 개의 포트들(38)을 어드레싱하도록 한다. 이는 로컬 용도인(for local use) 상기 'A'레지스터(40a)와 'B'레지스터(40b) 둘 다를 자유롭게 한다.
또한, 상기 CPU들(12)의 그 밖의 최적화는 데이터(실제 데이터 혹은 데이터로서 전달되고 있는 명령들)가 전파되는 경우에 발생할 수 있다. 도 10 내지 12는 일 예로써 본 발명을 설명하고 있다.
도 10은 상기와 같은 다중 판독/다중 기록 시스템에서 역전파를 방지할 수 있는(to ensure that propagation does not inverse) 프로세싱 규칙(processing rules)(1000)을 도시한 표이다. 규칙 1은 직선적인, (straightforward)인 것으로, 각 CPU는 자신의 소스로서 이전의 CPU를 '보아야(see)'한다는 것이다. 규칙 2 및 3은 약간 미세한 부분이 있지만, 액체(liquid)를 운반하는 파이프라인과 CPU들의 파이프라인들을 비교함으로써 일반적으로 이해될 수 있다.
규칙 2는 CPU들의 파이프라인에 "병목(bottleneck)" 현상이 발생하는 것을 방지한다. 명확하게는, 상기 CPU들의 파이프라인이 자신에게 제공중인 데이터를 따라잡을 수 없을 경우, 상기 파이프라인은 실시간으로 동작할 수 없게 될 것이다. 이에 따라, 각 CPU는 이전 CPU가 기록할 준비가 되기 전 혹은 바로 그 순간에 최적으로 판독할 준비가 되어야만 한다. 물론, (도 12a-b에서 도시하는 바와 같이) 이것이 항상 가능한 것은 아니다. 그러나, 상기 CPU들을 프로그래밍할 때 이를 목표로 염두해 두는 것이 도움이 된다. 도 11은 이를 도시한 블록도로서 데이터들이 연결된 일련의 CPU들(1102, 1104, 1106, 1108)을 통해 왼쪽에서 오른쪽으로 순차적으로 전달될 때 일련의 시간별로 최적화된 파이프라인(1100)의 상태를 도시하고 있다. 시간(t)에서 CPU(1102)는 CPU(1104)에 기록하며, 이 때에 CPU들(1104, 1106, 1108)은 모두 판독중이다. 시간(t+1)에서, CPU(1104)는 데이터를 갖게 되어 상기 데이터를 CPU(1106)에 기록하며, 이 때에 CPU들(1106, 1108)은 판독중이다. 시간(t+2)에서, CPU(1106)는 데이터를 갖게 되어 상기 데이터를 상기 CPU(1108)에 기 록하며, 이 때에 CPU(1108)는 판독중이다.
규칙 3은 CPU들의 파이프라인이 "브레이킹(제동, braking)"되는 것을 방지한다(여기서, 액체 운반 파이프라인에 대한 유추적 설명이 다소 미흡해진다). 도 12a 및 12b는 규칙 3이 지켜지지 않다가 이후 지켜지는 경우(여기서 시간은 좌에서 우로 진행한다), 도 11의 파이프라인(1100)에서의 초기 데이터 흐름을 스타일리쉬하게(stylistically) 도시한 개략도이다.
도 12a는 종래의 판독(R), 처리(P) 및 기록(W) 순의 연산이 적용되는 경우에 상기 파이프라인(1100)을 통한 데이터 흐름을 도시하고 있다. 상기 모든 연산들은 실행을 위한 최소 시간(minimum time)을 갖는다(여기서, 간략한 설명을 위하여 동일하게 설정된다). 그러나, 상기 판독(R) 및 기록(W) 연산들은 해당 기록(W) 혹은 판독(R)이 발생하기까지 대기하는 동안 상기 최소시간 이상의 추가 시간이 요구될 수 있다. 처리해야 할 태스크(tasks at hand)에 따라, 상기 처리(P) 연산을 위한 시간은 특히 비동기식 CPU들 내에서 상당히 변경될 것이다. 따라서, 실제 적용에 있어서, 상기 처리(P) 연산은 일반적으로 여기에 기술되는 것보다 더 긴 시간이 요구될 것이며, 도 12a에서 보여준 바와 같은 문제들이 보다 더 심각해질 수도 있다.
도 12a에는 인버스(inverse)(1112)가 도시되어 있다. 상기 기록연산(1114)이 시작될 때, 두 개의 판독연산들(1116, 1118)은 대기하게 되며 CPU(1108)는 CPU(1106)에 기록한다. 또한, 이는 상기 파이프라인(1100)에서 더욱 심각해질 수 있다. 예를 들어, CPU(1110)는 CPU(1108)가 시작될 때 처리 혹은 기록으로 바빠질 수 있으며, 단지 CPU(1106)만이 판독을 시도할 수도 있다. 상기 인버스(1112)는 거 의 확실하게 상기 파이프라인(1100)의 프로그래머가 원하거나 기대하는 것이 아니며, 이는 산출의 정확성을 떨어뜨리거나 상기 파이프라인(1100)이 수행중인 어플리케이션을 실패하게 만들 수도 있다.
또한, 도 12a는 상기 인버스(1112)를 CPU(1110)가 판독하는데 걸리는 시간(즉, 처리가 시작될 데이터를 기다리는데 걸리는 시간)에 실질적으로 추가하는 방법을 도시하고 있다. 그러나, 이러한 문제의 경우, 도 12a와 도 12b의 비교를 통해 보여지는 바와 같이, 도 12a의 파이프라인(1100) 전체에 걸친 타이밍은 다른 측면들에서도 마찬가지로 부최적(sub-optimal)일 수 있다.
도 12b는 판독(R), 기록(W) 및 처리(P) 순의 연산이 적용되는 경우에 상기 파이프라인(1100)을 통한 데이터 흐름을 도시하고 있다. 도시된 바와 같이, 인버스는 존재하지 않으며 CPU들(1102, 1104, 1106, 1108, 1110) 모두 가능한 한 빠른 시간내에 처리가 시작될 데이터를 수신한다.
도 12b에 도시된 접합점들(junctions)(1120)은 상기 파이프라인(1100)의 유용한 추가적인 특징을 도시하고 있다 (이러한 접합들은 분기(branch) 연산들과 혼동될 수 있다). CPU에서의 판독(R) 및 기록(W) 연산 이후에, CPU(1102)를 예로 들어 보면, 방금 CPU(1104)에 기록된 데이터는 CPU(1102)로부터 반드시 없앨 필요는 없다. 따라서, 상기 데이터는 이를 사용하여 처리해야 할 CPU(1102)에서의 다음 처리(P) 연산을 위하여 이용될 수 있다. 이는 상기 CPU들을 동일한 값을 가지고 초기화시키는 데에(e.g., 저장 위치를 0에 맞추거나 카운터들을 설정하는데) 유용하다. 또한, 이를 통해 알고리즘들의 일부 클래스들이 유용해질 수 있다. 단일 데이터 샘 플을 다수의 CPU들에게 제공한 후 각각의 CPU에서 서로 다른 계수값들에 대하여 프로세싱하는 알고리즘을 예로 들 수 있다.
파이프라인의 모든 CPU들이 데이터를 갖게 될 때까지 각각의 CPU들(1102, 1104, 1106, 1108, 1110)은 번갈아가며 초기 판독(R) 및 기록(W) 및 상기 처리(P)로서의 단일 무연산 명령어(single nop instruction)를 이용하여 서로 다른 제 1 데이터 값들을 제공받을 수 있게 된다. 이를 통해서, 이후 상기 CPU들은 서로 병렬로 실제 프로세싱을 수행하게 된다.
본 발명의 값이나 범위를 변경하지 않으면서 본 발명의 실시예들에 다양한 추가적인 변경예들을 만들 수 있다. 예를 들어, 본 발명은 여기에서 판독 명령어 및 기록 명령어에 관하여 기술하였지만, 실제 실행에 있어서는, 하나 이상의 판독 타입 명령어들 및/또는 하나 이상의 기록 타입 명령어들이 있을 수 있다. 일 예로, 상기 컴퓨터들(12)에 대한 일 실시예에서, 레지스터를 증가시키는 기록 명령어 및 증가시키지 않는 다른 기록 명령어가 있다. 마찬가지로, 이전에 논의된 바와 같이, 기록 명령어들은 어떤 레지스터(40)가 통신 포트들(38) 등을 선택하는데 이용되는지에 따라 변경될 수 있다. 또한, 상기 컴퓨터들(12)의 설계자에 의해 대안적(alternative) 판독 행위들에 대한 유용한 선택이라고 여겨지는 변형예들에 따라서만, 많은 서로 다른 판독 명령어들이 있을 수 있다.
마찬가지로, 단일 다이(14) 상(on)의 어레이(10)에서의 컴퓨터들(12) 간의 통신과 관련하여 본 발명의 실시예들을 설명하였지만, 동일한 원리 및 방법을 사용하거나 이들을 수정한 후 사용하여 다른 장치간 통신들, 예를 들면, 컴퓨터(12)와 전용 메모리 사이 혹은 (입력/출력 포트 등을 통한) 어레지(10) 내의 컴퓨터(12)와 외부 장치 사이의 통신을 달성할 수 있다. 실제로, 일부 어플리케이션에서는 어레이들의 어레이들을 필요로 할 수 있을 것으로 예상되며, 현재 설명되고 있는 장치간 통신방법을 상기 어레이들의 어레이들 간의 통신에 적용할 수 있다.
본 발명의 컴퓨터 어레이(10)와 컴퓨터(12) 및 규칙들(1000)에 대한 특정 예들이 논의되었지만, 아직 계획된 적이 없는 많은 어플리케이션들이 있을 것으로 예상된다. 실제로, 본 발명의 장점들 중 하나는 본 발명의 방법 및 장치가 많은 다양한 이용에 적용될 수 있다.
본 발명은 또한 일련의 컴퓨터들에서 구동될 경우 상기 일련의 컴퓨터들이 여기서 설명한 방법들을 구현할 수 있도록 하는 컴퓨터 프로그램을 제공하는데 있다. 상기 프로그램은 캐리어상에 있을 수 있으며, 상기 캐리어는 신호일 수도 있고 혹은 저장부(store)일 수 있다. 상기 저장부는 다른 예시들 중에서 레코딩 매체이거나 메모리 장치일 수 있다.
상기한 모든 것들은 본 발명의 가능한 실시예들의 예시의 일부로서, 당업자들은 본 발명의 정신 및 범위를 벗어나지 않는 한 많은 다른 변형 및 대안들이 가능하다는 것을 쉽게 이해할 것이다. 따라서, 본 발명은 한정되지 않을 것이며 첨부된 특허청구범위는 본 발명의 전체적인 범위를 커버하는 것으로 해석되어야 할 것이다.
본 발명의 실시예들의 목적 및 특징들은 첨부된 도면과 함께 이하 상세 설명으로부터 명확해질 것이다.
도 1은 본 발명에 따른 컴퓨터 어레이를 도시한 개략도이다.
도 2는 도 1의 컴퓨터들의 서브세트(subset) 및 도 1의 상호연결 데이터 버스들(interconnecting data buses)의 보다 상세한 측면(detailed view)을 도시한 상세도이다.
도 3은 도 1 및 2의 컴퓨터들 중 하나의 일반적인 레이아웃(layout)을 도시한 블록도이다.
도 4는 도 1 및 2의 컴퓨터들에서 사용가능한 명령어 워드(instruction word)에 대한 도식 대표(diagrammatic representation)이다.
도 5는 도 3의 슬롯 시퀀서(slot sequencer)의 개략적 대표도이다.
도 6은 본 발명에 따른 방법의 일 예를 도시한 흐름도이다.
도 7은 본 발명에 따른 일 실시예를 논의하는데 이용되는 도 1 및 2에서의 컴퓨터 어레이의 섹션을 도시한 상세도이다.
도 8a 내지 8f는 도 1의 섹션 내부의 컴퓨터에서 이용가능한 포트 어드레스 디코딩에 대한 개요를 도시한 테이블도(table diagram)이다.
도 9는 도 7 및 도 8d-8f에 도시된 다중 기록 접근방식(multiple-write approach)이 단일 명령어 워드에 다수의 명령어들을 포함시키는 능력과 특수하게 결합될 수 있는 방법을 도시한 개략적인 블록도이다.
도 10은 상기와 같은 다중 판독/다중 기록 시스템에서 역전파를 방지할 수 있는(to ensure that propagation does not inverse) 프로세싱 규칙(processing rules)을 도시한 테이블이다.
도 11은 데이터가 접속된 일련의 CPU들을 통해 좌(left)에서 우(right)로 연속적으로 전달될 경우 일련의 시간별로 최적화된 파이프라인의 상태를 도시한 블록도이다.
도 12a 및 12b는 도 11의 파이프라인에서의 초기 데이터 흐름을 문체적으로(stylistically) 도시한 개략도로, 도 12a는 규칙 3이 지켜지지 않았을 경우에 발생하는 인버싱을 도시하고, 도 12b는 규칙 3이 지켜진 경우 인버싱 발생 없이 상기 파이프라인을 통한 데이터의 흐름을 도시하고 있다.
상기 도면들 내에서, 동일 또는 유사 엘리먼트들 또는 단계들을 지칭하기 위해 유사 참조번호들이 사용된다.

Claims (15)

  1. 일련의 컴퓨터들 내에서 데이터를 처리하는 방법에 있어서, 상기 일련의 컴퓨터들은 제 1 컴퓨터 및 마지막 컴퓨터를 포함하며, 상기 제 1 컴퓨터를 제외한 각각의 컴퓨터들은 이전 컴퓨터가 있으며, 상기 마지막 컴퓨터를 제외한 각각의 컴퓨터들은 후속 컴퓨터가 있으며, 상기 처리는 현재 컴퓨터로 보여지는 상기 각각의 컴퓨터들에서:
    (a) 상기 현재 컴퓨터를 이용하여 새로운 데이터를 판독하는 단계와;
    (b) 상기 (a) 단계 이후, 상기 현재 컴퓨터를 이용하여 오래된 데이터를 기록하는 단계와;
    (c) 상기 (b) 단계 이후, 상기 현재 컴퓨터 내의 상기 새로운 데이터를 처리하여 상기 오래된 데이터를 생성하는 단계와;
    (d) 상기 (c) 단계 이후, 상기 현재 컴퓨터가 상기 마지막 컴퓨터가 아닌 경우, 상기 현재 컴퓨터에 상기 오래된 데이터를 유지시키는 단계를 포함하는 것을 특징으로 하는 일련의 컴퓨터들 내에서의 데이터 처리 방법.
  2. 제 1 항에 있어서,상기 (a) 단계는,
    상기 이전 컴퓨터로부터의 오래된 데이터를 상기 새로운 데이터로(as) 판독하는 단계, 혹은, 상기 제 1 컴퓨터의 경우, 상기 일련의 컴퓨터들의 외부로부터의 데이터를 상기 새로운 데이터로(as) 판독하는 단계를 포함하는 것을 특징으로 하는 일련의 컴퓨터들 내에서의 데이터 처리 방법.
  3. 제 1 혹은 2 항에 있어서, 상기 (b) 단계는,
    상기 오래된 데이터를 상기 후속 컴퓨터에 기록하는 단계, 혹은, 상기 마지막 컴퓨터의 경우, 상기 오래된 데이터를 상기 일련의 컴퓨터의 외부에 기록하는 단계를 포함하는 것을 특징으로 하는 일련의 컴퓨터들 내에서의 데이터 처리 방법.
  4. 제 1, 2 혹은 3 항에 있어서, 상기 일련의 컴퓨터들은,
    상호통신을 위하여 2차원 이상으로 데이터 경로를 통해 연결된 컴퓨터들의 어레이인 것을 특징으로 하는 일련의 컴퓨터들 내에서의 데이터 처리 방법.
  5. 제 4 항에 있어서,
    상기 현재 컴퓨터가 비트들 중 어느 비트들이 동시에 설정되는지에 기초하여 상기 데이터 경로들을 통해 통신할 수 있도록 프로그래밍적으로 설정가능한 상기 비트들을 이용하여 적어도 상기 이전 컴퓨터 및 후속 컴퓨터로의 데이터 경로들을 어드레싱하는 단계를 더 포함하는 것을 특징으로 하는 일련의 컴퓨터들 내에서의 데이터 처리 방법.
  6. 제 5 항에 있어서, 상기 (a) 단계는,
    상기 비트들에 의해 동시에 특정된(specified) 다수의 컴퓨터들 중 하나로부 터 상기 새로운 데이터를 판독하는 단계를 포함하는 것을 특징으로 하는 일련의 컴퓨터들 내에서의 데이터 처리 방법.
  7. 제 5 혹은 6 항에 있어서, 상기 (b) 단계는,
    상기 비트들에 의해 동시에 특정된(specified) 다수의 컴퓨터들 중 하나에 상기 오래된 데이터를 기록하는 단계를 포함하는 것을 특징으로 하는 일련의 컴퓨터들 내에서의 데이터 처리 방법.
  8. 선행하는 어느 일 항에 있어서,
    상기 (a) 단계는 상기 새로운 데이터를 스택 상으로 푸시(push)하는 단계를 포함하며,
    상기 (b) 단계는 상기 오래된 데이터를 스택으로부터 인출(pop)하는 단계를 포함하는 것을 특징으로 하는 일련의 컴퓨터들 내에서의 데이터 처리 방법.
  9. 데이터 처리를 위한 일련의 컴퓨터들로서, 상기 일련의 컴퓨터들은 제 1 및 마지막 컴퓨터를 포함하며, 상기 제 1 컴퓨터를 제외한 각각의 컴퓨터들은 이전 컴퓨터가 있으며, 상기 마지막 컴퓨터를 제외한 각각의 컴퓨터들은 후속 컴퓨터가 있으며, 상기 각각의 컴퓨터들은:
    제 1 데이터 경로를 통해 새로운 데이터를 판독하기 위한 로직과;
    제 2 데이터 경로를 통해 오래된 데이터를 기록하기 위한 로직과;
    상기 오래된 데이터를 생성하기 위하여 상기 새로운 데이터를 처리하기 위한 로직과;
    상기 마지막 컴퓨터를 제외하고, 상기 오래된 데이터를 저장하기 위한 저장부를 포함하며,
    상기 기록을 위한 로직은 상기 판독을 위한 로직 이후에 동작하며, 상기 기록을 위한 로직은 상기 처리를 위한 로직 이전에 동작하는 것을 특징으로 하는 데이터 처리를 위한 일련의 컴퓨터들.
  10. 제 9 항에 있어서, 상기 판독을 위한 로직은,
    상기 이전 컴퓨터로부터의 오래된 데이터를 상기 새로운 데이터로(as) 판독하거나, 상기 제 1 컴퓨터의 경우, 상기 일련의 컴퓨터 외부로부터의 데이터를 상기 새로운 데이터로(as) 판독하는 것을 특징으로 하는 데이터 처리를 위한 일련의 컴퓨터들.
  11. 제 9 혹은 10 항에 있어서,
    상기 기록을 위한 로직은 상기 후속 컴퓨터에 상기 오래된 데이터를 기록하거나, 상기 마지막 컴퓨터의 경우, 상기 일련의 컴퓨터의 외부에 상기 오래된 데이터를 기록하는 것을 특징으로 하는 데이터 처리를 위한 일련의 컴퓨터들.
  12. 제 9, 10 혹은 11 항에 있어서, 상기 일련의 컴퓨터들은,
    2차원 이상에서 다수의 제 1 데이터 경로와 다수의 제 2 데이터 경로를 통해 연결된 컴퓨터들의 어레이인 것을 특징으로 하는 데이터 처리를 위한 일련의 컴퓨터들.
  13. 제 12 항에 있어서,
    상기 컴퓨터가 비트들 중 어떤 비트들이 동시에 설정되는지에 기초하여 상기 다수의 데이터 경로를 통해 통신할 수 있도록 상기 데이터 경로들 각각을 어드레싱하기 위하여 프로그래밍적으로 설정가능한 비트들을 갖는 레지스터를 더 포함하며, 상기 레지스터 내에 단일 어드레스를 허용하여 상기 데이터를 위한 소스 및 목적 장치들을 표현할 수 있게 하는 것을 특징으로 하는 데이터 처리를 위한 일련의 컴퓨터들.
  14. 제 9 내지 13항 중 어느 일 항에 있어서, 상기 판독을 위한 로직은 상기 새로운 데이터를 스택 상으로 푸시(push)하며,
    상기 기록을 위한 로직은 상기 오래된 데이터를 상기 스택으로부터 인출하는(pop) 것을 특징으로 하는 데이터 처리를 위한 일련의 컴퓨터들.
  15. 일련의 컴퓨터들 상에서의 구동시, 상기 일련의 컴퓨터들이 제 1 항 내지 8항 중 한 항의 방법을 구현할 수 있게 하는 컴퓨터 프로그램.
KR1020080039578A 2007-04-27 2008-04-28 일련의 컴퓨터 내에서의 데이터 처리를 위한 시스템 및방법 KR20080096485A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US11/741,659 US20080270751A1 (en) 2007-04-27 2007-04-27 System and method for processing data in a pipeline of computers
US11/741,649 US7555637B2 (en) 2007-04-27 2007-04-27 Multi-port read/write operations based on register bits set for indicating select ports and transfer directions
US11/741,659 2007-04-27
US11/741,649 2007-04-27

Publications (1)

Publication Number Publication Date
KR20080096485A true KR20080096485A (ko) 2008-10-30

Family

ID=39642737

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020080039578A KR20080096485A (ko) 2007-04-27 2008-04-28 일련의 컴퓨터 내에서의 데이터 처리를 위한 시스템 및방법

Country Status (6)

Country Link
US (1) US20080270751A1 (ko)
EP (1) EP1986094A1 (ko)
JP (1) JP2009009549A (ko)
KR (1) KR20080096485A (ko)
TW (1) TW200849027A (ko)
WO (1) WO2008133979A2 (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7937557B2 (en) 2004-03-16 2011-05-03 Vns Portfolio Llc System and method for intercommunication between computers in an array
US7966481B2 (en) 2006-02-16 2011-06-21 Vns Portfolio Llc Computer system and method for executing port communications without interrupting the receiving computer
US9684632B2 (en) * 2009-06-04 2017-06-20 Micron Technology, Inc. Parallel processing and internal processors
US10372636B2 (en) * 2016-11-18 2019-08-06 International Business Machines Corporation System for changing rules for data pipeline reading using trigger data from one or more data connection modules
US11960438B2 (en) 2020-09-08 2024-04-16 Rambus Inc. Methods and circuits for streaming data to processing elements in stacked processor-plus-memory architecture

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3868677A (en) * 1972-06-21 1975-02-25 Gen Electric Phase-locked voltage-to-digital converter
US4215401A (en) * 1978-09-28 1980-07-29 Environmental Research Institute Of Michigan Cellular digital array processor
US4593351A (en) * 1981-06-12 1986-06-03 International Business Machines Corporation High speed machine for the physical design of very large scale integrated circuits
US4665494A (en) * 1982-12-17 1987-05-12 Victor Company Of Japan, Limited Spectrum display device for audio signals
US4739474A (en) * 1983-03-10 1988-04-19 Martin Marietta Corporation Geometric-arithmetic parallel processor
US4672331A (en) * 1983-06-21 1987-06-09 Cushing Vincent J Signal conditioner for electromagnetic flowmeter
US4742511A (en) * 1985-06-13 1988-05-03 Texas Instruments Incorporated Method and apparatus for routing packets in a multinode computer interconnect network
US5021947A (en) * 1986-03-31 1991-06-04 Hughes Aircraft Company Data-flow multiprocessor architecture with three dimensional multistage interconnection network for efficient signal and data processing
US4789927A (en) * 1986-04-07 1988-12-06 Silicon Graphics, Inc. Interleaved pipeline parallel processing architecture
US4868745A (en) * 1986-05-30 1989-09-19 Hewlett-Packard Company Data processing system and method for the direct and indirect execution of uniformly structured object types
US5222237A (en) * 1988-02-02 1993-06-22 Thinking Machines Corporation Apparatus for aligning the operation of a plurality of processors
US5440749A (en) 1989-08-03 1995-08-08 Nanotronics Corporation High performance, low cost microprocessor architecture
JPH0457068A (ja) * 1990-06-27 1992-02-24 Minolta Camera Co Ltd 画像形成装置
US5765015A (en) * 1990-11-13 1998-06-09 International Business Machines Corporation Slide network for an array processor
US5434989A (en) * 1991-02-19 1995-07-18 Matsushita Electric Industrial Co., Ltd. Cache memory for efficient access with address selectors
CA2073516A1 (en) * 1991-11-27 1993-05-28 Peter Michael Kogge Dynamic multi-mode parallel processor array architecture computer system
JPH0713945A (ja) * 1993-06-16 1995-01-17 Nippon Sheet Glass Co Ltd 演算処理部および制御・記憶部分離型マルチプロセッサ ・システムのバス構造
JP3308770B2 (ja) * 1994-07-22 2002-07-29 三菱電機株式会社 情報処理装置および情報処理装置における計算方法
US5630154A (en) * 1994-10-11 1997-05-13 Hughes Aircraft Company Programmable systolic array system arranged in a found arrangement for passing data through programmable number of cells in a time interleaved manner
US5832291A (en) * 1995-12-15 1998-11-03 Raytheon Company Data processor with dynamic and selectable interconnections between processor array, external memory and I/O ports
US6353880B1 (en) * 1998-07-22 2002-03-05 Scenix Semiconductor, Inc. Four stage pipeline processing for a microcontroller
EP0992896A1 (en) * 1998-10-06 2000-04-12 Texas Instruments Inc. Pipeline protection
WO2003019356A1 (en) 2001-08-22 2003-03-06 Adelante Technologies B.V. Pipelined processor and instruction loop execution method
US7581081B2 (en) * 2003-03-31 2009-08-25 Stretch, Inc. Systems and methods for software extensible multi-processing
US7162573B2 (en) * 2003-06-25 2007-01-09 Intel Corporation Communication registers for processing elements
US7257560B2 (en) * 2003-07-31 2007-08-14 Cisco Technology, Inc. Cost minimization of services provided by multiple service providers
US7937557B2 (en) * 2004-03-16 2011-05-03 Vns Portfolio Llc System and method for intercommunication between computers in an array
US20050206648A1 (en) * 2004-03-16 2005-09-22 Perry Ronald N Pipeline and cache for processing data progressively
EP1821211A3 (en) * 2006-02-16 2008-06-18 Technology Properties Limited Cooperative multitasking method in a multiprocessor system
US7904615B2 (en) * 2006-02-16 2011-03-08 Vns Portfolio Llc Asynchronous computer communication

Also Published As

Publication number Publication date
JP2009009549A (ja) 2009-01-15
EP1986094A1 (en) 2008-10-29
WO2008133979A3 (en) 2009-02-12
WO2008133979A2 (en) 2008-11-06
US20080270751A1 (en) 2008-10-30
TW200849027A (en) 2008-12-16

Similar Documents

Publication Publication Date Title
US5752071A (en) Function coprocessor
JP2564805B2 (ja) 情報処理装置
US6718457B2 (en) Multiple-thread processor for threaded software applications
US20010014937A1 (en) Multiprocessor computer architecture incorporating a plurality of memory algorithm processors in the memory subsystem
WO2012068494A2 (en) Context switch method and apparatus
US8825924B2 (en) Asynchronous computer communication
US7555637B2 (en) Multi-port read/write operations based on register bits set for indicating select ports and transfer directions
KR20080099193A (ko) 데이터 및 명령어를 컴퓨터 내부로 로딩시키는 방법 및장치
US7752422B2 (en) Execution of instructions directly from input source
KR20080096485A (ko) 일련의 컴퓨터 내에서의 데이터 처리를 위한 시스템 및방법
US8468323B2 (en) Clockless computer using a pulse generator that is triggered by an event other than a read or write instruction in place of a clock
Leibson et al. Configurable processors: a new era in chip design
US7934075B2 (en) Method and apparatus for monitoring inputs to an asyncrhonous, homogenous, reconfigurable computer array
US20100325389A1 (en) Microprocessor communications system
EP1821199A1 (en) Microloop computer instructions
EP1821217B1 (en) Asynchronous computer communication
Becht et al. IBM z14: Advancing the I/O storage and networking channel adapter
Koltes et al. Circuit parallelism in haskell programs
EP1984836A2 (en) Allocation of resources among an array of computers
Katz et al. PIPE: A HIGH PERFORMANCE VLSI PROCESSOR IMPLEMENTATION GL Craig JR Goodman

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid