KR20090016644A - 동작 효율성을 증가시킨 컴퓨터 시스템 - Google Patents

동작 효율성을 증가시킨 컴퓨터 시스템 Download PDF

Info

Publication number
KR20090016644A
KR20090016644A KR1020077009922A KR20077009922A KR20090016644A KR 20090016644 A KR20090016644 A KR 20090016644A KR 1020077009922 A KR1020077009922 A KR 1020077009922A KR 20077009922 A KR20077009922 A KR 20077009922A KR 20090016644 A KR20090016644 A KR 20090016644A
Authority
KR
South Korea
Prior art keywords
processor
input
processors
port
register
Prior art date
Application number
KR1020077009922A
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/355,513 external-priority patent/US7904695B2/en
Priority claimed from US11/355,495 external-priority patent/US7904615B2/en
Priority claimed from US11/441,818 external-priority patent/US7934075B2/en
Priority claimed from US11/441,812 external-priority patent/US7913069B2/en
Priority claimed from US11/441,784 external-priority patent/US7752422B2/en
Priority claimed from US11/653,187 external-priority patent/US7966481B2/en
Application filed by 브이엔에스 포트폴리오 엘엘씨 filed Critical 브이엔에스 포트폴리오 엘엘씨
Publication of KR20090016644A publication Critical patent/KR20090016644A/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
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • 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

Landscapes

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

Abstract

프로세서들의 어레이가 작업자 모드 기능을 이용하여 보다 효율적으로 통신하는 마이크로프로세서 시스템이 개시된다. 현재 코드를 실행하고 있지 않은 프로세서는, 인접한 프로세서에 의해 태스크가 전송될 때 까지, 비활성화 상태이지만 경계 상태(inactive but alert state)를 유지한다. 또한, 프로세서들은 유입 태스크들 또는 메세지들을 체크하기 위해 태스크를 일시적으로 중지시키도록 프로그램될 수 있다.
Figure P1020077009922
컴퓨터 시스템, 비활성화 상태, 경계 상태, 수면 모드, 코드 실행, 태스크

Description

동작 효율성을 증가시킨 컴퓨터 시스템{COMPUTER SYSTEM WITH INCREASED OPERATING EFFICIENCY}
본 출원은, 2006년 9월 29일에 출원되었으며 그 명칭이 "SEAForth Application Guide" (미국 가 출원 번호 60/849,498)의 우선권을 주장하며, 2006년 6월 30일자로 출원된 미국 가출원 번호 60/818,084의 우선권을 주장하고, 2006년 5월 26일 출원되었으며 그 명칭이 "Method and Apparatus for Monitoring Input to a Computer"(미국 출원 번호 11/441,818)의 일부 계속 출원이고, 2006년 5월 3일 출원된 미국 가출원 번호 60/797,345의 우선권을 주장하고, 2006년 3월 31에 출원된 미국 가출원 번호 60/788,265의 우선권을 주장하며, 2006년 2월 16일 출원되었고 그 명칭이 "Asynchronous Power Saving Computer"인 미국 출원 번호 11/355,513의 일부 계속 출원이다. 이러한 모든 출원들은 본원의 참조로서 인용된다.
본 발명은 컴퓨터와 컴퓨터 프로세서에 관한 것으로서, 특히 외부 소스로부터 명령어들이 수신되면 컴퓨터로 하여금 명령어들을 저장하지 않으면서 그 명령어들을 실행할 수 있게 하는 방법 및 수단과, 컴퓨터들 간의 통신 및 다른 컴퓨터 내의 자원을 이용할 수 있는 컴퓨터의 능력을 촉진시키는 관련 방법에 관한 것이다.
본 발명의 직접 실행(direct execution) 방법 및 장치에 대한 현재의 주된 이용은 단일의 마이크로칩 상에 복수의 컴퓨터들을 결합하는 데에 있는 바, 여기에 서는 동작 효율성이 중요한데, 그 이유는 동작 속도 증가에 대한 요구 뿐 아니라, 보다 큰 효율성의 결과인 전력 절감 및 열 감소때문이다.
컴퓨터 기술에 있어서, 속도는 많이 요구되는 특성이며, 보다 빠른 컴퓨터 및 프로세서를 달성하고자 하는 추구는 계속 되고 있다. 하지만, 산업계에서는, 적어도 현재 알려진 기술에서는 마이크로 프로세서의 속도를 증가시키는 데에 있어서의 한계가 급속하게 다가오고 있음을 인식하고 있다. 따라서, 복수의 프로세서들을 사용하는 데에 있어서, 이러한 프로세서들 간에 컴퓨터 태스크(task)들을 공유함으로써 전체 컴퓨터 속도를 증가시키고자 하는 관심이 증가하고 있다.
복수의 프로세서 사용은 프로세서 간의 통신을 요구하고 있다. 따라서, 프로세서 간에 명령어와 데이터를 전송하는 데에 많은 시간이 허비되고 있다. 이를 달성하기 위해 실행되어야 하는 각각의 부가적인 명령어들은 프로세스에 있어서 증가하는 지연을 야기하는 바, 이는 누적되면 매우 커질 수 있다. 하나의 컴퓨터에서 다른 컴퓨터로 명령어들 또는 데이터를 통신하기 위한 종래의 방법은, 먼저 데이터 또는 명령어를 수신 컴퓨터에 저장한 다음, (명령어의 경우에는) 실행을 위해 호출하거나 또는 (데이터의 경우에는) 그에 대한 동작을 위해 호출한다.
종래 기술에서는, 종종 컴퓨터의 "주의를 요하는 것(get the attention)"이 필요하다. 컴퓨터가 하나의 태스크로 인해 바쁘다 하더라도, 첫 번째 태스크로부터 컴퓨터를 일시적으로 디버트(divert)시킬 필요가 있는 시간이 급한 다른 태스크 요건이 발생할 수 있다. 이러한 예로서 컴퓨터에 입력을 제공하는 경우가 있지만, 오 직 이것으로만 국한되지 않는다. 이 같은 경우, 컴퓨터는 입력을 잠시 인지하고, 그리고/또는 그 입력에 따라 반응할 필요가 있다. 이후, 컴퓨터는 입력이 들어오기 이전 동작을 개시하기도 하고, 입력에 따라 이전 동작이 변경될 수도 있다. 본 예에서는 외부 입력이 이용되지만, 컴퓨터 내에서 ALU의 처리에 대한 잠재적인 충돌이 있는 경우에도 같은 상황이 발생할 수 있다.
I/O 포트에서 데이터 및 상태 변경을 수신할 때, 종래 기술에는 두 가지 방법이 있다. 하나는 포트를 폴링(polling)하는 것인데, 이것은 일정한 간격으로 포트의 상태를 읽음으로써, 임의의 데이터가 수신되었거나 상태 변경이 발생하였는 지의 여부를 결정할 것을 수반한다. 하지만, 이와같이 포트를 폴링하는 것은 많은 시간과 자원을 소모한다. 보다 나은 대안으로서 제시되는 것은 "인터럽트"이다. 이러한 인터럽트를 사용할 때, 프로세서는 자신의 할당된 태스크의 수행을 착수하고, 이후 I/O 포트/장치가 주의 또는 상태 변경을 요구하면, 프로세서에게 인터럽트 요청(Interrupt Request, IRQ)을 전송한다. 일단 프로세서가 인터럽트 요청을 수신하면, 예를 들어 현재의 명령어를 끝내고 스택에 정보를 집어 넣은 다음, 적절한 인터럽트 서비스 루틴(interrupt Servie Routine, ISR)을 실행한다. ISR이 끝나면, 프로세서는 인터럽트 이전에 진행하던 동작으로 돌아간다. 이러한 방법을 이용하게 되면, 프로세서는 I/O 장치가 주의를 필요로 하는 지를 확인하는 데에 시간을 낭비하지 않고, 디바이스는 주의를 요할때에만 인터럽트를 서비스한다. 하지만, 인터럽트의 이용은 많은 경우 바람직하지 않은데, 그 이유는 인터럽트의 이용과 관련된 많은 양의 오버헤드가 있을 수 있기 때문이다. 예를 들어, 인터럽트가 발생할 때 마다, 컴퓨터는 이전에 달성하고자 했던 태스크에 관한 정보를 저장하고, 인터럽트에 관한 정보를 로드한 다음, 인터럽트가 처리되면 이전 태스크에 대해 필요한 데이터를 다시 로드해야 한다.
포스(Forth) 컴퓨터 언어에 기초한 시스템을 이용하게 되면, 상기 시스템들을 개선시킬 수 있다는 것을 발견하였다. 포스 시스템들은 한번에 실행하는 코드의 1개 이상의 "스레드(thread)"를 가질 수 있다. 이것은 종종 협력적 라운드 로빈(Cooperative round-robin)이라 불린다. 스레드들이 중앙 처리 장치(CPU)를 이용하여 차례(turn)를 얻는 순서는 고정되어 있다. 예를 들어, 스레드 4는 항상 스레드 5 이전에 그리고 스레드 3 이후에 차례를 얻는다. 각 스레드는, 그것이 CPU를 필요로 한 다음 자발적으로 양도(relinquish)하는 한, 이러한 CPU를 유지하도록 허용된다. 스레드는 워드 PAUSE를 호출하여 이를 수행한다. 인터럽트 기능 동안 세이브(save)될 필요가 있는 많은 환경들과 대비하여, PAUSE 기능 동안 최초 태스크를 복구하는 데에 단지 약간의 데이터 아이템 만이 세이브되면 된다.
각 스레드에는 일이 주어질 수 있고 주어지지 않을 수도 있다. 태스크 4가 일을 가지고 있고, 라운드 로빈 상에서 그 이전 태스크(태스크 3)가 PAUSE를 호출하면, 태스크 4가 일어나서(wake up), PAUSE를 다시 결정할 때 까지 일을 계속한다. 태스크 4가 더 이상 할 일이 없을 경우, 태스크 5에 대한 제어로 넘어간다. 태스크가, 입/출력 기능을 수행하는 워드를 호출하고, 그에 따라 입/출력이 끝날 때 까지 기다릴 필요가 있는 경우, 입/출력 호출 내에 PAUSE가 내장(build)된다.
PAUSE의 예측 가능성은 매우 효율적인 코드를 가능하게 한다. 종종, 포스에 기초하는 협력적 라운드 로빈은, 선제 멀티 테스커(pre-emptive multitasker)가 다음에 누가 CPU를 얻어야 하는 지를 결정하는 데에 걸리는 시간 보다 적은 시간에, 존재하는 모든 스레드에게 CPU에서의 차례를 줄 수 있다. 하지만, 특정의 태스크가 CPU를 압도(overwhelm)하는 경향이 있다.
또한, 컴퓨터 시스템에서의 누설 전류(leakage current)를 최소화함으로써 동작 효율성을 높일 수 있다. 장치를 보다 작게 함에 있어서, 절연층(insulation layer)이 얇아짐에 따라 누설 전류가 증가하게 되었다. 머지않아, 누설 전력은 유효 전력(active power)의 50%에 도달할 수 있다. 누설 전류를 억제하기 위한 하나의 시도는 슬립 트랜지스터(sleep transistor)를 이용하는 것이다. 이러한 슬립 트랜지스터는, 파워 서플라이 및 논리 블록들을, 필요하지 않을 때에 절연시키거나 끊음으로써 스위치처럼 동작한다. 이는, 2006년 7월 24일자의 Embedded.com 잡지에 기재된 Bob Crepps의 "How to Provide a Power-Efficient Architecture"에 개시되어 있는 바와 같이, 누설 전력을 2-1000배의 팩터(factor) 만큼 감소시킬 수 있다.
하지만, 슬립 트랜지스터 사용시 몇 가지 단점들이 있다. 이러한 트랜지스터를 효율적으로 이용하기 위해서는 시스템에서 많은 요인들이 고려될 필요가 있다. 슬립 트랜지스터의 임계 전압이 클 필요가 있는데, 그렇지 않으면 슬립 트랜지스터는 높은 누설 전류를 갖게 될 것이다. 이에 의해, 슬립 트랜지스터에 대한 높은 임계 전압 장치 및 논리 게이트들에 대한 낮은 임계 전압 장치를 모두 지원하기 위해서는, CMOS 기술 프로세스가 변형될 필요가 있다. 또한, 큰 슬립 트랜지스터는 면적 오버헤드 및 트랜지스터를 턴온/턴오프시키는 데에 소모되는 동적인 전력을 증 가시킨다.
회로의 올바른 동작을 보장하기 위해서는, 온 상태일 때 전압 강하를 감소시키기 위해 슬립 트랜지스터의 크기를 신중하게 정해야 한다. 서로 다른 시간에 스위치하는 두 개의 게이트들이 하나의 슬립 트랜지스터를 공유할 수 있다. 하지만, 이것은 큰 회로의 경우에는 실용적이지 못하다. 큰 회로에 대한 슬립 트랜지스터의 최상의 구현을 결정하기 위한 알고리즘이 필요하다.
슬립 트랜지스터와 관련된 다른 단점은, 접지 또는 전원 전압으로부터 플립플롭을 차단하는 데에 이용될 때에 회로 내에 잡음을 발생시키고 데이터의 손실을 야기한다는 것인 바, 이것은 2004년 Farzan Fallah 등에 의해 발표된 "Standby and Active Leakage Current Control and Minimization in CMOS VLSI Circuits"란 명칭의 논문에 개시되어 있다. 누설 전류를 줄이고, 보다 효율적이고 보다 문제가 적은 컴퓨터 프로세서 시스템을 제공할 수 있는 방법 그리고/또는 장치가 필요하다.
컴퓨터들 간에 데이터 또는 명령어들의 형태로 정보를 전송하고, 수신한 다음, 이용하는 단계들의 수를 줄이는 것이 유익하다. 또한, 인터럽트 동안 소모되는 시간 및 자원을 줄이거나 없애는 것이 유익하다. 또한, PAUSE 기능을 하나의 CPU 이상으로 확대시키는 것이 유익하다. 하지만, 본 발명인의 지식에 의하면, 종래의 어떠한 시스템도 위와 같은 과정들을 현저하게 효율성을 높이지 못했다.
전력 소비 및 열방출을 최소화하고 컴퓨팅 효율성을 최대화한 컴퓨터 프로세서 어레이가 개시된다. 이것은, 컴퓨터 프로세서 어레이에 의해 부분적으로 구현되는 바, 여기서 프로세서들(노드들 또는 코어들이라고도 불림)은 동작 모드에 있지 않을 때 비활성화 상태이지만 경계 상태(inactive but alert state)가 된다. 비활성의 노드 또는 코어는 비활성인 동안 본질적으로 어떠한 전력도 소모하지 않으며, 인접하는 노드 또는 핀이 그것과 통신하고자 시도할 때에 활성화된다. 들어오는 태스크가 실행된 후, 노드는 다른 태스크가 그 노드로 보내질 때까지 비활성화 상태로 돌아간다.
또한, 코어가 코드나 명령어를 현재 실행하고 있으며, 이웃 코어들이 상기 실행중인 코어와 통신할 때에도 어레이의 효율성이 실현될 수 있다. 종래의 컴퓨팅 시스템에서와 같이 실행 코어를 인터럽트하기 보다는, 유입 메세지를 체크하기 위해 종종 포즈(pause)하도록 프로그램될 수 있다. 유입 메세지가 대기중인 경우, 실행 코어는 포즈 이후 유입 메세지에 대해 반응한 다음, 자신의 최초의 태스크를 계속할 수 있다.
본 발명의 상기 및 기타의 목적들 및 장점들은 도면들에 도시되어 본원에서 설명되는 본 발명을 실행하기 위한 방법들에 대한 설명 및 그의 산업상 이용가능성에 비추어 당업자에게 명확해질 것이다. 리스트되는 목적들 및 장점들은 본 발명의 가능한 모든 장점들을 속속들이 다 규명한 것은 아니다. 또한, 응용에 있어서 1개 이상의 의도된 목적들 그리고/또는 장점들이 존재하지 않거나 요구되지 않는 경우에도 본 발명을 실행하는 것이 가능하다.
또한, 당업자들이라면 본 발명의 다양한 실시예들이 상기 설명한 목적들 그리고/또는 장점들을 1개 이상(반드시 전부일 필요는 없다) 달성할 수 있음을 인식할 것이다. 따라서, 본원에서 설명되는 목적들 그리고/또는 장점들은 본 발명의 본질적인 요소들이 아니며, 제한적인 것으로서 해석되서는 안된다.
도 1은 본 발명에 따른 컴퓨터 프로세서 어레이를 도시한 도면이다.
도 2는 도 1에 도시된 컴퓨터 프로세서들의 서브세트와 데이터 버스들의 연결을 상세히 도시한 도면이다.
도 3은 도 1 및 도 2에 도시된 컴퓨터 프로세서들중 하나의 일반적인 레이아웃을 도시한 도면이다.
도 4는 명령 워드(48)를 도시한 도면이다.
도 5은 본 발명의 일 실시예에 따른 마이크로-루프에 대한 일례를 도시한 흐름도이다.
도 6은 포트로부터의 명령들을 실행하는 방법에 대한 일례를 도시하는 흐름도이다.
도 7은 프로세서를 경계시키는 본 발명의 방법의 예를 나타내는 흐름도이다.
도 8은 프로세서를 깨우고 입력을 실행 프로세서에 보내는 방법을 도시하는 흐름도이다.
도 9는 프로세서 또는 노드 식별(identification) 및 미러잉을 이용한 인접 프로세서들과의 공유 포트(sharing port)들을 갖는 도 1의 프로세서 어레이의 개략도이다.
도 9a는 부가적인 포트를 상세히 나타내는 도 9의 부분도이다.
도 10은 I/O 레지스터의 부분도이다.
도 11은 작업자 모드 루프(worker mode loop)를 도시한 흐름도이다.
도 12는 PAUSE 루틴을 갖는 실행 프로세서를 나타내는 흐름도이다.
본 발명은 도면을 참조하여 설명되는 바, 같은 부호는 동일하거나 유사한 요소들을 나타낸다. 본 발명은 발명의 목적을 달성하기 위한 방법들의 측면에서 설명되지만, 당업자라면 본 발명의 정신 또는 범위를 벗어나지 않으면서 이러한 교시에 비추어 다양한 변형이 이루어질 수 있다는 것을 인식할 것이다.
본원에서 설명되고 그리고/또는 도면에 나타낸 발명에 대한 실시예들 및 변형들은 단지 예로서 제시된 것들로서, 발명의 범위를 한정하는 것이 아니다. 달리 특정하지 않는 한, 본 발명은 많은 변형에 적응될 수 있기 때문에, 본 발명의 개별적인 양상들 및 컴포넌트들은 본 발명의 정신 및 범위 내에서 다양한 응용들에 대해 생략되거나 변형될 수 있다.
이하, "수면 상태지만 경계 상태" 또는 "비활성화 상태이지만 경계 상태"로서 불리는 모드에서 동작하는 프로세서(컴퓨터, 또는 노드, 또는 코어라고도 불린다)에 대해 설명하는 바, 상기 두 개의 모드는 본질적으로 어떠한 전력도 이용되지 않을 때에 프로세서의 기능이 일시적으로 정지하고, 멈추고, 중지하는 동작 모드를 말한다. 동시에, 프로세서는 경계 상태게 있거나, 또는 지시가 올 때에 즉시 기능들의 처리를 시작할 수 있는 준비 상태(state of readiness)에 있게 된다. 비활성화된 프로세서가 프로세싱 명령어들을 전송받으면, "깨워진다(being awakend)" 또 는 "활성화된다(being activated)"라고 한다.
본 발명을 실행하기 위한 방법은 개별적인 컴퓨터 프로세서들의 어레이에 의해 주어진다. 이 어레이는 도 1에서 도시되어 있으며, 참조 번호 10으로서 나타나있다. 프로세서 어레이는 도 1에 도시되어 있으며, 범용 참조번호 10에 의해 지시된다. 프로세서 어레이(10)는 다수(도시된 예에서는 24개)의 컴퓨터 프로세서들(12)을 갖는다(어레이의 예에서, 컴퓨터 프로세서들은 종종 "코어들", "노드들"이라고도 불린다). 도시된 예에서, 모든 프로세서들(12)은 단일 다이(14) 위에 배치된다. 본 발명에 따르면, 각 프로세서들(12)은 일반적으로 독립적으로 기능하는 프로세서들인바, 이에 대해서 하기에서 상세히 설명된다. 프로세서들(12)은 복수(이것의 수에 대해서는 하기에서 상세히 설명된다)의 상호연결 데이터 버스들(16)에 의해 상호 연결된다. 본 실시예에서, 데이터 버스들(16)은 양방향의 비동기 고속 병렬 데이터 버스들이지만, 본 발명의 사상의 범위 내에서는 이러한 목적으로 다른 상호연결 수단들이 채용될 수도 있다. 어레이(10)에 대한 본 실시예에서, 프로세서들(12) 사이의 데이터 통신이 비동기식일 뿐만 아니라, 개별적인 프로세서들(12) 역시 내부적으로는 비동기식 모드에서 동작한다. 이러한 사실은 발명자에 의해 중요한 장점으로 인지된 것이다. 예를 들어, 클럭 신호는 프로세서 어레이(10)의 전체에 분포될 필요가 없기 때문에, 전력이 크게 세이브된다. 또한, 클럭 시그널을 공급할 필요가 없다는 것은, 어레이(10)의 크기를 제한하거나 또는 다른 알려진 문제점들을 야기할 수 있는 많은 타이밍 문제들을 없앤다. 또한, 개별적인 프로세서들이 동기적으로 동작한다는 사실은 많은 전력을 세이브할 수 있는데, 이 는 각 프로세서가 그 내에서 동작하는 클럭이 없음으로 인해 명령어 비 실행시 사실상 어떠한 전력도 소비하지 않기 때문이다.
당업자라면 도 1의 다이(14) 상에는 명확성을 위해 생략된 부가적인 구성요소들이 있음을 인식할 것이다. 그러한 부가적인 구성요소들은 전력 버스들, 외부 연결 패드들 및 마이크로프로세서 칩의 기타 다른 공통 요소들을 포함하지만, 오직 이것들로만 제한되지 않는다.
프로세서(12e)는 어레이(10)의 주변부에 있지 않은 프로세서들(12)중 하나의 예이다. 즉, 프로세서(12e)는 직교적으로 인접하는 네 개의 프로세서들(12a, 12b, 12c 및 12d)을 갖지만, 4개 이상의 프로세서가 이용되는 것도 본 발명의 범주에 들어간다. 프로세서들(12a 내지 12e)의 이러한 그룹핑은 이하 어레이(10)의 프로세서들(12) 간의 통신에 대한 상세한 설명과 관련하여 예시적으로 이용될 것이다. 도 1에서 도시된 바와 같이, 프로세서(12e)와 같은 내부 프로세서들은 네 개의 다른 프로세서들(12)을 갖는바, 이것에 의해 이들은 버스들(16)을 통해 직접 통신할 수 있다. 이하의 설명에서, 어레이(10) 주변부의 프로세서들(12)이 단지 세 개, 또는 코너의 프로세서들(12)의 경우에는 단지 2개의 다른 프로세서들(12)과 직접적으로 통신하게 될 것이라는 것을 제외하고는, 논의되는 원리는 모든 프로세서들(12)에 적용될 것이다.
도 2는 도 1의 일부에 대한 상세도로서, 프로세서들(12)의 단지 일부, 특히 프로세서들(12a 내지 12e)을 포함한다. 도 2는 또한 데이터 버스들(16)이 각각 읽기 라인(read line)(18), 쓰기 라인(write line) 및 다수(본 예에서는, 18개)의 데 이터 라인(data lines)(22)을 가짐을 보여준다. 데이터 라인(22)은 하나의 18 비트 명령 워드의 모든 비트들을 동시에 병렬적으로 전송할 수 있다. 주목할 사항으로서, 본 발명의 일 실시예에서, 프로세서들(12)의 일부는 인접 프로세서들의 미러 이미지(mirror image)들이다. 하지만, 프로세서들(12)이 모두 동일한 방향으로 구성되는지 또는 인접 프로세서들의 미러 이미지들로서 구성되는지의 여부는 현재 설명되는 본 발명의 제한된 양상이 아니다.
본 발명의 일 양상에 따르면, 프로세서(12e)와 같은 프로세서(12)는 하나, 두 개, 세 개 또는 네 개 모두의 읽기 라인들(18)을 하이로 설정하여, 각각의 하나, 두 개, 세 개 또는 네 개의 모든 인접 프로세서들(12)로부터 데이터를 수신할 준비가 된다. 유사하게, 프로세서(12)가 하나, 두 개, 세 개 또는 네 개 모두의 쓰기 라인들(20)을 하이로 설정하는 것도 가능하다.
인접 프로세서들(12a, 12b, 12c 또는 12d)중 하나가 자신과 프로세서(12e) 사이의 쓰기 라인(20)을 하이로 설정할 때, 만약 프로세서(12e)가 이미 대응하는 읽기 라인(18)을 하이로 설정하였다면, 워드는 관련된 데이터 라인들(22) 상에서 프로세서(12a, 12b, 12c 또는 12d)로부터 프로세서(12e)로 전송된다. 그러면, 전송 프로세서(12)는 쓰기 라인(20)을 해제(release)하고, 수신 프로세서(본 예에서는, 12e)는 쓰기 라인(20) 및 읽기 라인(18)을 모두 로우가 되게 한다. 후자의 동작은 데이터가 수신되었다는 것을 전송 컴퓨터(12)에게 알릴 것이다. 주목할 사항으로서, 상기 설명은 반드시 일련의 사건들을 순서대로 나타내도록 의도되지 않는다. 실제 상황에서는, 수신 프로세서는 전송 프로세서(12)가 그 쓰기 라인(20)을 해제 (하이로 올리는 것을 멈춘다)하기 전에 쓰기 라인(20)을 약간 로우로 설정하고자 시도한다. 이러한 경우, 전송 프로세서(12)가 그것의 쓰기 라인(20)을 해제하자마자, 상기 쓰기 라인(20)이 수신 프로세서(12e)에 의해 로우로 될 것이다. 주목할 사항으로서, 전송 프로세서(12)의 쓰기 라인(20)이 하이로 올라갈 경우, 데이터나 코드는 이미 전송되었기 때문에, 수신 프로세서(본 예에서는, 12e)는 본질적으로 즉각의 응답을 위해 데이터/코드를 래치하기만 하면 된다.
만약 프로세서(12e)가 프로세서(12a)에 쓰기를 시도하고 있는 중이었다면, 프로세서(12e)는 프로세서(12e)와 프로세서(12a) 사이의 쓰기 라인(20)을 하이로 설정할 것이다. 만약 프로세서(12e)와 프로세서(12a) 사이에 읽기 라인(18)이 프로세서(12a)에 의해 아직 하이로 설정되어있지 않았다면, 프로세서(12e)는 단지 프로세서(12a)가 그 읽기 라인(20)을 하이로 설정할 때까지 기다리게 될 것이다. 쓰기 라인(18) 및 읽기 라인(20)의 두 개의 대응하는 라인 모두가 하이일 때, 데이터 라인들(22)에서 전송되기를 기다리는 데이터가 전송된다. 이후, 수신 프로세서(12)(본 예에서는, 프로세서 12a)는, 전송 프로세서(12e)가 쓰기 라인(18)을 해제하자 마자 두 개의 프로세서들(본 예에서는, 12e 및 12a) 사이의 읽기 라인(18) 및 쓰기 라인(20) 모두를 로우로 설정한다.
프로세서(12e)와 같은 프로세서(12)가 쓰기를 예측하여 자신의 쓰기 라인들(20)중 하나를 하이로 설정할 때 마다, 만약 데이터가 전송되어야 하는 프로세서(12)가 이미 자신의 읽기 라인(18)을 하이로 설정(이 경우, 데이터가 즉시 전송된다)하지 않는 한, 상기 설명한 바와 같이 적절한 인접 프로세서(12)로부터 데이 터가 "요청"될 때 까지, 본질적으로는 전력을 사용하지 않으면서 단지 기다릴 것이다. 유사하게, 프로세서(12)가 읽기를 예측하여 자신의 읽기 라인들(18)중 하나 이상을 하이로 설정할 때 마다, 선택된 프로세서(12)로 연결된 쓰기 라인(20)이 상기 두 프로세서들(12) 간에 명령 워드를 전송하기 위해 하이가 될 때 까지 본질적으로 전력을 이용하지 않으면서 단지 기다릴 것이다.
상기 논의된 바와 같이, 프로세서들(12)이 상기 설명된 대로 기능하도록 하는 여러개의 가능한 수단들 그리고/또는 방법들이 있다. 하지만, 본 예에서, 프로세서들(12)은 일반적으로 (설명된 비동기 방식으로 그들 사이에 데이터를 전송하는 것 외에) 내부적으로 비동기적으로 동작하기 때문에 단순히 그렇게 동작하는 것이다. 즉, 명령들은 순차적으로 완료된다. 쓰기 또는 읽기 명령이 발생할 때, 그 명령이 완료될 때 까지는(또는, 아마도 대안적으로는, "리셋" 등에 의해 중단(abort)될 때까지) 어떠한 추가의 동작도 없다. 종래 기술에서는, 어떠한 규칙적인 클럭 펄스도 없다. 오히려, 실행되고 있는 명령이 읽기 또는 쓰기 유형의 명령(읽기 또는 쓰기 유형의 명령은 종종 다른 엔티티에 의한 완료를 요구한다)일 때에만, 또는 그렇지 않으면 읽기 또는 쓰기 유형의 동작이 사실상 완료될 때에, 다음 명령을 수행하기 위해 펄스가 발생된다.
도 3은 도 1 및 도 2의 프로세서들(12)중 하나의 예에 대한 일반적인 레이아웃을 나타내는 블록도이다. 도 3에 나타낸 바와 같이, 프로세서들(12) 각각은 일반적으로 자체적인 RAM(24) 및 ROM(26)을 가지는 자체 완비 컴퓨터(self contained computer)이다. 상기 언급한 바와 같이, 프로세서들(12)은 이들이 본 예에서 단일 칩 상에서 결합된다고 가정하여, 종종 개별적인 "노드들"로서 칭해진다.
프로세서(12)의 다른 기본 구성 요소들로는 (이하 설명되는 R 레지스터(29)를 포함하는) 리턴 스택(return stack)(28), 명령 영역(instruction area)(30), 산술 논리 연산 장치(arithmetic logic unit)(ALU 또는 "프로세서")(32), 데이터 스택(34), 명령들을 디코딩하기 위한 디코드 논리 영역(decode logic section)(36) 및 슬롯 시퀀서(42)가 있다. 일반적으로, 당업자라면 본 예에서의 프로세서들(12)과 같은 스택 기반의 프로세서들의 동작에 익숙할 것이다. 프로세서들(12)은 데이터 스택(34) 및 별도의 리턴 스택(28)을 갖는 듀얼 스택 프로세서들이다. 또한, 도 3은 각각 리턴 스택과 데이터 스택을 위한 원형의 레지스터 어레이(28a 와 34a)와 데이터 스택 상의 T 레지스터(44) 및 S 레지스터(46)를 보여준다.
본 실시예에서, 프로세서(12)는 인접 프로세서들(12)과 통신하기 위한 네 개의 통신 포트들(38)을 가진다. 이러한 통신 포트들(38)은 오프 상태, (신호들을 프로세서(12) 내로 구동하기 위한) 수신 상태 및 (신호들을 프로세서로부터 구동하기 위한) 전송 상태를 갖는 3상태 구동기(tri-state driver)들이다. 만약 특정 프로세서(12)가 프로세서(12e)의 예와 같이 어레이(도 1)의 내부에 있지 않는 경우, 적어도 여기서 설명되는 목적을 위해, 상기 통신 포트들중 하나 이상은 그 특정 프로세서에 사용되지 않을 것이다. 하지만, 다이의 에지에 인접하는 통신 포트들(38)은, 이러한 프로세서(12)의 내부에 설계되거나, 또는 프로세서(12)의 외부에 있지만 그 프로세서와 관련되도록 설계되는 부가적인 회로를 가짐으로써, 이러한 통신 포트(38)가 외부 I/O 포트(39)(도 1)로서 동작할 수 있게 한다. 이러한 외부 I/O 포 트들(39)의 예들은 USB 포트, RS232 직렬 버스 포트들, 병렬 통신 포트들, A/D 그리고/또는 D/A 변환 포트들 및 기타의 가능한 많은 변형들을 포함하지만, 오직 이것들로만 한정되지 않는다. 어떠한 유형의 부가적이거나 수정된 회로가 이러한 목적을 위해 이용되든지 간에, 설명되는 본 실시예에 따르면, "외부" I/O 포트의 동작(그로부터 수신되는 명령들 그리고/또는 데이터의 취급 관련)의 방법은 "내부" 통신 포트(38)와 관련하여 본원에서 설명된 것과 유사하다. 도 1에서, "에지" 프로세서(12f)는 외부 I/O 포트(39)을 통해 외부 장치(82)와 통신하기 위해 인터페이스 회로(80)(블록 형태로 나타냄)를 갖는 것으로 나타나있다.
본 실시예에서, 명령 영역(30)은, 본 예에서 A 레지스터(40a), B 레지스터(40b) 및 P 레지스터(40c)를 포함하는 다수의 레지스터들(40)을 포함한다. 이 예에서, A 레지스터(40a)는 풀(full) 18비트 레지스터이고, B 레지스터(40b) 및 P 레지스터(40c)가 9비트 레지스터이다. I/O 레지스터(18 비트)(47)는 메모리(ROM(26) 및 RAM(24))와 통신 포트(38) 사이에 위치된다. I/O 레지스터(47)는 하기에서 보다 상세히 설명된다.
본 발명이 본 예에 한정되지 않으나, 본 프로세서(12)는 네이티브 포스 언어 명령어들을 실행하도록 구현된다. 포스 컴퓨터 언어에 친숙한 사람이라면, 포스 "워드들"로서 알려져있는 복잡한 포스 명령들이 프로세서 내에 설계된 네이티브 프로세서 명령들로부터 구성된다는 것을 인식할 것이다. 포스 워드들의 집합은 "딕셔너리(dictionary)"로서 알려져있다. 하기에서 보다 상세히 설명되는 바와 같이, 프로세서(12)는 RAM(26), ROM(26)으로부터, 또는 데이터 버스들(16)(도 2)중 하나로 부터 직접적으로, 한번에 18개의 비트들의 읽기를 실행한다. 하지만, 포스에서, (오퍼랜드가 없는 명령들(operand-less instructions)로서 알려져있는) 대부분의 명령들은 자신들의 오퍼랜드들을 스택들(28 및 34)로부터 직접 얻기 때문에, 이들은 일반적으로 단지 5비트의 길이를 가지며, 이에 따라 그룹 내의 마지막 명령이 단지 3비트 만을 요구하는 제한된 명령들의 세트로부터 선택된다는 조건하에서, 단일의 18 비트 명령 워드 내에 최대 4개의 명령들이 포함될 수 있다.
도 4는 명령 워드(48)를 도시적으로 표현한 것이다. (주목할 사항으로서, 이 명령 워드(48)는 실제로 명령들, 데이터 또는 그들의 몇몇 조합을 포함할 수 있다.) 명령 워드(48)는 18개의 비트들(50)로 구성되어 있다. 이것은 이진 컴퓨터가 되는 바, 상기 비트들 각각(50)은 '1' 또는 '0'일 것이다. 이전에 논의된 바와 같이, 상기 18 비트 크기의 명령 워드(48)는 슬롯 0(54a), 슬롯 1(54b), 슬롯 2(54c) 및 슬롯 3(54d)으로 불리는 4개 슬롯(54)에 총 4개의 명령들(52)을 포함할 수 있다. 본 실시예에서, 상기 18 비트 명령 워드들(48)은 항상 전체로서 읽혀진다. 따라서, 상기 명령 워드(48)에는 항상 잠재적으로 4개까지의 명령들을 가질 수 있기 때문에, 모든 이용가능한 슬롯들(54)을 사용하는 것이 불필요하거나 심지어 바람직하지 않은 경우들에 대비하기 위해 NOP(무연산) 명령을 프로세서(12)의 명령 셋에 포함한다.
전술된 레지스터 외에, 명령 영역(30)은 현재 사용되고 있는 명령어를 나타내는 명령 워드(48)를 저장하기 위한 18 비트 명령 레지스터(30a) 및 현재 실행되고 있는 특정의 명령 워드 내의 명령을 위한 부가적인 5 bit 오피코드(opcode) 레 지스터를 갖는다.
상기 논의된 바와 같이, 각 명령(52)의 i4 비트(66)는 그 명령이 읽기 또는 쓰기 유형의 명령인지 여부에 따라 설정되는 바, 어떤 입력 또는 출력도 요구하지 않는 것이 1이 되는 명령과 대조적이다. 명령(52)의 나머지 비트들(50)은 그 명령을 위한 상기 특정 오피코드의 나머지 부분을 제공한다. 읽기 또는 쓰기 유형의 명령의 경우, 상기 비트들의 하나 이상은 그 특정 프로세서(12)에서 데이터가 어디서 읽혀져야 하는지, 아니면 어디에 쓰여져야하는 지를 나타내는 데에 이용될 수 있다. 본 발명의 예에서, 쓰여져야 하는 데이터는 항상 T 레지스터(44)(데이터 스택(34)의 맨 위)로부터 오지만, 데이터는 T 레지스터(44) 또는 그것이 실행될 수 있는 명령 영역(30) 내로 선택적으로 읽혀질 수 있다. 본 발명의 본 특정 실시예에서, 데이터 또는 명령들은 본원에서 설명되는 방식으로 통신될 수 있고, 이에 따라 명령들은 데이터 버스(16)로부터 직접 실행될 수 있다.
비트들(50)의 하나 이상은, 만일 있는 경우, 포트들(38)중 어느 것이 읽기 또는 쓰기를 위해 설정될 것인지를 지시하는데 사용될 것이다. 그 이후의 동작은 A 레지스터(40a), B 레지스터 등과 같은 레지스터(40)를 나타내기 위해 하나 이상의 비트들을 사용함으로써 선택적으로 달성된다. 이러한 예에서, 지정된 레지스터(40)는, 포트들(38)(그리고 또한, 프로세서(12)가 통신하고자 시도하는 메모리(RAM(24) 또는 ROM(26)), 외부 통신 포트(39) 등과 같은 임의의 다른 가능한 엔티티) 각각에 대응하는 비트를 갖는 데이터로 프리로드(preload)된다. 예를 들면, 특정 레지스터(40) 내의 네 개 비트들 각각은, 상 포트(up port)(38a), 우 포트(right port)(38b), 좌 포트(left port)(38c) 또는 하 포트(down port)(38d) 각각에 대응할 수 있다. 이러한 경우, 이러한 비트 위치들중 임의의 위치에서 '1'이 있으면, 통신은 대응하는 포트(38)을 통해 진행되도록 설정될 것이다. 본 발명의 실시예에서, 읽기 오피코드는 단일 명령에서의 통신을 위해 하나 이상의 포트(38)를 설정할 것으로 예상된다.
바로 다음의 예는 프로세서(12e)가 프로세서(12c)에 쓰기를 시도하는 통신을 가정하지만, 이러한 예는 임의의 인접하는 프로세서들(12) 간의 통신에도 적용될 수 있다. 쓰기 명령이 쓰기 프로세서(12e)에서 실행될 때, 선택된 쓰기 라인(20)(본 예에서는, 프로세서들(12e 및 12c) 간의 쓰기 라인(20))은 하이로 설정되며, 만일 대응하는 읽기 라인(18)이 이미 하이이면, 데이터는 선택된 통신 포트(38)를 통해 선택된 위치로부터 즉시 전송된다. 또한, 만일 대응하는 읽기 라인(18)이 아직 하이가 아니라면, 프로세서(12e)는 대응하는 읽기 라인(18)이 하이가 될 때 까지 단순히 동작을 멈출 것이다.
읽기 및 쓰기 유형의 명령이 완료될 때 프로세서(12e)의 동작이 어떻게 재개되느냐와 관련하여, 이에 대한 메커니즘은 다음과 같다. 프로세서들(12e 및 12c) 간의 읽기 라인(18) 및 대응하는 쓰기 라인(20)이 모두 하이일 때, 두 개의 라인들(18 및 20)은 모두 그것을 하이로 유지하고 있는 각각의 프로세서들(12)에 의해 해제된다. (본 예에서, 전송 프로세서(12e)는 쓰기 라인(18)을 하이로 유지하고, 수신 프로세서(12c)는 읽기 라인(20)을 하이로 유지한다.) 그러면, 수신 프로세서(12c)는 양쪽 라인들(18 및 20)을 모두 로우가 되게 한다. 실제 경우, 수신 프로 세서(12c)는 전송 프로세서(12c)가 읽기 라인(18)을 해제하기 전에 라인들(18 및 20)을 로우가 되게 하고자 시도할 수 있다. 하지만, 라인들(18 및 20)은 하이가 되고 단지 약하게 로우로 유지(래치)되기 때문에, 그 라인(18 또는 20)이 자신을 하이로 유지하고 있는 프로세서(12)에 의해 해제될 때까지 라인(18 또는 20)을 로우가 되게 하려는 어떠한 시도도 실제로 성공하지 못한다.
데이터 버스(16)의 두 라인들(18 및 20)이 로우가 되면, 이것은 "확인(acknowledge)" 상황이다. 이러한 확인 상황시, 프로세서들(12e 및 12c) 각각은 그 자신의 내부 확인 라인을 하이로 설정한다.
상기 설명의 견지에서 알 수 있는 바와 같이, 프로세서(12e)가 프로세서(12c)에 먼저 쓰기를 시도하는지, 아니면 프로세서(12c)가 먼저 프로세서(12e)로부터 읽기를 시도하는지에 관계없이, 동작들은 본질적으로 같다. 동작은 프로세서들(12 및 12c)가 모두 준비될 때 까지 완료될 수 없으며, 어느 프로세서(12e 또는 12c)가 먼저 준비되든지 간에, 첫 번째 프로세서(12)는 다른 프로세서(12e 또는 12c)가 전송을 완료할 때까지 "비활성 상태"가 된다. 상기 설명된 프로세스를 다른 관점에 보면, 실제로 쓰기 프로세서(12e)와 읽기 프로세서(12c)는 모두 이들이 각각 쓰기 명령 및 읽기 명령을 실행할 때에 비활성화 상태가 되지만, 읽기 라인(18)과 쓰기 라인(20)이 모두 하이가 되면, 트랜잭션에 가장 나중에 들어가는 프로세서는 거의 즉시 재활성화되며, 반면에 그 트랜잭션을 개시한 제 1 프로세서(12)는 제 2 프로세서(12)가 프로세스를 완료할 준비가 될 때 까지 거의 막연하게 비활성화 상태에 머물 수 있다.
본 발명자는 장치들 간에 효율적인 비동기 통신을 가능하게 하는 중요한 특징은 확인 신호(acknowledge signal) 또는 조건의 유형이라고 믿었다. 종래 기술에서는, 장치들 간의 대부분의 통신은 클럭화되며, 수신 장치가 데이터를 적절히 수신하였다는 것을 송신 장치가 알 수 있는 직접적인 방법이 없다. 체크섬 동작(checksum operation) 등의 방법들을 이용하여, 데이터가 정확하게 수신되었다는 것을 보장하고자 시도하였으나, 전송 장치는 동작이 완료되었다는 것을 직접적으로 확인할 수 없었다. 본원에서 설명되는 본 발명의 방법은 필요한 확인 조건(acknowledge condition)을 제공하는 바, 이에 의해 장치들 간의 비동기 통신을 가능하게 하거나 적어도 실용적이게 한다. 또한, 확인 조건은 이러한 확인 조건이 발생할 때 까지 하나 이상의 장치들이 "비활성화 상태"가 될 수 있게 한다. 확인 조건은 (상호연결 데이터 버스(16)를 통해 또는 개별적인 신호 라인을 통해) 프로세서들(12) 간에 전송되는 개별적인 신호에 의해 프로세서들(12) 간에 통신될 수 있고, 이러한 확인 신호는 본 발명의 이러한 양상의 범주 내에 있다. 하지만, 여기에서 설명되는 본 발명의 실시예에 따르면, 확인 방법이 통신에 실질적으로 영향을 미치기 위해 임의의 부가적인 신호, 클럭 사이클, 타이밍 펄스 또는 설명된 것 이외의 임의의 자원을 요구하지 않는다는 점에서, 이와 관련하여 훨씬 많은 경제성이 있음을 이해할 수 있다.
4개의 명령들(52)이 명령 워드(48)에 포함될 수 있기 때문에, 그리고 본 발명에 따르면, 전체 명령 워드(48)가 프로세서들(12) 간에서 동시에 통신할 수 있기 때문에, 이것은 하나의 동작으로 매우 작은 프로그램을 전송할 수 있는 이상적인 기회를 제시한다. 예를 들어, 작은 "For/Next" 루프의 대부분은 단일 명령 워드(48)에서 구현될 수 있다. 도 6은 마이크로-루프(100)를 도시한다. 종래 기술의 다른 루프들과 다르지 않게, 마이크로-루프(100)는 FOR 명령(102)과 NEXT 명령(104)을 갖는다. 명령 워드(48)(도 4)가 4개의 명령들(52)을 포함하기 때문에, 그 명령 워드(48)는 단일 명령 워드(48) 내에 3개의 연산 명령들(106)을 포함할 수 있다. 연산 명령들(106)은 본질적으로 프로그래머가 마이크로-루프(100)에 포함하기를 원할 수 있는 이용가능한 명령들중 임의의 것이 될 수 있다. 하나의 프로세서(12)로부터 다른 프로세서로 전송될 수 있는 마이크로-루프(100)의 전형적인 예는 제 2 프로세서(12)의 RAM(24)으로부터 읽기를 실행하거나 또는 이에 대해 쓰기를 행하기 위한 명령들의 세트이며, 이에 따라 제 1 프로세서(12)는 이용가능한 RAM(24) 용량을 "차용(borrow)"할 수 있다.
FOR 명령(102)은 요구되는 반복의 횟수를 나타내는 값을 리턴 스택(28) 상에 푸쉬(push)한다. 즉, 데이터 스택(34)의 상부의 T 레지스터(44) 상의 값은 리턴 스택(28)의 R 레지스터(29) 상에 푸쉬된다. FOR 명령(102)은 임의의 슬롯(54)에 위치될 수 있다. FOR 명령(102)이 제 3 슬롯(54d)에 위치되지 않는 경우, 그 명령 워드(48) 내의 나머지 명령들(52)은, 일반적으로 다음 로드되는 명령 워드(48)가 되는 마이크로-루프(100)로 진행하기 전에 실행된다.
본 발명의 현재 설명되는 실시예에 따르면, 도 5에서 도시된 NEXT 명령(104)은 특정 타입의 NEXT 명령(104)이다. 그 이유는 이 명령이 제 3 슬롯(54d)(도 5)에 위치되기 때문이다. 본 발명의 이러한 실시예에 따르면, "통상적인" NEXT 명령(미 도시)의 다음에 오는 특정 명령 워드(40) 내의 모든 데이터는 어드레스(for/next 루프가 시작하는 어드레스)인 것으로 가정한다. NEXT 명령(104)에 대한 오피코드는, (본원에서 전술한 바와 같이, 이것이 제 3 슬롯(54d)에 있는 경우, 마지막의 2개의 디지트(digit)들이 명시적으로 써 넣어지기보다는 그냥 가정된다는 명백한 예외를 가지며) 4개의 슬롯들(54)중 어디에 있는지와 관계없이 동일하다. 하지만, 이것이 제 3 슬롯(54d) 내에 있을 때에 NEXT 명령(104)을 따르는 어떤 어드레스 데이터도 없기 때문에, 제 3 슬롯(54d) 내의 NEXT 명령(104)은 MICRO-NEXT 명령(104a)인 것으로 가정할 수 있다. MICRO-NEXT 명령(104a)은 복귀할 어드레스로서 그것이 위치되어 있는 동일한 명령 워드(48)의 제 0 슬롯(54a)에 위치된 제 1 명령(52)의 어드레스를 사용한다. MICRO-NEXT 명령(104a)은 또한 R 레지스터(29)로부터의 값(이것은 최초에 FOR 명령(102)에 의해 거기에 푸쉬되었던 것이다)을 취하여, 1 만큼 감분시킨 다음, R 레지스터(29)에 복귀시킨다. R 레지스터(29) 상의 값이 (0과 같은) 소정의 값에 도달하면, MICRO-NEXT 명령은 다음 명령 워드(48)를 로드하여, 전술한 바와 같이 진행할 것이다. 하지만, MICRO-NEXT 명령(104a)이 소정의 값보다 큰 R 레지스터(29)로부터의 값을 읽게 되면, 그것은 자신의 명령 워드(48)의 슬롯 0(54a)에서 동작을 재개하여, 그 세개를 포함하여 슬롯 0에 위치한 3개의 명령들(52)을 실행한다. 즉, 본 실시예에서, MICRO-NEXT 명령(104a)은 항상 3개의 연산 명령들(106)을 실행한다. 일부 경우들에 있어서, 잠재적으로 이용가능한 3개의 모든 명령어들(52)을 이용하는 것이 바람직하지 않을 수 있기 때문에, "NOP" 명령은 필요에 따라 슬롯들(54)중 하나 이상을 채우는 데에 이용가능하다.
주목할 사항으로서, 마이크로-루프들(100)은 전체적으로 단일 프로세서(12) 내에서 사용될 수 있다. 사실상, 이용가능한 기계 언어 명령들의 전체 세트는 연산 명령들(106)로서 이용가능하며, 마이크로-루프들의 응용 및 사용은 프로그래머의 창작력에 의해서만 제한된다. 하지만, 본질적으로 데이터 버스(16)로부터 직접적으로 비롯된 그 내의 명령(52)을 실행하기 위해 프로세서(12)가 명령 워드(48)를 이웃 프로세서(12)에게 전송하는 성능과 단일 명령 워드(48) 내의 전체 마이크로-루프(100)를 실행하는 성능을 결합하게 되면, 프로세서(12)로 하여금 그 이웃들의 자원들을 활용할 수 있게 하는 강력한 툴을 제공한다.
모두가 단일 데이터 워드(48) 내에 포함되는 소형 마이크로-루프(100)는 본원에서 설명되는 바와 같이 프로세서들(12) 간에서 통신될 수 있으며, 이것은 본원에서 설명되는 바와 같이 명령 워드(48)에 포함되는 임의의 다른 명령들 세트와 마찬가지로 수신 프로세서(12)의 통신 포트(38)로부터 직접적으로 실행될 수 있다. 이러한 종류의 "마이크로-루프"(100)에 대한 많은 사용들이 있지만, 전형적인 사용은 하나의 프로세서(12)가 이웃 프로세서(12)의 메모리 상에 어떠한 데이터를 저장하기를 원하는 경우가 될 것이다. 이것은, 예를 들어 먼저 그 이웃 프로세서에 명령을 전송할 수 있는데, 이 명령에 의해 이웃 프로세서에게 유입 데이터 워드를 특정 메모리 어드레스에 저장하고, 그 어드레스를 증분시킨 다음, 소정의 반복 횟수(이것은 전송되어야 하는 데이터 워드들의 수이다)로 반복할 것을 명령한다. 데이터를 다시 읽기 위해, 제 1 프로세서는 제 2 프로세서(여기에서는 저장을 위해 사용된 것)에게 유사한 마이크로-루프를 사용하여, 저장된 데이터를 다시 제 1 프로 세서에 쓸 것을 명령한다.
본원에서 설명되는 직접 실행의 양상과 관련하여 마이크로-루프(100) 구조를 사용함으로써, 프로세서(12)는 필요한 데이터 저장소가 각각의 개별적인 프로세서(12) 내에 구축된 비교적 작은 용량을 초과할 때, 초과 데이터의 저장을 위하여 휴식하고 있는 다른 이웃 프로세서(12)를 이용할 수 있다. 이러한 예는 데이터 저장의 관점에서 설명되었지만, 다른 프로세서(12)로 하여금 어떠한 동작들을 수행하고, 그 결과를 저장하며, 그리고 소정의 횟수로 반복하게 하는 마이크로-루프(100)를 생성함으로써, 프로세서(12)로 하여금 그 이웃 프로세서가 자신의 연산 자원(computational resource)들을 공유하게 하도록 하는 데에 동일한 기술이 동등하게 이용될 수 있다. 이해될 수 있는 바와 같이, 본 발명의 마이크로-루프(100) 구조가 사용될 수 있는 방식들의 개수는 거의 무한정이다.
본원에서 전술한 바와 같이, 본 발명에서의 현재 설명되는 실시예에서, 데이터 또는 명령들은 본원에서 설명되는 방식으로 통신될 수 있으며, 이에 따라 명령들은 본질적으로 데이터 버스(16)로부터 직접적으로 실행될 수 있다. 즉, 명령들을 RAM(24)에 저장한 다음, 실행 전에 이들을 호출할 필요가 없다. 대신에, 본 발명의 이러한 양상에 따르면, 통신 포트(38) 상에 수신되는 명령 워드(48)는 본질적으로 이것이 RAM(24)이나 ROM(26)로부터 호출되는 경우와 특별히 다르게 취급되지 않는다.
이용가능한 기계 언어 명령들중 하나는 FETCH 명령이다. FETCH 명령은 어디로부터 18 비트 워드를 페치할 것인 지를 결정하기 위해 A 레지스터(40a) 상의 어 드레스를 사용한다. 당연하게는, 프로그램은 A 레지스터(40a) 상에 정확한 어드레스를 위치시키도록 미리 규정해야할 필요가 있을 것이다. 본원에서 전술한 바와 같이, A 레지스터(40a)는 18비트 레지스터이며, 이에 따라 페치가 발생할 수 있는 모든 잠재적인 자원들이 차별화될 수 있도록 하는 데에 이용가능한 충분한 범위의 어드레스 데이터가 있다. 즉, ROM에 할당된 어드레스들 범위 및 RAM에 할당된 다른 어드레스들 범위가 있으며, 그리고 각 포트들(38) 및 외부 I/O 포트들(39)에 대한 특정 어드레스들이 있다. FETCH 명령은 자신이 T 레지스터(44) 상에서 페치하는 18 비트를 위치시킨다. 여기에서의 중요한 장점은, 루프 내에서 어떠한 명령어 페치도 없다는 것이다. 그러므로, 약 30%의 효율성이 증가하며, 그에 대응하여 전력 소비도 감소한다.
대조적으로, 본원에서 전술한 바와 같이, (데이터와 대조적으로) 실행가능 명령들은 명령 레지스터(30a)에 일시적으로 저장된다. 18 비트 명령 워드(48)를 명령 레지스터(30a)에 "페치"하기 위한 어떠한 특정 커맨드도 없다. 대신에, 명령 레지스터(30a)에 실행가능 명령들이 더 이상 남아있지 않게 되면, 프로세서는 "다음" 명령 워드(48)를 자동으로 페치한다. "다음" 명령 워드가 어디에 위치되어 있는 지는, 여기에서 P 레지스터(40c)라 불리는 "프로그램 카운터" 또는 "pc"에 의해 결정된다. P 레지스터(40c)는, 명령 워드들(48)의 시퀀스가 RAM(24)이나 ROM(26)으로부터 페치되는 경우에서와 같이, 종종 자동으로 증분된다. 하지만, 이러한 일반적인 법칙에는 많은 예외가 있다. 예를 들어, JUMP 또는 CALL 명령은, P 레지스터(40c)가 이러한 JUMP 또는 CALL 명령 이후에 증분되기 보다는, 현재에 적재된 명령 워 드(48)의 나머지에 있는 데이터에 의해 지정되는 어드레스에 의해 적재되게 한다. P 레지스터(40c)가 이후 하나 이상의 포트들(38)에 대응하는 어드레스로 적재되면, 다음 명령 워드(48)는 포트들(38)로부터 명령 레지스터(30a)로 적재될 것이다. P 레지스터(40c)는 또한, 명령 워드(48)가 포트(38)로부터 명령 레지스터(30a)로 검색될 때에도 증분되지 않는다. 오히려, P 레지스터(40c)를 변경하기 위해 특정의 JUMP 또는 CALL 명령이 실행될 때까지, 그 동일한 포트 어드레스를 계속해서 보유할 것이다. 즉, 일단 프로세서(12)가 포트(38)로부터 그의 다음 명령을 탐색하도록 명령받게 되면, 다음 명령 워드(48)에 대해 메모리(RAM(24) 또는 ROM(26))로 다시 돌아가는 것과 같이 다른 곳을 탐색하도록 명령받을 때 까지, 그 동일한 포트(38)(또는 포트들(38))로부터 명령들을 계속하여 탐색할 것이다.
전술한 바와 같이, 프로세서(12)는 현재의 명령 워드(48)에 더 이상의 실행가능 명령들이 남아 있지 않은 때에, 페치되는 다음 18개의 비트들이 명령 레지스터(30a)에 위치되어야 한다는 것을 알고 있다. 디폴트에 의해, JUMP 또는 CALL 명령 이후(또는 또한 본원에서 구체적으로 논의되지 않는 어떠한 다른 명령들 이후) 현재의 명령 워드(48)에 더 이상의 실행가능 명령들이 남아 있지 않게 되는데, 그 이유는 정의에 의해, JUMP 또는 CALL 명령 이후의 18개 비트의 명령 워드의 나머지 부분이 JUMP 또는 CALL 명령에 의해 참조되는 어드레스에 전용되기 때문이다. 이를 진술하는 다른 방식은, 전술한 프로세스들이, JUMP 또는 CALL 명령이 단지 메모리 어드레스 등에 대한 것이라기 보다는, 선택적으로 포트(38)에 대한 것이 될 수 있다는 사실(오직 이것으로만 한정되지 않는다)을 포함하는 많은 방식들에서 고유하 다는 것이다.
기억될 사항으로서, 본원에서 전술한 바와 같이, 프로세서(12)는 하나의 포트(38)로부터 또는 포트들(38)의 그룹중 임의의 것으로부터 그의 다음 명령을 탐색할 수 있다. 따라서, 어드레스들은 다양한 포트들(38)의 조합들에 대응하도록 제공된다. 예를 들어, 프로세서가 포트들(38)의 그룹으로부터 명령을 페치하도록 명령을 받으면, 선택된 포트들(38)중 임의의 것으로부터 첫 번째의 이용가능한 명령 워드(48)를 수락할 것이다. 만일 어떠한 이웃 프로세서(12)도 이러한 포트들(38)중 임의의 것에 아직 쓰고자 시도하지 않았다면, 해당 프로세서(12)는 상기에서 상세시 설명한 바와 같이, 이웃 프로세서가 선택된 포트(38)에 쓰기를 할 때 까지 "비활성화 상태가 된다".
도 6은 전술한 직접 실행 방법(120)의 일 예를 도시하는 흐름도이다. 본원에서 전술한 바와 같이, 동작들의 "정상적인" 흐름은 명령 레지스터(30a)에 더 이상의 실행가능 명령들이 남아 있지 않을 때에 시작된다. 이때, 프로세서(12)는 "워드 페치(fetch word)" 동작(122)에 의해 표시된 바와 같이 다른 명령 워드를 "페치"한다(주목할 사항으로서, 여기서 실제 FETCH 명령이 사용되지 않는다는 점에서, 용어 "페치"는 본원에서 일반적인 의미로 사용된 것이다). 이 동작은 (도 6의 흐름도에서 "어드레스" 결정 동작(124)에 의해 나타낸 바와 같이) P 레지스터(40c)의 어드레스에 따라 수행될 것이다. 만일 P 레지스터(40c)의 어드레스가 RAM(24) 또는 ROM(26) 어드레스인 경우, "메모리로부터 페치" 동작(126)에서, 다음 명령 워드(48)가 지정된 메모리 위치로부터 검색된다. 한편, P 레지스터(40c)의 어드레스 가 포트(38) 또는 포트들(38)의 어드레스(메모리 어드레스가 아님)인 경우, 다음 명령 워드(48)는 "포트로부터의 페치" 동작(128)에서, 지정된 포트 위치로부터 검색될 것이다. 어느 경우이든, 검색되는 명령 워드(48)는 "명령 워드 검색" 연산(130)에서 명령 레지스터(30c)에 위치된다. "명령 워드 실행" 동작(132)에서, 명령 워드(48)의 슬롯들(54)에 있는 명령들은 본원에서 전술한 바와 같이 순차적으로 수행된다.
"점프" 결정 동작(134)에서는, 명령 워드(48)의 연산들중 하나가 JUMP 명령인지, 아니면 본원에서 전술한 바와 같이, 계속되는 "정상적인" 진행으로부터 동작을 전환시키게 될 다른 명령인지가 결정된다. 만일 "JUMP" 명령이면, 그 JUMP 명령(또는 이러한 다른 것) 이후 명령 워드(48) 내에 제공되는 어드레스는 "P 레지스터 로드" 동작(136)에서 P 레지스터(40c)에 제공되고, 도 6의 흐름도에 나타낸 바와 같이 시퀀스는 "워드 페치" 동작(122)에서 다시 시작된다. 만일 "JUMP" 명령이 아니면, "포트 어드레스" 결정 동작(138)으로 나타낸 바와 같이, 다음 동작은 마지막 명령 페치가 포트(38)로부터였는지, 아니면 메모리 어드레스로부터 였는지에 의존한다. 만일 마지막 명령 페치가 포트(38)로부터 였다면, P 레지스터(30a)에 대한 어떠한 변경도 이루어지지 않고, 시퀀스는 "워드 페치" 동작(122)으로부터 시작하여 반복된다. 한편, 마지막 명령 페치가 메모리 어드레스(RAM(24) 또는 ROM(26))로부터였다면, 도 6의 "P 레지스터 증분" 동작(140)에 의해 나타낸 바와 같이, "워드 페치" 동작(122)이 이루어지기 전에, P 레지스터(30a) 내의 어드레스가 증분된다.
상기 설명은 실제 동작 단계들을 나타내는 것으로 의도되지 않는다. 대신에, 본 발명의 설명되는 실시예에 따라 수행되는 것으로부터 비롯되는 다양한 결정들 및 동작들의 흐름도이다. 실제로, 이러한 흐름도는, 제시되어 설명되는 각 동작이 개별적인 별개의 순차 동작을 필요로 하는 것을 의미하는 것으로서 이해되서는 안된다. 실제로, 도 6의 흐름도에서 설명되는 많은 동작들은 일반적으로 동시에 이루어진다.
도 7은 프로세서(150)를 경계시키는 방법의 예를 나타내는 흐름도이다. 이전에 설명된 바와 같이, 설명되고 있는 실시예의 프로세서들(12)은 입력을 기다리는 동안 "비활성화 상태가 된다". 도 1 내지 4와 관련하여 설명되는 실시예에서와 같이, 이러한 입력은 이웃 프로세서(12)로부터 올 수 있다. 대안적으로, 또한 본원에서 이전에 설명된 바와 같이, 다이(14)의 에지에 인접하는 통신 포트들(38)을 갖는 프로세서들(12)은, 이러한 프로세서(12) 내에 설계되거나, 또는 그렇지 않으면 프로세서(12)의 외부에 있지만 그와 결합되는 부가 회로를 구비함으로써, 이러한 통신 포트(38)가 외부 I/O 포트(39)로서 기능할 수 있게 한다. 어느 경우이든, 본 발명에 따른 결합은, "비활성화된" 프로세서(12)가 활성화될 준비를 하고 있다가 입력이 수신될 때에 어떠한 정해진 동작을 재빨리 취할 수 있다는 부가적인 장점을 제공할 수 있다. 이러한 과정은 작업자 모드(worker mode)라 지칭된다.
각 프로세서(12)는 그것이 시작될 때 어떠한 어드레스로 JUMP하도록 프로그램된다. 이 어드레스는 주어진 일을 수행하도록 특정 프로세서(12)를 시작시키는 제 1 명령 워드(48)의 어드레스이다. 명령 워드는, 예를 들어 ROM(26)에 위치될 수 있다. 콜드 스타트(cold start) 이후, 프로세서(12)는 작업자 모드 루프로서 알려 져있는 프로그램과 같은 프로그램을 로드할 수 있다. 중앙 프로세서들(12), 에지 프로세서들(12), 코너 프로세서들(12)에 대한 작업자 모드 루프는 서로 다르다. 또한, 어떠한 프로세서들(12)은 어레이(10) 내의 자신들의 위치들과 관련하여 부트업(boot-up)시 ROM 내에서 특정한 태스크를 가질 수 있다. 작업자 모드 루프는 이후 상세히 설명된다.
이러한 특징이 이용될 수 있는 많은 방법들이 있지만, 단지 하나의 "컴퓨터를 경계시키는 방법(computer alert method)"에 대한 예가 도 7에 실시예가 제공되어 있으며, 참조 부호 150으로 나타나있다. 도 7로부터 알 수 있는 바와 같이, "비활성화 상태이지만 경계 상태" 동작(152)에 있어서, 프로세서(12)는 "비활성화 상태"가 되고, 이에 따라 이웃 프로세서(12)로부터, 또는 1개 이상(모두 4개)의 이웃 프로세서들로부터 입력을 기다리거나, 또는 에지 프로세서(12)의 경우에는 외부 입력을 기다리거나, 이웃 프로세서(12)로부터 입력들 그리고/또는 외부 입력들의 어떠한 결합을 기다리게 된다. 본원에서 설명되는 바와 같이, 프로세서(12)는 "비활성화 상태"가 되어, 읽기 동작 또는 쓰기 동작중 어느 하나의 완료를 기다릴 수 있다. 본 예에서 설명되는 바와 같이, 어떠한 가능한 "입력"을 기다리기 위해 프로세서(12)가 이용되는 경우, 기다리고 있는 프로세서가 자신의 읽기 라인(18)을 하이로 설정하여, 이웃하는 또는 외부의 소스로부터의 "쓰기"를 기다린다고 가정하는 것은 당연할 것이다. 실제로, 이것이 현재 통상의 조건으로 예측되고 있다. 하지만, 기다리고 있는 프로세서(12)가 그의 쓰기 라인(20)을 하이로 설정하고, 그에 따라 이웃하는 또는 외부의 소스가 그것을 "읽을" 때 활성화되는 것 역시 본 발명 의 범위 내에 있다.
"활성화" 동작(154)에 있어서, 이웃하는 프로세서(12) 또는 외부 장치(39)가 기다리고 있는 트랜잭션을 완료했기 때문에, 비활성화 상태의 프로세서(12)는 동작을 재개한다. 기다리고 있는 트랜잭션이 실행될 명령 워드(48)의 수신이었다면, 프로세서(12)는 그 내의 명령들을 실행하도록 진행된다. 기다리고 있는 트랜잭션이 데이터의 수신이었다면, 프로세서(12)는 큐(queue) 내의 다음 명령(이것은 본 명령 워드(48) 내의 다음 슬롯(54)의 명령이다)을 실행하도록 진행하거나, 또는 그렇지 않으면 다음 명령 워드(48)가 로드되고, 다음 명령은 그 다음 명령 워드(48)의 슬롯 0 내에 있게 될 것이다. 어느 경우이든, 상기 설명된 방식으로 이용되고 있는 동안, 다음 명령은 막 수신된 입력을 처리하기 위해 1개 이상의 명령들의 시퀀스를 시작할 것이다. 이러한 입력을 처리하기 위한 옵션들은 어떠한 미리 정의된 기능을 내부적으로 수행하도록 반응하고, 어레이(10) 내의 1개 이상의 다른 프로세서들과 통신하거나, 또는 (소정의 조건하에서 인터럽트들이 무시되는 통상의 종래 기술과 마찬가지로) 심지어 입력을 무시하는 것을 포함할 수 있다. 이러한 옵션들은 도 7에서 "입력에 대해 작용(act on input)" 동작(156)으로서 도시된다. 주목할 사항으로서, 어떠한 경우에서는 입력의 콘텐츠가 중요하지 않을 수도 있다. 어떠한 경우에는, 예를 들어 외부 장치가 통신을 시도했다는 것만으로도 중요한 사실이 될 수 있다.
당업자라면 상기 설명된 동작 방법이 통상의 인터럽트 이용에 대한 보다 효율적인 대안으로서 유용하게 될 것임을 인식할 것이다. 프로세서(12)가 1개 이상의 자신의 읽기 라인들(18)(또는 쓰기 라인(20))을 하이로 설정할 때, 이것은 "경계" 상태라 불릴 수 있다. 이러한 경계 상태에서, 프로세서(12)는 하이로 설정된 읽기 라인 또는 라인들(18)에 대응하는 데이터 버스(16) 상에서 자신에게 전송된 임의의 명령을 즉시 실행할 준비를 하거나, 또는 대안적으로는 데이터 버스(16) 상으로 전송되는 데이터에 대해 동작할 준비가 된다. 이용가능한 프로세서들(12)의 어레이가 있는 경우, 임의의 소정의 시간에 하나 또는 그 이상이 상기 설명된 경계 상태가 되도록 이용될 수 있으며, 이에 따라 지정된 입력들의 세트중 임의의 것에 의해 동작이 시작될 것이다. 이것은 프로세서의 "주의를 얻기 위해(get the attention)" 통상의 인터럽트 기술을 이용하는 것에 대해 바람직한데, 그 이유는 인터럽트에 의해, 프로세서는 인터럽트 요청에 응답하여 어떠한 데이터를 저장하고, 어떠한 데이터를 로드하는 등을 행해야 하기 때문이다. 본 발명에 따르면, 프로세서를 경계 상태에 두고 필요한 입력을 기다리는 것에 전용될 수 있는 바, 이에 의해 입력에 의해 제공되는 명령들의 실행을 시작함에 있어서 어떠한 단일의 명령 주기도 낭비하지 않게 된다. 다시 한번 주목할 사항으로서, 현재 설명되고 있는 실시예에서, 경계 상태에 있는 프로세서들은 실제로 이들이 본질적으로 어떠한 전력도 이용하지 않고 있다는 의미에서 "비활성화" 상태이지만, 이들이 입력에 의해 즉시 동작가능하게 된다는 점에서 "경계" 상태에 있게 된다. 하지만, "비활성화" 상태가 아니더라도 프로세서에서 "경계" 상태를 구현하는 것 역시 본 발명의 범위 내에 있다. 설명되는 경계 상태는 본질적으로, 그렇지 않으면 통상의 종래 기술의 인터럽트(하드웨어 인터럽트 또는 소프트웨어 인터럽트)가 이용되게 되는 모든 상황에서 이용될 수 있다.
도 8은 프로세스 경계 방법(150a)의 다른 예이다. 이것은 모니터링하는 프로세서(12f)(도 1)와 어떠한 다른 태스크가 할당된 다른 프로세서(12g) 간의 상호 작용이 바람직하거나 필요한 단지 하나의 예일 뿐이다. 도 8에서 볼 수 있는 바와 같이, 각 프로세서(12f 와 12g)에 대해 하나씩 일반적으로 독립적인 2개의 흐름도가 있다. 이는 본 발명의 협동적 코프로세서 접근의 특성을 나타내는 바, 여기서 프로세서들(12) 각각은 여기에서 설명되는 바와 같이 상호 작용이 달성되는 때의 경우를 제외하고는 독립적으로 실행할 수 있는 그 자신의 주어진 일들이 있다. 본 발명은, 이러한 입력들이 외부 장치로부터 오든지, 아니면 어레이(10)의 다른 프로세서(12)에 오든 지에 관계없이, 입력을 처리하기 인터럽트 이용하는 것에 대한 대안을 제공한다. 인터럽트를 처리하기 위해 프로세서(12)로 하여금 하고 있던 것을 그만두게 하는 대신에, 여기에서 설명되는 본 발명에 따른 결합에 의해, 이미 설명한 바와 같이 프로세서(12)는 "비활성화 상태이지만 경계" 상태로 진입하게 할 수 있다. 따라서, 한 개 이상의 프로세서(12)가 특정한 입력을 받고, 그 입력에 대해 작용하도록 지정될 수 있다.
프로세서(12f) 및 "비활성화 상태이지만 경계 상태 진입(enter inactive but alert status" 동작(152)과 관련하여, "활성화" 동작(154) 및 "입력에 대해 작용(act on input)" 동작(156)은 각각 프로세서 경계 방법(150)의 제 1 예와 관련하여 본원에서 이전에 설명된 바와 같이 이루어진다. 하지만, 본 예에서, 프로세서들(12f 와 12g) 간에 상호 작용의 필요성을 예측하면, "입력에 대한 반응" 동 작(156) 이후, 프로세서(12f)는 "정보 전송?" 결정 단계(158)로 들어가며, 그 프로그래밍에 따라, 방금 받은 입력이 다른 프로세서(12g)의 주목을 필요로 하는 지가 결정된다. 전송이 필요 없다(아니오)고 결정되면, 프로세서(12f)는 "비활성 상태이지만 경계 상태"로 들어가거나, 또는 이전에 설명된 것과 같은 어떠한 다른 대안적인 상태(alternative)로 들어간다. 만약 "예"이면, 프로세서(12f)는 "다른 프로세서로 전송(send to other)" 동작(160)에서, 이전에 상세히 설명한 바와 같이 프로세서(12g)와의 통신을 개시한다. 주목할 사항으로서, 프로그래머의 선택에 따라, 외부 장치(82)의 입력에 대응하여 자체 생성한 명령어와 같은 명령어를 전송할 수 있게 있다. 대안적으로, 프로세서(12f)는 프로세서(12g)에게 데이터를 보낼 수 있는 바, 이러한 데이터는 프로세서(12) 내에서 내부적으로 생성되거나, 또는 외부 장치(82)로부터 "전달(pass through)"될 수 있다. 또 다른 대안에 있어서, 프로세서(12f)는 특정한 경우, 프로세서(12g)가 외부 장치(82)로부터 입력을 수신할 때에 프로세서(12g)로부터 읽기를 행하고자 시도할 수 있다. 프로그래머는 이러한 모든 기회들을 이용할 수 있다.
일반적으로 프로세서(12g)는, "주요 기능 실행(execute primary function)" 동작(162)으로 나타낸 바와 같이, 무엇이든 자신의 할당된 주요 태스크를 달성하기 위해 코드를 실행한다. 하지만, 프로그래머가 프로세서들(12f 및 12g) 간에 가끔씩의 상호 작용이 바람직하다고 결정하면, 프로그래머는 프로세서(12g)가 종종 포즈되게 함으로써, "입력 검색(look for input)" 동작(166)으로 나타낸 바와 같이, 하나 이상의 그 이웃들이 통신을 시도하였는 지의 여부를 확인한다. "입력?" 결정 동 작(168)은 통신이 대기하고 있는 경우(예를 들어, 프로세서(12f)가 프로세서(12g)에 대해 이미 쓰기를 개시한 경우)에 이루어진다. 이미 통신이 개시되었으면("예"), 프로세서(12g)는 "다른 프로세서로부터 수신(receive from other)" 동작(170)에서, 본원에서 이미 상세히 설명된 바와 같이 통신을 완료한다. 만약 "아니요"이면, 프로세서(12g)는 도 8에 도시된 바와 같이, 그의 할당된 기능을 실행하는 것으로 복귀한다. "다른 프로세서로부터의 수신" 동작(170) 이후, 프로세서(12g)는 "입력에 대한 작용" 동작(172)에서, 수신된 입력에 대해 동작한다. 상기 언급한 바와 같이, 프로그래머에 의해, 프로세서(12g)가 입력과 같은 명령들을 기대하는 것으로서 정해질 수 있는 바, 이 경우 본원에서 이미 설명된 바와 같이, 프로세서(12g)는 명령들을 실행한다. 대안적으로, 프로세서(12g)는 처리할 데이터를 기대하도록 프로그램될 수 있다.
도 8의 예에서는, "입력에 대한 반응" 동작(172) 이후, 프로세서(12g)는 자신의 주요 기능을 수행하는 것으로 복귀된다(즉, "주요 기능 실행" 동작(162)으로 복귀된다). 하지만, 더욱 복잡한 경우가 발생할 수 있다. 예를 들어, 프로세서(12f)로부터 받은 어떠한 입력에 의해, 할당된 이전의 주요 기능을 중단하고 새로운 것을 시작하거나, 그렇지 않으면 단지 잠시 중단하고 추가의 입력을 기다리도록 프로그램된다. 당업자라면 본원에서의 다양한 가능성들은 프로그래머의 창작력에 의해서만 제한된다는 것을 인식할 것이다.
주목할 사항으로서, 본원에서 설명되는 본 발명의 실시예에 따르면, 소정의 프로세서(12)는 태스크를 수행하는 동안 인터럽트될 필요가 없는데, 그 이유는 그 렇지 않으면 인터럽트가 필요한 입력들을 모니터링하고 처리하는 작업이 다른 프로세서(12)에게 할당되기 때문이다. 하지만, 다른 태스크를 처리하느라 바쁜 프로세서(12)는, 입력을 위해 자신의 포트들(38)을 주시하도록 프로그래밍되지 않는 한, 그리고 그렇게 될 때 까지, 디스터브(disturb)될 수 없다는 것을 주목하는 것이 중요하다. 따라서, 프로세서(12)로 하여금 다른 입력들을 탐색하기 위해 자신의 현재 태스크를 포즈시키거나 중지시키게 하는 것이 때때로 바람직하다. "포즈"의 개념 및 이용 방법은 이후 상세히 설명될 것이다.
프로세서들(12) 간의 각 포트(38)는 데이터 라인(22), 읽기 라인(18) 및 쓰기 라인(20)를 포함하는 바, 이 모든 것이 총체적으로 데이터 버스(16)를 구성한다. 각 포트는 데이터 버스(16) 외에도 핸드쉐이크 제어 신호(handshake control signal)로 구성된다. 데이터 라인(22)은 인접하는 2개의 프로세서들(12)의 포트들(38) 간에 연결된다. 예를 들어, STORE(쓰기) 명령 동안 워드 또는 오피코드는 프로세서(12e)의 T 레지스터(44)에 존재하고, 프로세서(12e)의 쓰기 라인(20)은 하이로 설정된다. 프로세서(12c)의 읽기 라인(18)이 하이로 설정되면, FETCH(읽기) 명령 동안 데이터는 프로세서(12c)의 T 레지스터(44)로 전달된다. 트랜잭션이 완료된 이후, 읽기 라인(18) 및 쓰기 라인(20)은 모두 로우로 세트된다. 이 예에서, 이러한 데이터는 P 레지스터(40c)에 의해 읽혀질 때에 명령어가 된다.
프로세서(12)가 메세지를 읽으면, 그 메세지는 데이터, 명령어 또는 신호의 형태를 가질 수 있다. 명령어들은 메모리에 저장되고, 동일한 프로세서(12)에 의해 이후 이용되거나, 다른 프로세서(12)에 의해 포트(38) 내에 저장되어 그 포트에 의 해 직접 실행될 수 있다. 프로세서(12)가 그의 P 레지스터(40c)를 이용하여 메모리로부터 읽기를 하고 있는 경우, 명령을 명령 레지스터(30a)에 넣음으로써 즉시 실행하거나, 또는 그 메세지를 데이터로서 읽어 T 레지스터(44)에 넣는다. FETCH 명령이 포트(38)로 예정되거나 어드레스되는 경우, 그 FETCH 명령은 메세지를 데이터로서 읽는다. JUMP 또는 CALL 명령이 포트(38)로 예정되거나, RETURN 명령이 포트(38) 어드레스로 예정되는 경우, P 레지스터(40c)는 포트(38)에 쓰여진 입력을 명령으로서 읽으며, 그 명령은 실행가능한 코드로서 취급된다.
수신 프로세서(12)는 메세지를 데이터로서 읽고, 메세지를 데이터로서 쓸 수 있다. 라우팅되는(즉, 하나의 프로세서(12)로부터 중간 프로세서들(12)을 통해 비인접 프로세서(12)에 전송되는) 메세지는 의도되는 수신인에게 도달할 때 까지 데이터로서 해석되며 각각의 연속적인 프로세서(12)의 T 레지스터(44) 내로 읽혀진 다음, 그 메세지는 (P 레지스터(40c)로부터 읽혀진) 코드로서 해석된 후 실행된다. 따라서, 메세지가 (A 레지스터(40a)에 의해 특정되는 메모리의 콘텐츠를 읽는 것으로 정의되는) FETCH A 동안, 또는 (A 레지스터(40a)에 의해 특정되는 메모리의 콘텐츠를 읽고, A 레지스터(40a)에 1을 부가하는 것으로서 정의되는) FETCH A+ 동안, 또는 (P 레지스터(40c)에 의해 특정되는 콘텐츠들을 읽고, P 레지스터(40c)에 1을 부가하는 것으로서 정의되는) FETCH P+ 동안 읽혀지는 경우, 그 메세지는 읽기를 실행하는 프로세서(12)의 T 레지스터(44) 내로 전송된다. 프로세서(12)가 P 레지스터(40c)로부터 메세지를 읽고 있는 경우, 그 메세지는 수신 프로세서(12)의 명령 레지스터(30a) 내로 전송된다.
도 1은 단일 다이(14) 상에 위치하는 상호 연결된 프로세서들(12)의 어레이를 나타내는 바, 총 24개의 프로세서들(12)이 예로서 주어졌으며, 각 프로세서(12)는 그 주변에 위치하는 몇 개의 핀들을 갖는다. 각 프로세서 (12)는 우하좌상(RDLU)으로서 지정된 4개의 포트(38)를 구비하고 있다. 도 1에서, 프로세서(12e)는 4개의 인접하는 프로세서들(12)을 갖는 바, 중심의 프로세서(12e)에 대하여, 프로세서(12b)는 우측의 이웃이고, 프로세서(12d)는 하측의 이웃이고, 프로세서(12c)는 좌측의 이웃이며, 프로세서(12a)는 상측의 이웃이다. 비록 에지 프로세서(12)가 3개의 인접하는 이웃들을 갖고 코너의 프로세서들(12)이 단지 2개의 인접하는 이웃들을 갖기는 하지만, 이러한 에지 프로세서 및 코너 프로세서(12)는 RDLU라고도 지칭되는 4개의 포트들(38)을 여전히 갖는다.
도 9는 대안적인 어레이(12a)의 블록도이다. 본 발명의 이 예에서, 어레이(12a)는 24개의 프로세서들(12)을 갖는다. 또한, 본 실시예에서, 프로세서(12)는 미러잉(mirroring)으로서 불리는 특정의 상대적인 방위로 배열된다. 즉, 어레이(12a)의 상부로부터 제 2 및 제 4 로우((173)에 배열된 프로세서들(12)은 자신들의 x축(174)에 대해 플립(flip)됨으로써, 다운 포트들(38d)이 윗쪽을 향하게 된다. 어레이(10a)의 좌측으로부터 제 2, 4 및 6 칼럼(176)에 있는 모든 프로세서들(12)은 자신들의 y축(178)에 대해 플립됨으로써, 우 포트(38b)가 어레이(10)의 좌측을 향하게 된다. 그 결과, 프로세서들(N6, N8, N10, N18, N20 및 N22)은 자신들의 최초의 RDLU 방위를 유지하고; 프로세서들(N0, N2, N4, N12, N14 및 N16)은 자신들의 x축(174) 주위에서만 플립되고; 프로세서들(N7, N9, N11, N19, N21 및 N23)은 자신 들의 y축(178) 주위에서만 플립되고; 프로세서 노드들(N1, N3, N5, N13, N15 및 N17)은 자신들의 x축(174) 및 y축(178) 주위에서 플립된다. 어레이(10a)의 코너 및 에지에 위치하는 프로세서들(12)을 제외하고, 이러한 회전에 의해 모든 우 포트(38b)는 서로를 직접 향하게 되고; 모든 하 포트(38d)는 서로를 직접 향하게 되고; 모든 좌 포트(38c)는 서로를 향하게 되고; 모든 상 포트(38a)는 서로를 향하게 된다. 이하 보다 상세히 설명되는 바와 같이, 이에 의해 프로세서들(12)은 자신들의 가장 가까운 이웃 프로세서들(12)과 직접적으로 정렬되고 연결될 수 있는 바, 이는 프로세서들(12)의 상호 연결은 연결되는 이웃 프로세서(12)를 미러("mirror" 대칭)하기 때문이다.
프로세서들(12)이 미러되는 방향을 변경시키지 않는 어레이(10a) 내에서의 방향들을 지칭하기 위해, 본 발명자는 북남동서(North, South, East 및 West; NSEW)의 용어를 사용한다. 미러잉이 있다 하더라도, 북남동서의 방향은 자신들의 상대적인 방향을 유지한다. 이것은, 하나의 프로세서(12a)로부터 다른 비인접 프로세서(12)에 중간 프로세서들(12)을 통해 메세지를 전송하는 것으로서 이전에 설명되었던 라우팅 동안에 적절하다. 방향들(NSEW)은 ROM(26)에 위치하는 테이블 내에 있다.
상기 설명한 바와 같이 좌 포트(38c) 및 상 포트(38a)는 외부 I/O 포트(도 1)에 연결될 가능성이 있음에도 불구하고, 이들이 어레이(10a)의 바깥쪽 경계에 있을 때, 이들은 그 어레이(10a) 내부의 어느 것에도 연결되지 않는다. 하 포트(38d)와 우 포트(38b)는 로우와 칼럼의 수가 짝수인 한 항상 다른 프로세서(12)에 연결 된다. 예로서, 프로세서(N7)는 4개의 직교하는 인접 프로세서들, 즉 우 포트(38b)에 연결된 N6, 하 포트(38d)에 연결된 N1, 좌 포트(38c)에 연결된 N8 및 상 포트(38a)에 연결된 N13을 갖는다. 도 9a는, 각각 우 포트(38b), 하 포트(38d), 죄 포트(38c) 및 상 포트(38a)의 표기를 갖는 도 9의 4개의 노드들(N7, N8, N13 및 N14)의 확대도이다.
도 3에 나타낸 바와 같이, 각 프로세서(12)는 18 비트 I/O 레지스터(47)를 갖는다. 각 I/O 레지스터(47)는 특히 인접하는 이웃이 그 포트(38)로부터 읽기를 하고 있는지, 아니면 그 포트에 대해 쓰기를 하고 있는 지에 대한 정보를 포함한다. 도 10은 프로세서(12)에 대한 I/O 레지스터(47)의 부분도이다. 비트들(B9 내지 B16)은 프로세서(12)에 대한 읽기 및 쓰기 상태를 나타낸다. I/O 레지스터(47)는 그 통신 포트(38) 상에 읽기 및 쓰기 핸드쉐이크 상태 비트들(50)을 포함한다. 이러한 비트들은 읽기 전용(read only) 비트들(50)이다. 이들을 읽음으로써, 어떠한 이웃이 비활성화인 상태로 그 포트들(38)중 하나에 대한 쓰기를 기다리고 있는 지, 아니면 비활성화인 상태로 그 포트들(38)중 하나로부터 읽기를 기다리고 있는 지의 여부를 프로세서(12)가 확인할 수 있게 된다. 만일 어떠한 이웃이 프로세서(12)에 대한 쓰기를 기다리고 있다면, I/O 레지스터(47)에 대해 프로세서(12)의 쓰기 라인 상태 비트를 하이가 되게 함으로써, 그 특정의 이웃으로부터의 쓰기 메세지가 전송되기를 기다고 있음을 나타낸다. 마찬가지로, 만일 어떠한 이웃이 프로세서(12)로부터의 읽기를 기다리고 있는 경우, I/O 레지스터(47)에 대해 프로세서(12)의 읽기 라인 상태 비트를 하이가 되게 함으로서, 그 특정의 이웃에 대한 읽기 메세지가 수 신되기를 기다리고 있음을 나타낸다.
도 9, 9a, 10을 참조한 하기의 예는 상기의 과정을 더욱 구체적으로 예시한다. 노드 7에 대한 I/O 레지스터(47)는, 본 예에서 N6에 연결된 우 포트(38b)에 대한 읽기 및 쓰기 상태 비트(각각 B16 과 B15)를 나타낸다. 비트들(B14 및 B13)은 각각 (프로세서(N1)에 연결된) 하 포트(38d)에 대한 읽기 및 쓰기 상태 비트를 나타내고, 비트들(B12 및 B11)은 각각 (프로세서(N8)에 연결된) 좌 포트(38d)에 대한 읽기 및 쓰기 상태 비트를 나타내며, 비트들(B10 및 B9)은 각각 (프로세서(N13)에 연결된) 상 포트(38a)에 대한 읽기 및 쓰기 상태 비트를 나타낸다. 본 실시예에서, 비트들(16-9)은 항상 우, 하, 좌 및 상(RDLU)의 순서로 인접 노드들의 읽기 및 쓰기 상태를 나타낸다. I/O 레지스터(47)에 대한 다른 설명은, 노드 7에 대한 부분적인 I/O 레지스터를 나타내는 도 10을 참조하여 계속된다. 비트(B16)가 하이이면, 프로세서(N6)로부터 읽기 요청이 있고; 비트(B15)가 하이이면, 프로세서(N6)로부터 쓰기 요청이 있으며; 그리고 비트(B14)가 하이이면, 프로세서(N1)로부터 읽기 요청이 있으며, 이하 마찬가지이다.
상기 설명한 바와 같이, PAUSE는 프로세서(12)로 하여금 그 처리 태스크들을 일시적으로 중지하게 하거나, 또는 유입 데이터 또는 명령들을 체크하기 위해 비활성화 상태가 되게 한다. PAUSE 루틴을 사용하는 데에는 2가지 경우가 있다. 제 1 경우는, 프로세서(12)가 이전의 비활성화 상태로부터 활성화된 이후에 발생한다. 제 2 경우는, 프로세서(12)가 프로그램을 실행하고 있는 상태이지만 유입 메세지를 확인하기 위해 잠시 중단 또는 포즈하고 있을 때에 발생한다.
("no-op"라고도 불리는) NOP는 무 연산 명령어로서, 명령 코드 내에 4개의 점(...)으로 나타난다. 도 4를 다시 참조하여, 이 경우 NOP는 이용가능한 슬롯들(54)중 일부 또는 모두를 이용하는 것이 불필요하거나 바람직하지 않을 때에 이용될 수 있다. 예를 들어, 메세지에 있어서, 4개의 NOP들(...)은 메세지 헤더로서 이용되는데, 그 이유는 부분적으로, (활성화된 이후) 헤더를 버리는 것이 안전하고, 또한 (프로세서 자신의 코드를 이미 실행중이거나 잠시 중단한 경우에는) 헤더를 실행하는 것이 안전하기 때문인데, 이러한 두 개의 상태는 NOP 명령에 의해 달성된다. 또한, 다수의 메세지들이 서로 다른 방향들로부터 일반적으로 동시에 도달하는 것이 안전하다. 각 메세지가 4개의 NOP으로 시작되면, 2개 이상의 메세지를 동시에 읽더라도 큰 문제가 되지 않는데, 그 이유는 각 프로세서는 동일한 메세지 헤더를 읽기 때문이다.
어떠한 프로세서(12)는 주요 작업자(primary worker) 또는 "제조 타입" 프로세서(12)로서 지정될 수 있다. 어떠한 다른 명령이 없으면, 이 프로세서(12)는 디폴트에 의해 작업자가 되어, 도 11에서와 같이 ROM에 위치되는 작업자 모드 루프를 실행한다. 이러한 작업자 프로세서(12)는, 작업자 모드 루프(200)의 시작에서 4개의 NOP를 포함하는 메세지 헤더가 자신에게 전송될 때 까지 수면 상태 또는 비활성화 상태로 유지된다. 도 11은 PAUSE 루틴을 사용하는 작업자 모드 루프(200)의 실시예를 나타내는 흐름도이다. 작업자 프로세서(12)가 ROM 내의 디폴트 작업자 모드 루프(default worker mode loop)(200)에서 비활성화 상태일 때, 메세지 헤더의 4개의 NOP들은 "메세지 읽기" 동작(210)에서 데이터로서 읽힌다. 메세지가 도착하면, FETCH A 명령은 한 개의 워드를 데이터로서 읽는 바, 이 데이터는 이웃 프로세서(12)로부터의 4개의 NOP로서, 작업자 프로세서(12)의 T 레지스터(44) 내에 놓여진다. 이러한 4개의 NOP들을 읽게 되면, 도 11의 흐름도에서 "기상(wake up)" 동작(211)으로 나타낸 바와 같이 작업자 프로세서(12)가 깨어난다. 이러한 "기상" 메세지는 작업자 프로세서(12)를 활성화시킨다. 작업자 모드 루프(200)의 일부로서, B 레지스터(40b)의 콘텐츠들 및 어드레스들은 I/O 레지스터(47)에서 디폴트 설정으로서 표시되며, 이에 따라 FETCH B 명령은 "I/O 레지스터 읽기" 동작(212)에서 I/O 레지스터(47)의 콘텐츠들을 읽음으로써, 어떤 포트로부터 메세지가 전송되었는 지를 결정한다.
"포즈 시작(begin pause)" 동작(213)에서, 이전 단계(212)에서 읽은 I/O 레지스터(47)의 콘텐츠에 따라, "적절한 포트(들) 체크(check the appropriate port(s))" 동작(214)의 다음 단계를 준비하기 위해, 작업자 프로세서(12)는 어떠한 처리 액티비티도 갖지 않는다. 다음으로, 적절한 포트로부터 "메세지(들) 실행" 동작(215) 단계가 수행된다. 모든 유입 메세지(들)이 실행된 후, PAUSE는 "포즈 끝(pause end)" 동작(216)에서 끝난다. 이때, 작업 프로세서(12)는 "수면/비활성화" 동작(217)에서 비활성화되고, 다른 메세지 헤더가 도달하여 작업자 프로세서(12)를 활성화시키거나 깨울 때 까지 기다린다.
요약하면, 모든 작업자 프로세서(12)는 수면 상태이고 PAUSE 된다. 모든 이웃 프로세서(12)의 쓰기 요청들이 체크되고, PUASE를 시작한 다음, 유입 메세지를 실행하는 경우, 작업자 프로세서(12)는 수면하고, 깨어나며, I/O 레지스터(47)를 읽는다. 유입 메세지의 끝에는, 리턴(;), 또는 리턴(;)에 의한 포트(38)로의 JUMP가 있다. 이후, 작업자 프로세서(12)는 PAUSE 루틴으로 돌아가고, 다른 메세지에 대해 I/O 레지스터(47)의 다음 비트를 체크하고, 메세지를 실행한 다음, 만일 있는 경우, 작업자 루프로 돌아가서, 수면 상태가 되어 다른 메세지를 기다린다.
메세지들은 태스크들로서 처리된다. PAUSE는, 존재하는 유입 메세지를 기상 태스크(waking task)로서 간주하고, 아무것도 없는 포트들(38)은 수면 태스크(sleeping task)로서 처리한다.
PAUSE 사용하는 제 2의 경우는 도 12에 나타나 있는 바, 여기서 프로세서(12)는 "주요 기능 실행" 동작(220)을 실행하고 있다. 종종, 프로세서(12)는 "I/O 레지스터 읽기" 동작(221)에서 I/O 레지스터(47)를 체크하여, 인접하는 프로세서들(12)로부터의 유입 상태를 체크한다. I/O 레지스터(47)가 유입 메세지가 없다고 나타내면, 프로세서(12)는 "포즈 호출(call pause)" 단계에서 PAUSE를 실행한다. 프로세서(12)는 이후 "입력에 대한 포트 체크(check port for input)" 동작(223)에서, I/O 레지스터(47)에 의해 지시된 포트(38)를 체크한다. "입력?" 결정 동작(224)으로 나타낸 바와 같이 지정된 포트(38)에 메세지가 있는 경우, 프로세서(12)는, 4개의 NOP들을 포함하여, "유입 메세지 내의 모든 코드 실행" 동작을 행한다. 유입 메세지를 다 실행한 후, 메세지를 전송하고자 대기하고 있는 다른 포트(38)가 있는 지에 대해 "마지막 포트 완료?" 결정 동작(226)을 행한다. 가능한 입력에 대해 다른 포트(들)가 체크될 필요가 있는 경우, "입력에 대한 포트 체크" 단계(223)에서 시작하여 동작이 반복된다. 224로 나타낸 바와 같이 어떠한 입력도 없는 경우, 프로세서(12)는 자신의 최초의 태스크(단계 220)로 돌아가고, 이러한 조건들 하에서 결코 수면 상태가 되지 않는다. 유입 메세지들에 대해 우하좌상(RDLU)의 순서로 모든 포트들(38)을 체크하고 임의의 코드를 실행한 후, 마지막 포트가 행해지고(단계 226), 프로세서(12)는 단계(220)에서 자신의 최초의 주요 기능으로 돌아간다.
대부분, 서로 다른 프로세서들(12) 상에서 전달되는 순차적인 프로세스들은 한 그룹의 프로세서들(12)에 의해 수행된다. 인접하는 프로세서가 메세지를 받을 준비가 되어 있지 않으면, 전송 프로세서(12)는 수면 상태로 들어가거나, 다른 태스크에 대해 작업하고, 메세지 검색을 위해 I/O 레지스터(47)를 폴링할 필요가 있다. 하지만, 대부분, 서로 다른 프로세서들(12) 상에서 그룹이 전달된 순차적인 프로세스들을 수행하고 있을 때, 하나의 프로세서(12)는 포트(38)에 쓰기 만을 실행하고, 인접하는 프로세서(12)는 그 포트에 대해 읽기 만을 실행한다. 4개의 모든 포트(38)로부터 읽기가 프로세서(12)에 의해 수행될 수 있고, 이후 프로세서(12)는 4개의 이웃 프로세서들(12)중의 어느 하나가 쓰기를 행할 때 까지 수면 상태가 되고, 읽기 프로세서(12)는 I/O 레지스터(47)를 체크하여, 기사된 후 어느 프로세서(12)가 기록하는 지를 확인할 필요가 있다. 이 프로세서(12)는 데이터 읽기에 의해 깨어난다. 프로세서(12)는 A 레지스터(40a)(데이터), B 레지스터(40b)(데이터), 또는 P 레지스터(40c)(데이터 또는 코드)에 의해 읽기를 할 수 있고, P 레지스터(40c)에 의해 전체 메세지를 읽는 다는 것은 4개의 NOP를 포함하여 전체 메세지를 실행하게 될 것임을 의미한다.
프로세서(12)는 4개의 모든 포트들(38)을 작업자로서 읽은 다음, 더 이상의 메세지가 대기하고 있지 않은 경우 수면 상태가 된다(도 11). 만일 프로세서(12)가 태스크(루프)를 행하느라 바쁘면, 첫 번째의 태스크를 중지시키기 위해 태스크 링(task ring) 내에 PAUSE 호출이 행해질 수 있다. 주요 작업이 중지되고, 4개의 포트들(38)을 읽음으로써 4개의 추가의 태스크를 태스크 링 내에 부가한 다음, 중지되었던 주요 태스크로 돌아간다(도 12).
I/O 핀들이 연결된 프로세서(12)는 I/O 포트(39) 내에 이러한 핀들의 상태를 설정하고 나타내는 비트들을 갖는다. 일부 핀들은 읽기 전용이고, I/O 포트(39) 내의 비트를 읽음으로써 읽혀질 수 있다. 일부 핀들은 읽기/쓰기가 가능하며, I/O 레지스터(47) 내의 비트들을 읽거나 그 내에 비트들을 써 넣음으로써 읽혀지거나 쓰여진다. 읽기 또는 쓰기가 완료된 후, 핸드쉐이크 신호들은 없어지고 I/O 레지스터(47) 내에서 읽을 수 없게 된다. 연결되지 않은 포트의 기상 핀 핸드쉐이크 회로(wake-up pin handshake circuit)에 연결된 핀들은 I/O 레지스터(47)에서 볼 수 없게 된다. 기상 핀을 포함하는 어드레스가 읽혀질 때, 그 핀 상에 신호가 나타날 경우, 프로세서(12)는 깨어나지만, I/O 레지스터(47)를 읽을 경우, 프로세서(12)는 기상 핸드쉐이크를 볼 수 없다. 기상 핀은 기상 회로에만 연결되고, I/O 레지스터(47)에는 연결되지 않는다. 따라서, 핀이 프로세서(12)를 깨웠는 지의 여부를 알기 위해서는, 핀을 직접 읽어야 한다. 핀이 0(제로)으로 읽히면, 다른 포트들(38)중 하나가 프로세서(12)를 깨운 것이다. 이것은 직렬 작업자 프로세서 내의 ROM 코드가 어떻게 기능하는 지를 나타낸다.
직렬 프로세서들은 이들이 데이터로서 읽혀질 수 있는 경우 I/O 레지스터 비트(비트 17)에 연결되는 자신들의 직렬 입력 핀을 갖지만, 이들은 연결되지 않는 공통 포트(com port)의 핸드쉐이크 라인에도 연결된다. 상기 연결되지 않은 공통 포트로부터 읽기를 행하는 프로세서(12)는, 핀 상의 데이터가 프로세서(12)에게 핀 또는 가상 포트(phantom port)에 대한 쓰기가 이루어지고 있음을 알릴 때에 깨어난다. 실제 포트(38)가 읽혀지면, 프로세서(12)는 쓰기 핸드쉐이크 신호를 얻을 때 까지 수면 상태가 된 다음, 기상하여 데이터를 읽는다. ROM 코드는 프로세서(12)가 깨어난 이후 핀을 읽음으로써, 프로세서(12)가 핀에 의해 기상하는지와 포트(38)에 의해 기상하는 지를 구별한다. 핀 로우이면, 프로세서(12)는 I/O 레지스터(47)를 읽고 PAUSE한다. 핀이 하이이면, 프로세서(12)는 직렬 부트 코드(serial boot code)를 실행한다.
읽기 또는 쓰기가 시작되면, 읽기 또는 쓰기 핸드쉐이크 비트가 올라간다(raised). 쓰기 또는 읽기 핸드쉐이크 비트가 다른 프로세서(12)에 의해 올려지면, 그 프로세서(12)에 의해 올려진 모든 비트들은 내려지며, 프로세서(12)가 기상하고, 데이터가 전송된다. 데이터가 전송된 후, 올려졌던 임의의 읽기/쓰기 핸드쉐이크 플래그 비트들은 내려진다.
프로세서(12)가 RDLU(4개의 이웃 포트들(38)의 어드레스의 네임)로 JUMP하면, 4개의 모든 포트들(38)에 대해 읽기를 시도하고 읽기 플래그(read flag)를 올린다. 그러면, 실질적으로 무전력 모드로 수면 상태가 된다. 이웃(들)이 이러한 포트들(38)중 하나 이상에 쓰기를 행하고, 쓰기 플래그(write flag)를 올리면, 모든 포트들(38)의 플래그들은 리셋되고, 제 1 프로세서(12)가 일어난다. 프로세서(12)가 A 레지스터(40a) 또는 B 레지스터(40b) 및 데이터 FETCH 또는 STORE를 이용하여 어드레스를 읽는 경우에도, 동일한 동작이 이루어진다. 상기 프로세서는 4개(또는 3개 또는 2개)의 이웃들중 하나가 데이터에 의해 기상할 때 까지 수면 상태가 된다.
기상 핀이 4개의 어드레스 포트(38)의 읽기의 일부로서 읽혀지고, 그 핀이 하이가 아니면, 프로세서(12)는 기상이 3개의 나머지 이웃들중 하나로부터 비롯되었다는 것을 알게 된다. 직렬 부트 프로세서(12) 상의 ROM 내의 직렬 부트는 그 프로세서(12)를 깨운 핀들로부터 비롯되며; 핀이 하이이면, 코드는 직렬 핀으로부터 로드되어 프로세서(12)에 의해 부트된다.
X0 패킷을 이용함으로써 어느 것과도 충돌되지 않게 되는 추천 경로가 있다. X0는 RAM 서버의 0 노드 상에서의 실행을 나타내며, 어떠한 경로들 상의 노드 0을 향해 나가가는 메세지들이 ROM 내에 정의된다. 서로에 대해서는 메세지들을 라우팅해서는 안된다. PAUSE에 의해, 메세지들은 안전하게 라우팅될 수 있다. (노드 6, 즉 RAM 서버에 다음의 노드 상의) RAM 서버 버퍼에 의해, RAM 서버의 노드 0에 대한 유입 메세지들은 노드 6 상의 RAM 내에 버퍼링될 수 있으며, 이에 따라 이들은 RAM 서버로부터 전송되는 메세지들을 정체(back up)시키지 않고 차단(block)하지 않는다. 이것이 X0와 충돌하지 않는 추천되는 라우팅 경로이다.
본원에서 설명되는 것은 복수의 프로세서들(12) 간의 "협력적 멀티태스킹(cooperative multitasking)"이 되도록 구현하는 것이 중요하다. 태스크들의 세 트는 포트(38) 또는 포트들(38) 상에 그리고 로컬 메모리에 상주한다. FETCH B 및 PAUSE는 유입하는 실행가능 코드에 대해 모든 포트들(38)을 연속적으로 검사하고, 포트들(38)을 태스크로서 처리한다. 포트(38) 상의 명령들은, 먼저 프로세서(12)의 ROM에 로드하지 않으면서 포트(38)로부터 직접 실행될 수 있다.
본원에서는 포스와 관련하여 다수의 프로세서들(12) 간의 PAUSE 루틴이 개시되었지만, 다수의 프로세서들(12) 간의 PAUSE 루틴의 모든 개념들은 다른 프로그래밍 언어들에도 적용될 수 있다.
상기 모든 예들은 본 발명의 이용가능한 실시예들중 단지 일부일 뿐이다. 당업자라면 본 발명의 정신 및 범위를 벗어나지 않으면서 많은 수정들 및 변경들이 이루어질 수 있다는 것을 인식할 것이다. 따라서, 본원에서 개시된 것들은 한정적인 것으로서 의도되지 않으며, 첨부된 청구항들은 본 발명의 전체 범위를 포괄하는 것으로서 해석되어야 한다.

Claims (38)

  1. 다수의 컴퓨터 프로세서들 사이의 통신 방법으로서:
    제 1 프로세서를 제공하는 단계와;
    제 2 프로세서를 제공하는 단계와; 그리고
    상기 제 1 프로세서로부터 입력을 상기 제 2 프로세서로 전송하는 단계를 포함하며,
    여기서 상기 전송하는 단계는 상기 제 2 프로세서의 기능들을 프로세싱하는 것을 인터럽트하지 않는 것을 특징으로 하는 다수의 컴퓨터 프로세서들 사이의 통신 방법.
  2. 제 1 항에 있어서,
    상기 입력은 상기 제 1 프로세서로부터 상기 제 2 프로세서로의 쓰기 기능인 것을 특징으로 하는 다수의 컴퓨터 프로세서들 사이의 통신 방법.
  3. 제 1 항에 있어서,
    상기 다수의 컴퓨터 프로세서들 각각은 다수의 통신 포트들을 포함하는 것을 특징으로 하는 다수의 컴퓨터 프로세서들 사이의 통신 방법.
  4. 제 3 항에 있어서,
    상기 다수의 컴퓨터 프로세서들 각각은 입/출력(I/O) 레지스터를 포함하는 것을 특징으로 하는 다수의 컴퓨터 프로세서들 사이의 통신 방법.
  5. 제 4 항에 있어서,
    상기 입/출력(I/O) 레지스터 각각은 읽기 및 쓰기 상태 비트들을 포함하는 것을 특징으로 하는 다수의 컴퓨터 프로세서들 사이의 통신 방법.
  6. 제 5 항에 있어서,
    상기 읽기 및 쓰기 상태 비트들의 상태를 검사하는 단계를 더 포함하는 것을 특징으로 하는 다수의 컴퓨터 프로세서들 사이의 통신 방법.
  7. 제 1 항에 있어서,
    상기의 다수의 컴퓨터 프로세서들은 다이 상의 프로세서 어레이로 구성되는 것을 특징으로 하는 다수의 컴퓨터 프로세서들 사이의 통신 방법.
  8. 제 7 항에 있어서,
    상기 전송하는 단계는 상기 제 1 프로세서와 상기 제 2 프로세서 사이의 데이터 버스를 통해 제공되는 것을 특징으로 하는 다수의 컴퓨터 프로세서들 사이의 통신 방법.
  9. 제 7 항에 있어서,
    상기 프로세서 어레이는 4개의 인접한 프로세서들을 갖는 적어도 하나의 를 내부 프로세서를 포함하는 것을 특징으로 하는 다수의 컴퓨터 프로세서들 사이의 통신 방법.
  10. 제 7 항에 있어서,
    상기 프로세서 어레이는 상기 어레이의 가장 자리에 위치한 적어도 하나의 프로세서를 포함하며, 상기 적어도 하나의 프로세서는 입/출력(I/O) 핀으로의 접속부와 입/출력(I/O) 상태 비트를 포함하는 것을 특징으로 하는 다수의 컴퓨터 프로세서들 사이의 통신 방법.
  11. 다수의 프로세서 사이에 프로세싱 태스크를 공유하는 방법으로서:
    제 1 프로세서를 제공하는 단계와;
    제 2 프로세서를 제공하는 단계와;
    상기 제 1 프로세서와 상기 제 2 프로세서 사이에 통신 포트를 제공하는 단계와;
    상기 제 1 프로세서로부터 상기 제 2 프로세서로 입력을 전송하는 단계와; 그리고
    상기 제 2 프로세서가 상기 제 1 프로세서로부터 상기 입력을 수신하는 단계를 포함하며,
    여기서, 상기 전송하는 단계는 상기 제 2 프로세서의 프로세싱 기능들을 인터럽트 하지 않는 것을 특징으로 하는 다수의 프로세서 사이에 프로세싱 태스크를 공유하는 방법.
  12. 제 11 항에 있어서,
    상기 전송하는 단계는 상기 제 2 프로세서가 태스크를 실행하고 있는 중에 발생하는 것을 특징으로 하는 다수의 프로세서 사이에 프로세싱 태스크를 공유하는 방법.
  13. 제 12 항에 있어서,
    상기 제 2 프로세서가 상기 실행을 일시적으로 중단하고 상기 제 1 프로세서로부터 상기 전송을 받아들일 때, 상기 수신하는 단계가 완료되는 것을 특징으로 하는 다수의 프로세서 사이에 프로세싱 태스크를 공유하는 방법.
  14. 제 12 항에 있어서,
    상기 제 1 프로세서로부터 상기 입력을 전송하는 단계는 입력 플래그 비트를 하이로 설정하는 것을 포함하는 것을 특징으로 하는 다수의 프로세서 사이에 프로세싱 태스크를 공유하는 방법.
  15. 제 12 항에 있어서,
    상기 수신된 입력에 대한 상기 제 2 프로세서의 응답에는 상기 포트로부터 직접 상기 수신된 입력의 코드를 실행하는 것이 포함되는 것을 특징으로 하는 다수의 프로세서 사이에 프로세싱 태스크를 공유하는 방법.
  16. 제 15 항에 있어서,
    상기 포트로부터 직접 코드를 실행하는 것은 상기 코드를 직접 실행하기 전에 상기 코드를 메모리 위치에 저장함이 없이 수행되는 것을 특징으로 하는 다수의 프로세서 사이에 프로세싱 태스크를 공유하는 방법.
  17. 제 12 항에 있어서,
    상기 제 2 프로세서의 상기 태스크 실행을 일시적으로 중단하고, 그리고 상기 제 1 프로세서로부터 잠재적 입력에 대해 상기 포트를 검사하는 단계를 포함하는 소프트웨어 프로그램을 더 포함하는 것을 특징으로 하는 다수의 프로세서 사이에 프로세싱 태스크를 공유하는 방법.
  18. 제 1 프로세서가 제 2 프로세서로 입력을 전송하는 단계와, 여기서 상기 제 2 프로세서는 상기 전송시에 비활성이며;
    상기 입력을 수신하도록 상기 제 2 프로세서가 상기 입력을 수신하도록 상기 제2프로세서를 깨우는 단계와;
    상기 입력의 출처를 결정하도록 상기 제 2 프로세서가 입/출력(I/O) 레지스 터를 검사하는 단계와;
    상기 제 2 프로세서가 상기 제 1 프로세서로부터 상기 입력을 수신하는 단계와; 그리고
    상기 제 2 프로세서가 상기 제 1 프로세서로부터의 상기 입력에 응답하는 단계를 포함하는 것을 특징으로 하는 방법.
  19. 제 18 항에 있어서,
    상기 방법은 소프트웨어 루프에 의해 실행되는 것을 특징으로 하는 방법
  20. 제 18 항에 있어서,
    상기 깨우는 단계는 상기 깨우는 단계 후에 안전하게 제거할 수 있는 메세지 헤더를 포함하는 것을 특징으로 하는 방법.
  21. 제 18 항에 있어서,
    상기 검사하는 단계는 인접한 프로세서들의 읽기 및 쓰기 핸드쉐이크 상태 비트들의 상태를 결정하는 것을 포함하는 것을 특징으로 하는 방법.
  22. 제 21 항에 있어서,
    상기 수신하는 단계 후에, 상기 제 1 프로세서와 상기 제 2 프로세서의 읽기 및 쓰기 핸드쉐이크 상태 비트들을 낮추는 것을 특징으로 하는 방법.
  23. 제 18 항에 있어서,
    상기 입력에 응답하는 단계 후에, 상기 제 2 프로세서가 비활성 모드로 회귀하는 것을 특징으로 하는 방법.
  24. 제 18 항에 있어서,
    상기 깨우는 단계는 다중 포트 읽기 기능으로 인해 야기되는 것을 특징으로 하는 방법.
  25. 제 18 항에 있어서,
    상기 깨우는 단계는 핀에 의해 야기되는 것을 특징으로 하는 방법.
  26. 제 18 항에 있어서,
    상기 수신하는 단계는 상기 입력을 데이터문으로 읽는 것을 포함하는 것을 특징으로 하는 방법.
  27. 제 18 항에 있어서,
    상기 방법이 ROM에 상주하는 것을 특징으로 하는 방법.
  28. 제 27 항에 있어서,
    상기 방법은 ROM 내의 부트업 태스크의 일부분인 것을 특징으로 하는 방법.
  29. 전자 장치로 하여금 청구항 제 18 항의 단계들을 수행하도록 하는 코드가 수록된 컴퓨터 판독가능 매체.
  30. 다수의 컴퓨터 프로세서들 사이의 통신 방법으로서:
    제 1 프로세서를 제공하는 단계와;
    제 2 프로세서를 제공하는 단계와, 여기서 상기 제 2 프로세서는 경계 상태이나 비활성 상태이며;
    상기 다수의 컴퓨터 프로세서들 각각에 I/O 레지스터를 제공하는 단계와;
    상기 제 1 프로세서로부터 상기 제 2 프로세서로 입력을 전송하는 단계와, 여기서 상기 전송하는 단계에 의해 상기 제 2 프로세서가 활성 상태로 변경되며;
    어떤 프로세서로부터 상기 입력이 전송되었는지를 결정하기 위해 상기 제 2 프로세서의 I/O 레지스터를 읽는 단계와; 그리고
    상기 제 2 프로세서가 상기 입력을 직접 실행하는 단계를 포함하는 것을 특징으로 하는 다수의 컴퓨터 프로세서들 사이의 통신 방법.
  31. 제 30 항에 있어서,
    추가의 입력들이 상기 제 2 프로세서로 전송되었는지를 판단하기 위해 상기 제 2 프로세서의 상기 I/O 레지스터를 추가의 횟수만큼 읽는 단계와; 그리고
    상기 제 2 프로세서에 상기 추가의 입력들을 실행하는 단계를 더 포함하는 것을 특징으로 하는 다수의 컴퓨터 프로세서들 사이의 통신 방법.
  32. 제 31 항에 있어서,
    상기 추가의 입력들은 제 3 프로세서로부터 전송된 것을 특징으로 하는 다수의 컴퓨터 프로세서들 사이의 통신 방법.
  33. 프로세싱 시스템으로서,
    상호접속된 컴퓨터 프로세서들의 어레이와,
    여기서 각각의 프로세서는:
    I/O 레지스터와;
    상기 프로세서의 4개의 각각의 측면들 상에 위치한 통신 포트
    와;
    상기 프로세서들 중 나머지 프로세서들에 입력을 전송하는 전
    송 메커니즘과; 그리고
    상기 프로세서들 중 나머지 프로세서들로부터의 입력을 수신
    하는 수신 메커니즘을 포함하며,
    상기 입력을 수신하는 상기 프로세서들 각각이 상기 입력의 출처를 결정할 수 있는 모니터링 메커니즘과, 그리고
    상기 입력을 수신하는 상기 프로세서들 각각이 상기 입력에 응답할 수 있는 실행 메커니즘을 포함하는 것을 특징으로 하는 프로세싱 시스템.
  34. 제 33 항에 있어서,
    상기 전송 메커니즘은 상기 입력을 전송하는 상기 제 1 프로세서상에 제 1 포트를 포함하며, 여기서 상기 제 1 포트는 목적 수신 프로세서에 인접하여 위치하며; 그리고
    상기 수신 메커니즘은 상기 목적 수신 프로세서상에 제 2 포트를 포함하며, 여기서 상기 제 2 포트는 상기 제 1 프로세서에 인접하여 위치하는 것을 특징으로 하는 프로세싱 시스템.
  35. 제 34 항에 있어서,
    상기 수신 메커니즘은 상기 제 1 포트로부터 상기 제 2 포트로 직접 상기 입력을 수신하는 래칭 메커니즘을 더 포함하는 것을 특징으로 하는 프로세싱 시스템.
  36. 제 33 항에 있어서,
    임의의 입력이 제 2 프로세서에 의해 전송되기를 시도하고 있는지를 판단하기 위해, 제 1 프로세서의 상기 모니터링 메커니즘은 상기 제 1 프로세서의 활성 실행 태스크를 중지시킬 수 있는 것을 특징으로 하는 프로세싱 시스템.
  37. 제 33 항에 있어서,
    상기 입력이 수신 프로세서에 의해 전송 프로세서의 임의의 포트로부터 직접 수신되는 것을 특징으로 하는 프로세싱 시스템.
  38. 제 33 항에 있어서,
    상기 전송 메커니즘은 하나의 프로세서로부터의 상기 입력을 인접하지 않은 수신 프로세서에 전송할 수 있는 능력을 갖는 것을 특징으로 하는 프로세싱 시스템.
KR1020077009922A 2006-02-16 2007-02-16 동작 효율성을 증가시킨 컴퓨터 시스템 KR20090016644A (ko)

Applications Claiming Priority (20)

Application Number Priority Date Filing Date Title
US11/355,495 2006-02-16
US11/355,513 2006-02-16
US11/355,513 US7904695B2 (en) 2006-02-16 2006-02-16 Asynchronous power saving computer
US11/355,495 US7904615B2 (en) 2006-02-16 2006-02-16 Asynchronous computer communication
US78826506P 2006-03-31 2006-03-31
US60/788,265 2006-03-31
US79734506P 2006-05-03 2006-05-03
US60/797,345 2006-05-03
US11/441,812 2006-05-26
US11/441,818 US7934075B2 (en) 2006-02-16 2006-05-26 Method and apparatus for monitoring inputs to an asyncrhonous, homogenous, reconfigurable computer array
US11/441,812 US7913069B2 (en) 2006-02-16 2006-05-26 Processor and method for executing a program loop within an instruction word
US11/441,784 2006-05-26
US11/441,784 US7752422B2 (en) 2006-02-16 2006-05-26 Execution of instructions directly from input source
US11/441,818 2006-05-26
US81808406P 2006-06-30 2006-06-30
US60/818,084 2006-06-30
US84949806P 2006-09-29 2006-09-29
US60/849,498 2006-09-29
US11/653,187 2007-01-12
US11/653,187 US7966481B2 (en) 2006-02-16 2007-01-12 Computer system and method for executing port communications without interrupting the receiving computer

Publications (1)

Publication Number Publication Date
KR20090016644A true KR20090016644A (ko) 2009-02-17

Family

ID=38134104

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020077009922A KR20090016644A (ko) 2006-02-16 2007-02-16 동작 효율성을 증가시킨 컴퓨터 시스템

Country Status (4)

Country Link
EP (1) EP1821211A3 (ko)
JP (1) JP2009527815A (ko)
KR (1) KR20090016644A (ko)
WO (1) WO2007098025A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102009046679A1 (de) 2009-02-27 2010-10-28 Samsung Electro - Mechanics Co., Ltd., Suwon Gehäuse mit einer eingebetteten Antenne für ein Mobilfunkgerät, Verfahren zum Herstellen desselben und Mobilfunkgerät

Families Citing this family (7)

* 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
US7617383B2 (en) 2006-02-16 2009-11-10 Vns Portfolio Llc Circular register arrays of a computer
US7904615B2 (en) 2006-02-16 2011-03-08 Vns Portfolio Llc Asynchronous computer communication
US20080270751A1 (en) * 2007-04-27 2008-10-30 Technology Properties Limited System and method for processing data in a pipeline of computers
US7555637B2 (en) 2007-04-27 2009-06-30 Vns Portfolio Llc Multi-port read/write operations based on register bits set for indicating select ports and transfer directions
US20080282062A1 (en) * 2007-05-07 2008-11-13 Montvelishsky Michael B Method and apparatus for loading data and instructions into a computer
US8010815B2 (en) 2008-05-01 2011-08-30 International Business Machines Corporation Computational device power-savings

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6412339A (en) * 1987-07-06 1989-01-17 Oki Electric Ind Co Ltd Forth machine
CA2019299C (en) * 1989-06-22 2002-01-15 Steven Frank Multiprocessor system with multiple instruction sources
DE58908974D1 (de) * 1989-11-21 1995-03-16 Itt Ind Gmbh Deutsche Datengesteuerter Arrayprozessor.
US6381682B2 (en) * 1998-06-10 2002-04-30 Compaq Information Technologies Group, L.P. Method and apparatus for dynamically sharing memory in a multiprocessor system
JP3344345B2 (ja) * 1998-12-15 2002-11-11 日本電気株式会社 共有メモリ型ベクトル処理システムとその制御方法及びベクトル処理の制御プログラムを格納する記憶媒体
SE514785C2 (sv) * 1999-01-18 2001-04-23 Axis Ab Processor och metod för att exekvera instruktioner från flera instruktionskällor
GB2370381B (en) * 2000-12-19 2003-12-24 Picochip Designs Ltd Processor architecture
US6938253B2 (en) * 2001-05-02 2005-08-30 Portalplayer, Inc. Multiprocessor communication system and method
JP2003044292A (ja) * 2001-08-02 2003-02-14 Kyushu Univ 多重並行処理装置、多重並行処理方法及びコンピュータによって実行される多重並行処理プログラム
US6948040B2 (en) * 2002-05-17 2005-09-20 Samsung Electronics Co., Ltd. System and method for synchronizing a plurality of processors in a processor array
US7613900B2 (en) * 2003-03-31 2009-11-03 Stretch, Inc. Systems and methods for selecting input/output configuration in an integrated circuit

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102009046679A1 (de) 2009-02-27 2010-10-28 Samsung Electro - Mechanics Co., Ltd., Suwon Gehäuse mit einer eingebetteten Antenne für ein Mobilfunkgerät, Verfahren zum Herstellen desselben und Mobilfunkgerät

Also Published As

Publication number Publication date
WO2007098025A2 (en) 2007-08-30
JP2009527815A (ja) 2009-07-30
EP1821211A3 (en) 2008-06-18
WO2007098025A3 (en) 2009-01-29
EP1821211A2 (en) 2007-08-22

Similar Documents

Publication Publication Date Title
US20080301409A1 (en) Scheduling threads in a processor
KR20090016644A (ko) 동작 효율성을 증가시킨 컴퓨터 시스템
US7904615B2 (en) Asynchronous computer communication
CN101454755A (zh) 具有提高的操作效率的计算机系统
US20100281238A1 (en) Execution of instructions directly from input source
JP2009064411A (ja) データおよび命令をコンピュータにロードするための方法および装置
US7966481B2 (en) Computer system and method for executing port communications without interrupting the receiving computer
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
EP1821199B1 (en) Execution of microloop computer instructions received from an external source
US7934075B2 (en) Method and apparatus for monitoring inputs to an asyncrhonous, homogenous, reconfigurable computer array
US6708259B1 (en) Programmable wake up of memory transfer controllers in a memory transfer engine
EP1821217B1 (en) Asynchronous computer communication
JP2006195705A (ja) プロセッサ
JP2009527814A (ja) コンピュータのアレイ間でのリソースの割り当て
TW200809529A (en) Computer system with increased operating efficiency

Legal Events

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