KR20070098760A - 컴퓨터 프로세서 어레이를 동작하는 방법 및 시스템 - Google Patents

컴퓨터 프로세서 어레이를 동작하는 방법 및 시스템 Download PDF

Info

Publication number
KR20070098760A
KR20070098760A KR1020070032588A KR20070032588A KR20070098760A KR 20070098760 A KR20070098760 A KR 20070098760A KR 1020070032588 A KR1020070032588 A KR 1020070032588A KR 20070032588 A KR20070032588 A KR 20070032588A KR 20070098760 A KR20070098760 A KR 20070098760A
Authority
KR
South Korea
Prior art keywords
computers
computer
wrapper
data
instruction
Prior art date
Application number
KR1020070032588A
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
Application filed by 테크날러지 프라퍼티즈 리미티드 filed Critical 테크날러지 프라퍼티즈 리미티드
Publication of KR20070098760A publication Critical patent/KR20070098760A/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/8023Two dimensional arrays, e.g. mesh, torus
    • 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
    • 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
    • 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
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • 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]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
    • 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/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services

Landscapes

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

Abstract

컴퓨터 어레이(10)는 복수의 컴퓨터들(12)을 가지며, 이 복수의 컴퓨터들(12)은 더 작은 태스크들로 나누어지는 더 큰 태스크를 달성하고, 더 작은 태스크들 각각은 하나 또는 그 이상의 컴퓨터들(12)에 할당된다. 컴퓨터들(12) 각각은 특정 기능을 위해 구성될 수 있고, 그리고 외부 컴퓨터들(12)과 관련된 개별 입력/출력 회로들(26)은 특별한 입력/출력 기능을 위해 특정적으로 구성된다. 컴퓨터 어레이(10) 내에 배열된 24 컴퓨터들(12)의 예는, 입력 및/또는 출력을 위해 구성되는 다이(14)의 에지(edge)에 더 가까운 컴퓨터들(12)을 갖는 중앙집중 컴퓨테이션 코어(34)를 가진다. 컴퓨터들(12)과 외부 환경 사이의 통신을 위한 매커니즘이 설명된다.
컴퓨터 어레이, 태스크, 코어

Description

컴퓨터 프로세서 어레이를 동작하는 방법 및 시스템{METHOD AND APPARATUS FOR OPERATING A COMPUTER PROCESSOR ARRAY}
도1은 본 발명에 따른 컴퓨터 어레이를 도시한 도면이다.
도2는 도1에 도시된 컴퓨터들의 서브세트와 데이터 버스들의 연결을 상세히 도시한 도면이다.
도3은 도1 및 도2에 도시된 컴퓨터들중 하나의 일반적인 레이아웃을 도시한 도면이다.
도4는 명령 워드(48)를 도시한 도면이다.
도5는 도3의 슬롯 시퀀서(42)를 도시한 도면이다.
도6은 본 발명의 일실시예에 따른 마이크로-루프에 대한 일례를 도시한 순서도이다.
도7은 포트로로부터의 명령들을 실행하는 방법에 대한 일례를 도시한 도면이다.
도8은 컴퓨터에 경보를 발하는 향상된 방법에 대한 일례를 도시한 도면이다.
도9는 컴퓨터들(12f 및 12g)의 동작을 도시한 도면이다.
본 출원은 2006년 3월 31일자로 미국에 출원된 "Allocation Of Resource Among An Array Of Computers" (출원번호 60/788,265) 의 우선권을 주장하며, 상기 출원은 본 명세서에 전체로서 통합된다.
본 발명은 컴퓨터들 및 컴퓨터 프로세서에 관한 것이며, 좀 더 상세하게는, 컴퓨터들 사이에서의 독특한 타입의 상호작용에 관한 수단 및 방법에 대한 것이다. 본 발명에 의한 개선된 컴퓨터 어레이의 주된 사용용도는 하나의 마이크로칩 상의 복수개의 컴퓨터들의 조합에 있다. 본 발명은 특히 컴퓨터들 및 컴퓨터 프로세서들 분야에 관련되며, 좀더 특별하게는, 스택 컴퓨터 프로세서내의 스택을 좀더 효율적으로 사용하기 위한 방법 및 수단에 관련된 것이다.
해당 기술분야에서, 업무를 완수하기 위해 함께 동작하는 복수개의 컴퓨터 프로세서를 사용하는 것이 알려저 있다. 프로세서들이 서로 협동하는 것을 허용하기 위해, 다중-스레딩(multi-threading) 및 이와 다른 여러개의 방법들이 사용되어 왔다. 하지만, 이 분야의 개선을 위해서는 많은 여지가 있음이 일반적으로 인식되었다. 또한, 하나의 칩 상의 여러개의 프로세서들을 조합하는 것이 최근의 추세인바, 이에 따라 문제는 더욱 악화되고 있으며 또한 좀더 효율적인 방법으로 컴퓨터들을 함께 동작하게 만드는 해결책이 시급히 필요하게 되었다. 최근에는 수 많은 이유들 때문에, 수 많은 어플리케이션들을 위해서 복수개의 프로세서들로 이루어진 최상의 장치(arrangement)는, 그 각각이 프로세싱 능력들 및 적어도 소정의 전용 메모리를 갖는 복수개의 컴퓨터들로 구성된 어레이가 될 것이라고 생각되어 왔다. 이러한 일례에서, 컴퓨터들 각각은 그리 특별하게 파워풀한 것은 아니지만, 이들 컴퓨터들 간의 긴밀한 협동을 통해 더 나은 계산 능력이 얻어질 것이다.
계류중인 출원들은 이러한 컴퓨터 어레이들의 독창적인 양상들에 대해 기술하고 있으며 이를 권리로 요구하고 있는바, 이들 컴퓨터들을 어떻게 배열할 것인가에 대한 소정의 특징들, 및 이들 컴퓨터들 사이에서 통신 채널들이 어떻게 설정될 것인가 등을 포함한다. 하지만, 최상의 효율로 운영하기 위해서는, 컴퓨터 어레이들에 대한 좀더 혁신적이며 상대적으로 새로운 개념의 구현예들이 필요할 것이다.
가장 좋은 배치는 어떤 것이며, 이들 사이의 통신을 어떻게 하는 것이 가장 좋으며, 이들 사이에서 직무를 어떻게 분담하는 것이 가장 좋은가, 및 컴퓨터 어레이들의 다른 용도 등에 관해서는, 아직도 대답해야할 의문점들이 많이 남아 있음은 명백하다. 이들 의문점들 중에서 몇몇은 이미 해결되었을 수도 있으나, 현존하는 해결책들을 보다 더 향상시킬 여지가 또한 있을 수도 있다. 다른 케이스들로서, 종래기술에서는 존재하지 않았던 새로운 문제점들을 해결하기 위해서, 상기 해결책들은 처음 접하는 의문점을 해결해야만 할 수도 있다.
스택 머신들(stack machines)은, 복잡 명령 집합 컴퓨터(Complex Instruction Set Computer)의 복잡도 보다는 매우 낮은 프로세서 복잡도를 제공하며, 단축 명령 집합 컴퓨터(Reduced Instruction Set Computer) 또는 CISC 머신들중 어느 한쪽의 복잡도보다는 낮은, 총체적인 시스템 복잡도를 제공한다. 복잡한 컴파일러 또는 캐시 제어 하드웨어가 없이도, 이들은 우수한 성능을 발휘할 수 있다. 이들은 또한, 경쟁력있는 본래 성능(raw performance)을 발휘하며, 대부분의 프로그래밍 환경하에서 가격대비 우수한 성능을 발휘한다. 이들의 성공적인 첫번째 응용 영역은 실시간 내장형 제어 환경들(real time embedded control environments)이었는바, 이곳에서 이들은 다른 시스템 디자인 어프로치들(system design approachs)보다 훨씬 우수한 성능을 나타내었다. 예전에는 상기 스택들이 대부분 프로그램 메모리내에 유지되었지만, 더 새로운 스택 머신들은 별개의 메모리 칩들을 구비하며, 심지어는 스택들을 위한 온-칩 메모리 영역을 구비한다. 이러한 스택 머신들은 극도로 빠른 서브루틴 호출 능력을 제공하며, 인터럽트 처리 및 태스크 스위칭에 있어 더 뛰어난 성능을 제공한다.
Zahir 등의 미국등록특허 US 6,367,005 에는, 스택 오버플로우가 발생한 경우에 좀더 이용가능한 레지스터들을 제공하기 위해, 레지스터 스택의 충분한 레지스터들을 메모리에 세이브하는, 레지스터 스택 엔진이 개시되어 있다. 상기 레지스터 스택 엔진은 또한, 스택 언더플로우가 발생한 경우에는 상기 엔진이 적절한 갯수의 레지스터들을 복원할 때 까지 마이크로프로세서를 지연(stall)시킨다.
Story 등의 미국등록특허 US 6,219,685 에는, 연산의 결과들을 임계값과 비교하는 방법이 개시되어 있다. 하지만, 이러한 접근법은, 임계값으로 라운드 다운(rounded down)된 결과들(이는 오버 플로우 예외를 일으킬 것이다)과 방금 임계값과 동등해진 결과들을 구별하지 못한다. Story 등에 의해 개시된 또 다른 방법은, 오버 플로우와 언더 플로우 조건을 식별하는 읽기 및 쓰기 하드웨어 플래그들이다.
메모리내의 스택으로, 오버 플로우 또는 언더 플로우는 스택 아이템을 겹쳐 쓸 것이며 또는 스택의 일부분으로 의도되지 않았던 스택 아이템을 사용할 것이다. 스택내의 오버 플로우 또는 언더 플로우를 감소시키거나 또는 제거할 향상된 방법이 요구된다.
FORTH 시스템은 한번에 하나 이상의 코드 실행 "thread" 를 가질 수 있었으며, 이는 종종 협동적인 라운드-로빈(round-robin)으로 지칭되었다. 중앙처리장치(CPU)를 사용하여 상기 스레드가 차례(turn)를 획득하는 순서(order)는 고정되어 있다. 예를 들면, 스레드 4 는 항상 스레드 3 이후 및 스레드 5 이전에 자기 차례를 갖는다. 각각의 스레드는 자신이 원하는 기간만큼 CPU를 사용하는 것이 허용되며, 이후에 자발적으로 CPU를 양도(relinquish)한다. 스레드는 워드(word) PAUSE 를 호출함으로써 이를 수행한다. 본래의 태스크가 복원(restore)되기 위해서는 PAUSE 기능(function) 동안에, 소수의 데이터 아이템들만이 세이브될 필요가 있는 반면에, 인터럽트 펑션동안에는 큰 콘텍스트(context)가 세이브되어야 한다.
각각의 스레드는 해야할 작업이 있을 수도 있으며 없을 수도 있다. 만일, 태스크 4가 해야할 작업을 가지고 있고 라운드-로빈내에서 태스크 4 이전의 태스크(즉, 태스크 3)가 PAUSE 를 호출하면, 이후에 태스크 4는 기상할 것이며, PAUSE 를다시 한번 결정하기 전까지 작업할 것이다. 만일, 태스크 4 가 해야할 작업이 없다면, 이는 태스크 5로 제어를 넘길 것이다. 태스크가, 입력/출력 기능을 수행할 예정인, 그러므로 입력/출력이 종료하기를 기다릴 필요가 있는 워드를 호출한 때에, PAUSE 는 입력/출력 호출로 내장된다(built into).
PAUSE 의 예측 가능성은 매우 효율적인 코드(code)를 허용한다. 종종, FORTH 기반의 협동적인 라운드-로빈은, 누가 다음 CPU를 얻어야 하는지를 선제권이 있는(pre-emptive) 멀티태스커(multitasker)가 결정하는데 걸리는 시간보다도 더 적은 시간에, CPU에서의 턴(turn)을 가지는 모든 스레드(thread)를 줄 수 있다. 하지만, 특정한 태스크는 CPU를 압도(overwhelm)하거나 또는 오버테이크(overtake)할 수도 있다. 게다가, 하나의 CPU 이상으로 상기 PAUSE 기능을 확장하는 것이 바람직할 것이다.
메모리내의 스택으로, 오버 플로우 또는 언더 플로우는 스택 아이템을 겹쳐쓸 것이며 또는 스택의 일부분으로 의도되지 않았던 스택 아이템을 사용할 것이다. 스택내의 오버 플로우 또는 언더 플로우를 감소시키거나 또는 제거할 향상된 방법이 요구된다.
FORTH 시스템은 한번에 하나 이상의 코드 실행 "thread" 를 가질 수 있었으며, 이는 종종 협동적인 라운드-로빈(round-robin)으로 지칭되었다. 중앙처리장치(CPU)를 사용하여 상기 스레드가 차례(turn)를 획득하는 순서(order)는 고정되어 있다. 예를 들면, 스레드 4 는 항상 스레드 3 이후 및 스레드 5 이전에 자기 차례를 갖는다. 각각의 스레드는 자신이 원하는 기간만큼 CPU를 사용하는 것이 허용되며, 이후에 자발적으로 CPU를 양도(relinquish)한다. 스레드는 워드(word) PAUSE 를 호출함으로써 이를 수행한다. 본래의 태스크가 복원(restore)되기 위해서는 PAUSE 기능(function) 동안에, 소수의 데이터 아이템들만이 세이브될 필요가 있는 반면에, 인터럽트 펑션동안에는 큰 콘텍스트(context)가 세이브되어야 한다.
각각의 스레드는 해야할 작업이 있을 수도 있으며 없을 수도 있다. 만일, 태스크 4가 해야할 작업을 가지고 있고 라운드-로빈내에서 태스크 4 이전의 태스크(즉, 태스크 3)가 PAUSE 를 호출하면, 이후에 태스크 4는 기상할 것이며, PAUSE 를다시 한번 결정하기 전까지 작업할 것이다. 만일, 태스크 4 가 해야할 작업이 없다면, 이는 태스크 5로 제어를 넘길 것이다. 태스크가, 입력/출력 기능을 수행할 예정인, 그러므로 입력/출력이 종료하기를 기다릴 필요가 있는 워드를 호출한 때에, PAUSE 는 입력/출력 호출로 내장된다(built into).
PAUSE 의 예측 가능성은 매우 효율적인 코드(code)를 허용한다. 종종, FORTH 기반의 협동적인 라운드-로빈은, 누가 다음 CPU를 얻어야 하는지를 선제권이 있는(pre-emptive) 멀티태스커(multitasker)가 결정하는데 걸리는 시간보다도 더 적은 시간에, CPU에서의 턴(turn)을 가지는 모든 스레드(thread)를 줄 수 있다. 하지만, 특정한 태스크는 CPU를 압도(overwhelm)하거나 또는 오버테이크(overtake)할 수도 있다. 게다가, 하나의 CPU 이상으로 상기 PAUSE 기능을 확장하는 것이 바람직할 것이다.
요약
간략하게, 본 발명은 컴퓨터들의 어레이를 포함하며, 각각의 컴퓨터는 그 자신의 메모리를 갖고 있으며 계산적인 기능들을 독립적으로 수행할 수 있다. 태스크들을 협동적으로 완수하기 위해서, 상기 컴퓨터들은 데이터 및/또는 명령들을 서로 서로 전달해야만 한다. 한가지 가능성 있는 구성은, 상기 컴퓨터들이 직교적으로 인접한 컴퓨터들 사이에서 연결된 데이터 경로들을 갖는 것이며, 이에 따르면 각각의 컴퓨터는 최대 4 대의 "이웃들" 과 직접적으로 통신할 수 있다. 만일, 이웃한 컴퓨터가 아닌 또 다른 컴퓨터와 통신하기를 원한다면, 다른 컴퓨터들을 통해서 원하는 목적지로 통신 채널들이 설정될 것이다.
따라서, 설명된 환경에 의하면, 최대 4개의 명령들을 내포한 데이터 워드들이, 컴퓨터들 사이에서 및 각 컴퓨터들의 내부 메모리들로부터 각 컴퓨터들의 내부 메모리들로, 병렬로 전달될 수 있다. 단일 데이터 워드의 미니-프로그램의 한 가지 타입은 본 명세서에서 마이크로-루프로 지칭될 것이다. 프로세서들의 매우 큰 어레이에서는, 큰 태스크들은 더 작은 태스크들로 이상적으로 분할되며, 상기 더 작은 태스크들 각각은, 소정의 제한된 능력들을 갖는 프로세서에 의해 능히 완수될 수 있음을 유의해야 한다. 따라서, 4개의 명령 루프들이 매우 유용할 것으로 생각된다. 이러한 내용은, 이웃으로부터 설비(facilities)들을 이따금씩 차용하는 것이 제한된 설비들을 갖는 컴퓨터들에게 있어 매우 유용하다는 관련사실로 인해 더욱 더 중요해 진다. 이러한 사실은 마이크로-루프들을 사용할 수 있는 이상적인 기회를 제공할 것이다. 이웃으로부터 컴퓨터가 프로세싱 능력 또는 이와 유사한 것을 차용할 필요가 있을 수도 있는 반면에, 또 다른 유사한 가능성은, 자신의 내부 메모리와 유사한 방법으로 메모리를 사용하여, 이웃으로부터 컴퓨터가 소정의 메모리를 빌릴 필요가 있을 수도 있다는 것이다. 이웃으로 하여금 일련의 데이터를 읽거나 또는 쓰도록 지시하는 마이크로-루프를 이웃에게 전달함으로써, 전술한 바와같은 메모리 차용이 쉽게 완수될 수 있다. 이러한 마이크로 루프는 예를 들면, 특정 한 내부 메모리 위치로부터 기록하라는 명령, 상기 위치를 증가시키는 명령, 그리고 소정 횟수의 이터레이션(iteration)을 반복하라는 명령을 포함할 수 있다. 마이크로 루프는 단일 워드이기 때문에, 마이크로 루프는 한번 이상 명령 메모리 페치(instruction memory fetch)를 수행할 수는 없다.
마이크로 루프를 이웃에게 전달하는 전술한 일례는, 본 발명의 또 다른 양상에 관한 일 실시예이며, 현재 Forth 컴퓨터 언어로 구현되기 때문에, "포스릿(Forthlets, 이하 포스릿 또는 Forthlet 이라 함)" 이라고 지칭된다. 비록, 본 발명의 응용은 Forth를 사용하는 것에 국한되지 않는다. Forthlet은, 실행을 위해 컴퓨터로 직접 전송될 수 있는 미니 프로그램이다. 마이크로 루프와는 대조적으로, 하나 이상의 워드일 수도 있으며 복수회의 메모리 페치를 수행할 수 있다. 종래기술에 따른 컴퓨터들에서는, 명령들은 실행되기 전에 읽혀지고 저장되어야만 했으나, 본 명세서에서 전술한 내용들을 참조하면, 본 발명에서는 그럴 필요가 없다. 실제로, 컴퓨터가 Forthlet 을 생성할 수 있으며 실행을 위해 이를 또 다른 컴퓨터로 전달할 수 있다는 것이 본 발명의 중요한 양상이 될것이다. Forthlet들은 프로그래머에 의해 미리-쓰여질수도 있으며 사용을 위해 저장될 수도 있다. 사실, Forthlet은 필요한 때에 사용하기 위해 "library" 내에 축적될 수도 있다. 하지만, 컴퓨터 내의 미리 프로그램된 기준(criteria)에 따라 Forthlet 들이 생성될 수 있다는 것은 본 발명의 기술적 사상의 범위내이다.
본 발명의 일 실시에에 따른 일례에 의하면, 메모리를 읽고 쓰는 동일한(또는 유사한) 명령들이 또한 I/O 연산들을 수행할 수 있다는 점에서, I/O 레지스터들 이 메모리 어드레스들로서 취급될 수도 있다. 멀티-코어 칩들의 경우에, I/O 구조에 대해서 이러한 선택을 할 수 있는 강력한 세분화(ramification)가 존재한다. 코어 프로세서는 그의 국부(local) ROM 및 RAM 으로부터 명령들을 읽거나 실행할 수도 있을 뿐만 아니라, I/O 포트들 또는 레지스터 상에 제공된 명령들을 읽거나 실행할 수도 있다. 이제, 데이터를 전송하는 타이트한(tight) 루프들은 믿을 수 없을만큼 강력해졌다. 이는 I/O 포트들에서 명령 스트림들이 코어 프로세서들로 제공되는 것을 허용하며, 이들로부터 직접적으로 실행되는 것을 허용한다. 따라서, 하나의 코어는 코드 객체(code object)를 직접적으로 이를 실행할 수 있는 인접한 코어 프로세서로 보낼 수 있다. 코드 객체들은 코어들 사이에서 전달 될 수 있는바, 코어들은 레지스터들에서 코드 객체들을 실행한다. 코드 객체들은 매우 빠른 고속으로 도달하는바, 이는 각각의 코어는 본질적으로 코드 명령들을 전송하는데 시간을 명백히 소비하지 않고 자신의 국부 어드레스 공간내에서 전적으로 동작하기 때문이다.
앞서 논의된 바와같이, 각각의 명령 패치는, 복수개의(현재 논의되고 있는 실시예에서는 4개) 명령등을 코어 프로세서로 불러들인다. 비록, 이러한 종류의 빌트-인 "캐시"는 어느정도 작겠지만, 명령들 자신들이 이를 이용하는 때에는 매우 효율적이다. 예를 들면, 하나의 18-비트 명령 워드의 범위내에 전적으로 포함된 마이크로 다음번 루프들(micro-for next loops)은 구성(construct)될 수 있다. 이러한 타입의 구성들은 I/O 레지스터들 내로 내장된 자동 상태 시그널링(automatic status signaling)과 조합되었을 때에 이상적인바, 왜나하면 큰 데이터 블록들이 오직 하나의 명령 패치와 함께 전송될 수 있기 때문이다. 그리고 이러한 종류의 명령 패킹(packing)과 더불어, 인접한 프로세서 코어로부터의 공유된 I/O 레지스터 상에 제공된 명령들을 실행한다는 개념은 이제 강력한 성능을 갖게 되는바, 이는 상기 레지스터에 출현한 각각의 워드가 하나가 아닌 네개의 명령들을 나타내기 때문이다. 이러한 소프트웨어/하드웨어 타입들의 구조들 및 다중-코어 칩들의 성능에 대한 이들의 경이적인 충격은 전통적인 언어들에는 사용가능하지 않다. - 전통적인 언어들은 복수개의 명령들이 하나의 워드내에 패킹되어 있는 명령 세트에서나 가능할 뿐이며 완벽한 루프들은 이들 워드내로부터 실행될 수 있다.
통상적인 데이터 및 리턴 스택이, 순환성으로 기능하는 레지스터들의 어레이에 의해 대체되는 본 명세서에서 설명된 디바이스는, 패턴을 반복한다. 데이터 스택은 T 레지스터, S 레지스터, 및 교번하는 패턴으로 전기적으로 상호 연결된 8개의 배선 접속된 레지스터로 이루어진다. 이러한 8개의 배선 접속된 8개의 레지스터들은 순환적으로 반복하는 패턴내에서 기능하는 방법과 같이 상호접속된다. 이러한 구성은 스택의 외부로부터 판독을 금지하며, 빈 레지스터 값을 의도하지 않게 읽는 것을 금지한다.
데이터 스택과 유사하게, 리턴 스택은 R 레지스터 및 교번하는 패턴으로 전기적으로 상호 연결된 8개의 배선 접속된 레지스터로 이루어진다. 이러한 8개의 배선 접속된 8개의 레지스터들은 순환적으로 반복하는 패턴내에서 기능하는 방법과 같이 상호접속된다. 이러한 구성은 스택의 외부로부터 판독을 금지하며, 빈 레지스터 값을 의도하지 않게 읽는 것을 금지한다.
상술한 바와같은, 2중 스택 프로세서는, 독립적으로 기능하는 프로세서처럼 기능할 수 있으며, 또는 상호연결된 컴퓨터 어레이내의 복수개의 유사한 또는 서로 다른 프로세서들과 함께 사용될 수도 있다.
본 발명은, 본 명세서에서 기술된 바와 같으며 복수개의 도면들을 통해 도시된 바와같은 본 발명을 실시하는 모드들에 관한 설명을 통해 해당 기술분야의 당업자들에게 상세히 설명될 것이다. 기술된 바와같은 본 발명의 목적들 및 장점들은 본 발명의 가능한 모든 장점들에 대한 배타적인 설명이 아니다. 더 나아가, 하나 이상의 의도된 목적들 및/또는 장점들이 존재하지 않거나 또는 응용에 있어 필요치 않는 경우에도 본 발명을 실현하는 것이 가능할 것이다.
또한, 해당 기술분야의 당업자들은, 본 발명에 대한 다양한 실시예들이 앞서 설명된 목적들 및 장점들 중 하나 또는 그 이상(전부일 필요는 없음)을 획득할 수 있다는 점을 인식할 것이다. 따라서, 여기에서 기술된 목적들 및/또는 장점들은 본 발명의 필수적인 요소들이 아니며, 단지 예시적인 제한으로 이해되어야만 한다.
본 발명을 실시하는 방법은 후술될 상세한 설명들에서 도면들을 참조하여 설명된는바, 유사한 참조번호들은 동일하거나 유사한 구성요소를 나타낸다. 비록 본 발명이 본 발명의 목적들을 성취하기 위한 모드들에 대하여 기술되고 있지만, 해당 분야의 당업자들은 본 발명의 사상이나 스코프를 벗어남이 없이 전술한 가르침에 따라 다양한 실시예들이 완수될 있음을 이해할 것이다.
본 명세서에 기재된 바와같은 본 발명의 실시예들, 변형예들 및 도면에 도시된 것들은, 단지 예시적인 취지로 제공된 것이며 본 발명의 사상을 제한하는 것이 아니다. 특별히 달리 언급되지 않는한, 본 발명의 개별적인 양상들 및 구성요소들은 생략되거나 수정될 수도 있으며 또는 기 알려진 등가물들에 의해 대체될 수도 있다. 또는, 가령 미래에 개발될 예정이거나, 적절한 대체물로 미래에 알려질 것들과 같이, 알려지지 않은 대체물에 의해 대체될 수도 있다. 또한, 권리요구된 발명의 사상 및 스코프의 범위를 벗어남이 없이, 다양한 실시예를 위해서 본 발명이 수정될 수도 있는바, 이는 가능성 있는 응용예의 범위는 매우 넓기 때문이며 또한, 본 발명은 이러한 많은 변형예들에 대해 적용가능하도록 의도되었기 때문이다.
비록, 컴퓨터들 사이에 비동기식 통신들 및 개별적 비동기식으로 동작하는 컴퓨터들 모두를 갖는 컴퓨터 어레이에 대한 일례를 이용하여 다음의 실시예가 설명되었지만, 본 발명의 응용예들은 이러한 문맥에 결코 제한되지 않는다.
본 발명은 개별적인 컴퓨터들의 어레이를 포함한다. 본 발명의 컴퓨터 어레이는 도1에 도시되어 있으며, 범용 참조번호 10에 의해 지시된다. 컴퓨터 어레이(10)는 복수개(도시된 도면에서는 24개)의 컴퓨터(12)들을 갖는다(컴퓨터들은 때때로 "코어들", "노드들" 이라고 지칭되기도 한다). 도시된 실시예에서, 모든 컴퓨터들(12)은 하나의 다이(14)에 배치되어 있다. 각각의 컴퓨터들(12)은 일반적으로 독립적으로 기능하는 컴퓨터들인바, 이는 좀더 상세히 후술될 것이다. 컴퓨터들(12)은 복수개의 상호연결 데이터 버스들(16)에 의해 상호 연결되어 있다(데이터 버스들의 갯수는 앞으로 자세히 후술될 것이다). 이러한 실시예에서, 상기 데이터 버스들(16)는 양방향 비동기 고속 병렬 데이터 버스들이지만, 본 발명의 사상의 범위내에서는 그 목적으로 또 다른 상호연결 수단들이 채용될 수도 있다. 어레이(10) 에 대한 상기 실시예에서, 컴퓨터들(12) 사이의 데이터 통신은 비동기식일 뿐만 아니라, 개별적인 컴퓨터들(12) 역시 내부적으로는 비동기식 모드에서 동작한다. 이러한 사실은 발명자에 의해 인지된 것이며, 중요한 장점을 제공한다. 예를 들어, 클럭 신호는 컴퓨터 어레이(10)의 전체에 분포될 필요가 없기 때문에, 매우 큰 파워가 절약될 수 있다. 나아가, 클럭 시그널을 공급할 필요가 없다는 것은 어레이(10)의 크기를 제한하거나 또는 다른 알려진 문제점들을 일으킬 수 있는 많은 타이밍 문제들을 제거한다. 24개 컴퓨터들의 어레이는 그로 한정되는 것이 아니고 컴퓨터들의 수는 칩 제작이 더욱 정교해짐에 따라 증가 될 것으로 예상되며, 그야말로 확장성은 이 구성의 원칙이다.
당업자는 도 1의 다이(die)(14) 상에는 명확성을 위해 생략된 부가적인 구성요소들이 있음을 인식할 것이다. 그러한 부가적인 구성요소들은 파워 버스들, 외부 연결패드들, 및 마이크로프로세서 칩의 기타 다른 공통요소들을 포함한다.
컴퓨터(12e)는 상기 어레이(10)의 주변부에 있지 않은 컴퓨터들(12) 중 하나의 예이다. 즉, 컴퓨터(12e)는 직교적으로 인접한 네 개의 컴퓨터들(12a, 12b, 12c 및 12d)을 갖는다. 컴퓨터 12a부터 12e까지의 이 그룹핑은 어레이(10)의 컴퓨터들(12) 간의 통신들에 대한 이후의 보다 상세한 논의와 관련되어 사용될 것이다. 도 1에서 도시된 바와 같이, 컴퓨터(12e)와 같은 내부 컴퓨터들은, 버스들(16)을 통해 직접적으로 서로 통신할 수 있는 네 개의 다른 컴퓨터들(12)을 가질 것이다. 이하의 설명에서, 어레이(10) 주변부의 컴퓨터들(12)은 오직 세 개, 모퉁이의 컴퓨터들(12)의 경우에는 오직 두 개의 다른 컴퓨터들(12)과 직접적으로 통신하게 될 것이라는 것을 제외하고는, 논의되는 원칙들은 상기 모든 컴퓨터들(12)에 적용될 것이다.
도 2는 오직 몇몇 컴퓨터들(12)만을 보여주고 있는 도 1의 부분 및 특히 12a에서부터 12e까지의 컴퓨터들을 포함한 부분에 대한 보다 구체적인 도면이다. 도 2는 역시 데이터 버스들(16)이 각각 읽기 라인(read line)(18), 쓰기 라인(write line) 및 다수의(이 예에서는 18) 데이타 라인(data lines)(22)을 가진다는 것을 보여주고 있다. 상기 데이터 라인(22)은 하나의 18 비트 명령 워드의 모든 비트들을 일반적으로 동시에 병렬적으로 전송할 수 있다. 본 발명의 일 실시예에서, 컴퓨터들(12)의 일부는 인접 컴퓨터들의 미러 이미지들(mirror images)이다. 그러나, 컴퓨터들(12)이 모두 동일하게 구성되는지 또는 인접 컴퓨터들의 미러 이미지들로서 구성되는지의 여부는 지금 설명되는 본 발명의 양상이 아니다. 따라서, 본 발명을 보다 자세히 설명하기 위하여, 이 가능한 복잡성은 여기서 더 논의하지 않기로 한다.
본 발명의 방법에 따라, 컴퓨터(12e)와 같은 컴퓨터(12)는 하나, 두 개, 세 개 또는 네 개 모두의 그것의 읽기 라인들(18)을, 하나, 두 개, 세 개 또는 모든 네 개의 인접 컴퓨터들(12)로부터 데이터를 수신할 준비가 되도록 설정할 수 있다. 유사하게, 컴퓨터(12)가 하나, 두 개, 세 개 또는 모든 네 개의 쓰기 라인들(20)을 하이(high)로 설정하는 것도 역시 가능하다. 비록 본 명세서가 하나 이상의 컴퓨터들(12) 쓰기 라인들(20)을 하이(high)로 셋팅하는 것에 대해 함께 설명하고 있지는 않지만, 사실상 멀티포트(multi-port) 주소들에 쓰는 것과 같이, 이것이 바람직한 여러 경우들이 있기 때문에, 그러한 운용을 위한 사용이 있을 수 있다는 것도 생각할 수 있으므로, 그렇게 하는 것이 본 발명의 범위를 벗어나는 것은 아니다. 인접 컴퓨터들(12a,12b,12c 또는 12d) 중 하나가 자신과 컴퓨터(12e) 사이의 쓰기 라인(20)을 하이로 설정할 때, 만약 컴퓨터(12e)가 이미 그에 대응하는 읽기 라인(18)을 하이로 설정했다면, 그때 워드는 연결된 데이터 라인들(22) 상에서 컴퓨터(12a, 12b, 12c 또는 12d)로부터 컴퓨터(12e)로 전송된다. 그러면, 상기 전송 컴퓨터(12)는 쓰기 라인(20)을 해제하고 상기 수신 컴퓨터(이 예에서 12e)는 쓰기 라인(20) 및 읽기 라인(18) 둘 다를 로우(low)로 할 것이다. 상기 뒤의 동작은 상기 데이터가 수신되었다는 것을 전송 컴퓨더(12)에 알려주게 될 것이다. 상기 설명이 반드시 일련의 사건들을 순서대로 서술하도록 의도된 것은 아님을 밝혀둔다. 실제상황에서는, 이 예에서의 상기 수신 컴퓨터는 전송 컴퓨터(12)가 그것의 쓰기 라인(20)을 해제하기(하이로 올리는 것을 멈추기)전에 쓰기 라인(20)을 약간 로우로 설정하려고 할 수도 있다. 몇몇 예에서는, 상기 전송 컴퓨터(12)가 그것의 쓰기 라인(20)을 해제하자마자 상기 쓰기 라인(20)이 수신 컴퓨터(12e)에 의해 로우로 될 것이다.
일 예로서, 오직 프로그래밍 에러만이 버스들(16) 중 하나의 양 끝단에 있는 컴퓨터들(12) 둘 다 그 사이의 읽기 라인(18)을 하이로 설정하게끔 할 것이다. 마찬가지로, 동시에 쓰기 라인(18) 사이를 하이로 설정하려고 하는 것도 버스들(16) 중 하나의 양 끝단에 있는 컴퓨터들(12) 둘 다에 대한 에러일 것이다. 유사하게, 위에서 논의된 바와 같이, 단일 컴퓨터(12)가 그것의 네 쓰기 라인들(20) 중 하나 이상을 하이로 설정하는 것이 현재로서는 바람직하다고 여겨지지는 않는다. 그러나, 읽기 라인들(18)의 서로 다른 조합들을 하이로 설정하여, 컴퓨터들(12) 중 하나가 그것에 대응하는 쓰기 라인(20)을 하이로 설정하기 위해, 선택된 컴퓨터(12) 중 첫 번째 것으로부터 데이터를 기다리는 대기 상태에 있을 수 있도록 하는 것이 바람직한 경우들이 있을 것으로 기대된다.
상기 예에서, 컴퓨터(12e)는 인접 컴퓨터(컴퓨터들 12a,12b,12c 또는 12d의 하나 이상으로부터 선택된)가 그것의 쓰기 라인(20)을 하이로 설정하기 전에, 그것의 읽기 라인들(18)의 하나 이상을 하이로 설정하는 것으로서 설명되었다. 그러나, 이 프로세스는 물론 반대 순서로도 일어날 수 있다. 예를 들어, 만약 컴퓨터(12e)가 컴퓨터(12a)에 쓰기를 시도하고 있는 중이었다면, 그때 컴퓨터(12e)는 컴퓨터(12e) 및 컴퓨터(12a) 사이의 쓰기 라인(20)을 하이로 설정할 것이다. 만약 컴퓨터(12e) 및 컴퓨터(12a) 사이에 읽기 라인(18)이 컴퓨터(12a)에 의해서 이미 하이로 설정되어있지 않았다면, 그 때 컴퓨터(12e)는 컴퓨터(12a)가 그 읽기 라인(20)을 하이로 설정할 때까지 단순히 기다리게 될 것이다. 그러면 상기 설명한 바와 같이, 쓰기 라인(18) 및 읽기 라인(20) 두 개의 대응하는 라인 모두가 하이일 때, 데이터 라인들(22)에서 전송되기를 기다리는 상기 데이터는 전송된다. 그 후에, 수신 컴퓨터(12)(이 예들에서 컴퓨터 12a)는 전송 컴퓨터(12e)가 그것을 해제하자마자 상기 두 컴퓨터들(이 예에서 12e 및 12a) 사이의 읽기 라인(18) 및 쓰기 라인(20) 둘 다를 로우로 설정한다.
컴퓨터(12e)와 같은 컴퓨터(12)가 쓰기를 고대하면서 그것의 쓰기 라인 들(20) 중 하나를 하이로 설정할 때마다, 만약 상기 데이터가 즉시 전송되는 경우에 있어서, 만약 상기 데이터를 전송받게 되는 컴퓨터(12)가 이미 그것의 읽기 라인(18)을 하이로 설정하지 않았다면, 상기 설명한 바와 같이 상기 데이터가 상기 적절한 인접 컴퓨터(12)로부터 "요청"될 때까지, 본질적으로는 전력을 사용하지 않고, 단지 기다릴 것이다. 유사하게, 컴퓨터(12)가 읽기를 고대하면서 그것의 읽기 라인들(18) 중 하나 이상을 하이로 설정할 때마다, 선택된 컴퓨터(12)로 연결된 쓰기 라인(20)이 상기 두 컴퓨터들(12) 간에 명령을 전송하도록 하이로 올라갈 때까지 본질적인 전력의 사용 없이, 단지 기다릴 것이다.
컴퓨터들(12)이 상기 설명한 바대로 기능 하도록 하는 여러 가능한 수단들 및/또는 방법들이 있을 수 있다. 그러나, 본 발명의 예에서는, 컴퓨터들(12)은 일반적으로 내부적으로 비동기적으로 실행하기 때문에 단순히 그렇게 동작하는 것이다(상기 설명된 비동기식 방법으로 그들 사이에 데이터를 전송하는 것 외에도). 즉, 명령들은 순차적으로 완료된다. 쓰기 또는 읽기 명령이 있을 때, 그 명령이 완료될 때까지는(또는, 아마도 대안적으로는, "리셋(reset)" 등등에 의해 그것이 중단(aborted)될 때까지) 더 이상의 활동이 있을 수 없다. 종래 기술에는 정기적인 클럭 펄스가 없다. 오히려 펄스는, 실행되고 있는 명령이 읽기 또는 쓰기 유형의 명령(주어진 그 읽기 또는 쓰기 유형의 명령은 다른 엔티티에 의해 완료될 것을 요구한다)이 아닐 때만 또는 그 밖에 상기 읽기 또는 쓰기 유형의 동작이 사실상 완료되었을 때에만 다음 명령을 수행하기 위해서 발생 된다.
도 3은 도 1 및 도 2의 컴퓨터들(12)의 하나의 예에 대한 일반적인 레이아 웃(layout)을 묘사하는 블록 다이아그램이다. 도 3에서 보여지는 바와 같이, 상기 컴퓨터들(12)의 각각은 일반적으로 자체적인 램(24) 및 롬(26)을 가지는 내장형(self contained) 컴퓨터이다. 앞서 언급한 바와 같이, 컴퓨터들(12)은 때때로 단일 칩 상에서 결합 되는, 개별 "코어들(cores)" 로 언급되기도 한다.
컴퓨터(12)의 다른 기본 구성 요소들로는 리턴 스택(return stack)(28), 명령 영역(instruction area)(30), 산술 논리 연산 장치(arithmetic logic unit:ALU)(32), 데이터 스택(data stack)(34) 및 명령들을 디코딩하기 위한 디코드 논리 영역(decode logic section)(36)이 있다. 당업자는 일반적으로 이 예에서의 컴퓨터들(12)처럼 스택 기반 컴퓨터들의 동작에 익숙할 것이다. 컴퓨터들(12)은 데이터 스택(34) 및 별도의 리턴 스택(28)을 가지는 듀얼(dual) 스택 컴퓨터들이다.
본 발명의 실시예에서, 컴퓨터(12)는 인접 컴퓨터들(12)과 통신하기 위한 네 개의 통신 포트들(38)을 가진다. 이 통신 포트들(38)은 오프(off) 상태, 수신(receive) 상태(신호들을 컴퓨터(12)로 받아들이기 위한) 및 발신 상태(신호들을 컴퓨터 밖으로 내보내기 위한)를 가지는 트라이-스테이트 드라이버(tri-state drivers)이다. 물론, 만약 특정 컴퓨터(12)가 컴퓨터(12e)의 예와 같이 어레이(도 1)의 내부에 있는 것이 아니라면, 적어도 여기서 기술된 목적을 위해서는, 상기 통신 포트들의 하나 이상이 그 특정 컴퓨터에 사용되지 않을 것이다. 상기 다이(die)의 끝 부분에 있는 그런 통신 포트들(38)은 그러한 통신 포트(38)가 외부 입출력 포트(39)(도 1)로서 역할 수 있도록 하기 위해, 그러한 컴퓨터(12) 내부로 설계되거나 또는 외부에 있으면서 그곳과 연결되도록 설계된 부가적인 회로부를 가질 수 있다. 그러한 외부 입출력 포트들(39)의 예들은 USB 포트, RS232 직렬 버스 포트들, 병렬 통신 포트들, AD/DA 변환 포트들, 그리고 많은 기타 다른 가능한 변형들을 포함하며, 다만 이것들로 한정되는 것은 아니다. 도 1에서, "에지(edge)" 컴퓨터(12f)는 외부 입출력 포트(39)을 통해 외부 장치(82)와 통신하기 위해서 인터페이스 회로부(80)에 연결되어 있는 것으로 도시되어 있다. 명령 영역(30)은 이 예에서, 레지스터(40a), B 레지스터(40b) 및 P 레지스터(40c)를 포함하는 다수의 레지스터들(40)을 포함한다. 이 예에서, B 레지스터(40b) 및 P 레지스터(40c)가 9비트 레지스터인 반면, A 레지스터(40a)는 풀(full) 18비트 레지스터이다.
계산된 결과들의 정확성을 보장하기 위해서, 프로세서는 그것이 예외 상황을 발생시킬지 아닐지를 결정하기 위해 각 동작을 체크한다. 예를 들면, 산술 동작들은 오버플로워 및 언더플로워 예외들에 영향을 받는다. 오버플로워 예외는, 계산된 수가 그 수에 대해 명기된 포맷에서 표시될 수 있는 최대 수보다 클 때 발생한다. 언더플로워 예외는, 계산된 수가 그 수에 대해 명기된 포맷에서 표시될 수 있는 최소 수보다 작을 때 발생한다(IEEE 754-1985 이진 산술 연산(binary arithmetic operation)에 대한 표준).
본 발명은 써큘러 패턴(circular pattern)에서 기능 하는 상호연결된 레지스터들의 어레이를 포함하는, 스택 컴퓨터 프로세서를 개시한다. 상기 데이터 스택 및 리턴 스택은, 많은 종래의 컴퓨터들에서와 같이 스택 포인터에 의해 접속되는 메모리에 있는 어레이들이 아니다.
도 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)을 사용하는 것이 불필요하거나 심지어 바람직하지 않은 경우들에 대비하기 위해 no-op(no operation)명령이 컴퓨터(12)의 명령 셋에 포함된다. 본 발명의 특정 실시예에 따라, 교대(alternate) 슬롯들(특히, 슬롯 1(54b) 및 3(54c)) 내의 비트들(50)의 극성(polarity)(acative high as compared to active low)은 역으로 바뀔 수 있다. 그러나, 이것은 본 발명의 필수적인 면은 아니며, 따라서, 본 발명의 보다 나은 설명을 위해서 가능한 복잡성은 아래의 설명에서 피할 것이다.
도 5는 도 3의 슬롯 시퀀서(42)의 개략적인 표현이다. 도 5에서 보여지는 바와 같이, 슬롯 시퀀서(42)는 다수의 인버터들(56) 및 하나의 NAND 게이트(58)을 가짐으로서, 신호가 14개의 인버터(56) 및 NAND 게이트(58)를 통과함으로써 홀수번 인버터 될 수 있게 한다. OR 게이트(60)로의 두 개의 입력 중 어느 하나가 높이 올라갈 때 슬롯 시퀀서(42)에서 신호가 시작된다. 제 1 OR 게이트 입력(62)은 실행되고 있는 명령(52)의 비트 i4(66)(도 4)로부터 들어온다. 만약 비트 i4가 높으면 그 때 그 특정 명령(52)은 ALU 명령이고, 상기 i4 비트(66)은 '1'이다. i4비트가 '1'일 때, 그 때 제 OR 게이트 입력(62)은 높고, 그리고 슬롯 시퀀서(42)는 다음 명령(52)을 실행하기 위해 펄스를 발생시키도록 트리거된다.
하이로 올라가는 제 1 OR 게이트 입력(62)에 의하거나 하이로 올라가는 제 2 OR 게이트 입력에 의해(이후에 논의될 내용과 같이), 슬롯 시퀀서(42)가 트리거되면, 신호는 각각의 경우에 슬롯 시퀀서 출력(68)에서 출력을 발생하면서, 슬롯 시퀀서(42)를 두 번 돌게 될 것이다. 상기 신호가 통과하는 첫 번째에는, 슬롯 시퀀서 출력(68)은 로우일 것이고, 두 번째에는 슬롯 시퀀서 출력(68)에서의 출력은 하이로 높아질 것이다. 슬롯 시퀀서 출력(68)으로부터의 상대적으로 넓은 출력은, 좁은 타이밍 펄스(timing pulse)를 출력으로서 공급하는 펄스 제너레이터(pulse generator)(70)(블록 다이아그램의 형식으로 나타난)로 공급된다. 당업자는 상기 좁은 타이밍 펄스가 컴퓨터(12)의 동작을 정확하게 개시하기에 바람직하다는 것을 인식할 것이다.
실행되고 있는 특정 명령(52)이 읽기 또는 쓰기 명령일 때, 또는 실행되고 있는 명령(52)이 연속해서 다음 명령(52)의 즉각적인 실행을 트리거하는 것이 바람직하지 않는 어떤 다른 명령일 때, i4 비트(66)은 '0'(low)이고 제 1 OR게이트입력(62)은 그 결과 역시 로우이다. 당업자는 컴퓨터(12)와 같은 장치에서 이벤트들의 시간이 일반적으로 매우 중요하다는 것과 이것도 예외가 아니라는 것을 인식할 것이다. 슬롯 시퀀서(42)를 시험해보면, 당업자는 상기 링(ring)의 제 2 "랩(lap)"을 개시하기 위해서, 상기 신호가 NAND 게이트(58)를 지나서 계산된 후가 될 때까 지, OR 게이트(60)로부터의 출력이 하이로 유지되어야 한다는 것을 인식하게 될 것이다. 그 결과, OR 게이트(60)로부터의 출력은, 상기 회로의 원하지 않은 계속된 진동(oscillation)을 막기 위해서 상기 제 2 "랩(lap)" 동안 낮아지게 될 것이다.
상기 설명으로 비추어 볼 때 이해될 수 있는 바와 같이, i4 비트(66)가 '0'이면, 슬롯 시퀀서(42)는-이후에 논의될 제 2 OR 게이트 입력(66)이 높지 않음을 가정해 보면- 트리거되지 않을 것이다.
상기 논의된 바대로, 각 명령(52)의 i4 비트(66)는 그 명령이 읽기 또는 쓰기 유형의 명령인지 여부에 따라 설정된다. 명령(52)에서 남아있는 비트들(50)은 그 명령을 위한 상기 특정 op코드(opcode)의 리메인더(remainder)를 제공한다. 읽기 또는 쓰기 유형의 명령의 경우에, 상기 비트들의 하나 이상은 그 특정 컴퓨터(12)에서, 데이터가 어디서 읽혀지는지 또는 어디로 쓰여지는지를 지시하는데 사용될 수 있다. 본 발명의 예에서, 쓰여지는 데이터는 항상 T 레지스터(44)(데이터 스택(34)의 맨 위)로부터 오나, 데이터는 실행될 수 있는 곳으로부터 T 레지스터(44) 또는 명령 영역(30)으로 선택적으로 읽혀질 수 있다. 본 발명에 대한 이 특정 실시예에서, 그것은 데이터나 명령들이 여기 설명된 방식으로 통신할 수 있고 그리고 비록 이것이 본 발명의 필수적인 것은 아니지만, 그 결과 명령들이 데이터 버스(16)로부터 직접 실행될 수 있기 때문이다. 나아가, 비트들(50)의 하나 이상은 포트들(38) 중 어느 것이 읽기 또는 쓰기를 위해 설정될 것인지를 지시하는데 사용될 것이다. 이 이후의 동작은 A 레지스터(40a), B 레지스터 등등과 같은 레지스터 40을 지정하기 위해서 하나 이상의 비트들을 사용함으로서 선택적으로 수행된다. 그러한 예에서, 상기 지정된 레지스터(40)는, 상기 포트들(38)(그리고 역시, 상기 컴퓨터(12)가 통신하려고 시도하는, 메모리, 외부 통신 포트, 등등과 같은 기타 다른 가능한 엔티티) 각각에 대응되는 비트를 가지는 데이터로 프리로딩(preloading) 될 것이다. 예를 들면, 상기 특정 레지스터(40)에서 네 개 비트들 각각은, 상위 포트(38a), 오른쪽 포트(38b), 왼쪽 포트(38c) 또는 하위 포트(38d)의 각각에 대응할 수 있다. 그러한 경우에, 그러한 비트 위치들 중 '1'이 있는 곳에서, 통신은 대응되는 포트(38)을 통해 진행되도록 설정될 것이다. 여기서 앞서 논의한 바대로, 본 발명의 실시예에서, 읽기 op코드(opcode)가 단일 명령에서 통신을 위해 하나 이상의 포트(38)를 설정하는 것이 기대되는 반면, 비록 가능하긴 하지만, 쓰기 op코드는 단일 명령 통신을 위해 하나 이상의 포트(38)를 설정할 것으로 기대되지 않는다.
바로 아래의 예는 어떤 인접한 컴퓨터(12) 간의 통신에도 적용 가능하지만, 컴퓨터(12e)가 컴퓨터(12c)로 쓰기를 시도하게 되는 통신을 가정할 것이다. 쓰기 명령이 쓰고 있는 컴퓨터(12e)에서 실행되면, 선택된 쓰기 라인(20)(이 예에서, 컴퓨터(12e)와 컴퓨터(12c) 간의 쓰기 라인(20))은 하이로 설정되며, 만약 그에 대응하는 읽기 라인(18)이 이미 하이라면, 그때는 데이터가 상기 선택된 통신 포트(38)를 통해서 상기 선택된 위치로부터 즉시 전송된다. 또한, 만약 상기 대응하는 읽기 라인(18)이 이미 하이가 아니라면, 그때 컴퓨터(12e)는 대응하는 읽기 라인(18)이 하이로 올라갈 때까지 단순히 동작을 멈출 것이다. 읽기 또는 쓰기 유형의 명령이 있을 때, 컴퓨터(12a)를 멈추기 위한 메카니즘(또는, 더 정확하게는 더 이상의 동 작을 하지 않도록 하는 것)이 여기서 앞서 논의되어 왔다. 간단히 말하면, 명령(52)의 op코드는 비트 포지션 i4(66)에서 '0'을 가질 것이고, 그래서 OR 게이트(60)의 제 1 OR 게이트 입력(62)은 낮고, 슬롯 시퀀서(42)는 인에이블링 펄스(enabling pulse)를 발생시키기 위해 트리거 되지 않는다.
읽기 또는 쓰기 유형 명령이 완료되었을 때, 컴퓨터(12e)의 동작이 어떻게 재개되는지에 대해, 그에 대한 메카니즘은 다음과 같다: 컴퓨터들(12e 및 12c) 간의 읽기 라인(18) 및 그에 대응하는 쓰기 라인(20)이 모두 하이일 때, 두 개의 라인들(18 및 20)은 그것을 하이로 유지하고 있는 각각의 컴퓨터들(12)에 의해 해제될 것이다. (이 예에서, 수신 컴퓨터(12c)가 읽기 라인(20)을 하이로지하는 반면, 전송 컴퓨터(12e)는 쓰기 라인(18)을 하이로 유지하게 될 것이다.) 그러면 수신 컴퓨터(12c)는 두 라인들(18 및 20) 모두를 로우로 할 것이다. 실제 경우에, 수신 컴퓨터(12c)는 전송 컴퓨터(12c)가 읽기 라인(18)을 해제하기 전에 라인들(18 및 20)을 로우로 낮추려고 할 수도 있다. 그러나, 라인들(18 및 20)은 하이로 높여지게 되고 약하게만 낮춰지기 때문에, 그 라인(18 및 20)이 그것을 하이로 높게 유지하고 있는 컴퓨터(12)에 의해 해제될 때까지는 라인(18 또는 20)을 로우로 낮추려는 어떠한 시도도 실제로 성공하지 못할 것이다.
데이터 버스(16)의 두 라인들(18 및 20)이 로우로 낮춰지면, 이것은 "응답(acknowledge)" 상황이다. "응답(acknowledge)" 상황에 따라 각각의 컴퓨터들(12e 및 12c)은 자신들만의 내부 응답(acknowledge) 라인(72)를 하이로 높게 설정할 것이다. 도 5에서 보여지는 바와 같이, 응답(acknowledge) 라인(72)은 제 2 OR게이트 입력(64)을 공급한다. OR 게이트(60) 입력들(62 또는 64) 둘 중에 하나로의 입력이 OR 게이트(60)의 출력을 하이로 높게 올릴 것이므로, 이것은 여기서 앞서 설명된 방식으로 슬롯 시퀀서(42)의 동작을 개시하여, 명령 워드(48)의 다음 슬롯(54)에서 명령(52)이 실행될 것이다. 응답(acknowledge) 라인(72)은 스퓨리어스(spurious) 주소들이 주소 버스로 들어가는 것을 막기 위해서 다음 명령(52)이 디코딩될 때까지 하이로 유지된다.
어떤 경우에도, 실행되고 있는 명령(52)이 상기 명령 워드(48)의 슬롯 3의 위치에 있을 때면, 컴퓨터(12)는, 물론 비트i4(66)이 '0'이 아니면, 다음 대기하고 있는 18 비트 명령 워드(48)를 페치(fetch) 할 것이다. 실제의 경우에, 본 발명의 메카니즘은 "프리페칭(prefetching)" 명령에 대한 방법 및 장치를 포함하여 상기 페치(fetch)가 명령 워드(48)에 있는 모든 명령들(52)의 실행 종료 전에 시작될 수있도록 한다. 그러나, 이는 또한 비동기 데이터 통신들을 위한 본 발명 방법 및 장치에 대한 필요한 양상이 아니다.
컴퓨터(12e)가 컴퓨터(12c)에 써넣는(write) 상기 예는 상세하게 설명되었다. 상기 설명의 견지에서 알 수 있는 바와 같이, 컴퓨터(12e)가 컴퓨터(12c)에 먼저 써넣기를 시도하는지 또는 컴퓨터(12c)가 먼저 컴퓨터(12e)로부터 판독하기를 시도하는지에 관계없이, 동작들은 필수적으로 동일하다. 동작은 컴퓨터들(12 및 12c) 모두가 준비될 때까지 완료될 수 없으며, 그리고 어느 컴퓨터(12e 또는 12c)라도 먼저 준비되면, 다른 컴퓨터(12e 또는 12c)가 전송을 완료할 때까지, 제 1 컴퓨터(12)는 단순히 "휴면으로 진행한다(goes to sleep)". 상술한 과정을 조사하는 또 하나의 방법은, 써넣기 컴퓨터(12e)와 수신 컴퓨터(12c)가 써넣기 및 판독 명령들을 각각 실행하는 때에, 실제로 이들 모두가 휴면으로 진입하지만, 마지막으로 트랜잭션에 진입하는 것은 판독 라인(18) 및 써넣기 라인(20) 모두가 하이(high)인 때에, 거의 순간적으로 재기상하는 반면에, 트랜잭션을 개시하는 제 1 컴퓨터는 제 2 컴퓨터(12)가 과정을 완료할 준비가 될 때까지, 거의 무한정으로 휴면을 유지할 수 있다.
디바이스들 간의 효율적인 비동기 통신들을 인에이블(enable)하는 방법은 일종의 승인 신호 또는 승인 조건이다. 본원에서 설명되는 바와 같은 이러한 방법은 디바이스들간의 비동기 통신들을 허용하거나 적어도 실행되게 하는 필요한 승인 조건을 제공한다. 더욱이, 승인 조건은 또한 승인 조건이 발생할 때까지, 하나 이상의 디바이스들로 하여금 "휴면으로 진행할" 수 있도록 한다. 당연하게, 승인 조건은 (상호연결 데이터 버스(16)를 통해 또는 개별 신호 라인을 통해) 컴퓨터들(12) 간에서 송신되는 개별 신호에 의해 컴퓨터들(12) 간에서 통신될 수 있으며, 이러한 승인 신호는 본 발명의 이러한 양상의 범주 내에 들 것이다. 그러나, 본원에서 설명되는 본 발명의 실시예에 따르면, 승인 방법이 통신에 실질적으로 영향을 미치기 위해 임의의 신호, 클록 사이클, 타이밍 펄스, 또는 설명되는 것 이외의 모든 이러한 자원을 요구하지 않는다는 점에서, 관련된 훨씬 많은 경제성이 있음을 이해할 수 있다.
본 발명에 대한 다양한 변형들이 그 값 또는 범위를 변경함이 없이 이루어질 수 있다. 예를 들어, 본 발명이 판독 명령들 및 써넣기 명령들에 관하여 설명되었 지만은, 실제 실행에서, 하나 이상의 타입의 판독 명령 및 써넣기 명령이 있을 수 있다. 하나의 예로서, 본 발명의 일 실시예에서, 레지스터를 증가시키는 써넣기 명령과 이를 증가시키지 않는 다른 써넣기 명령들이 있다. 유사하게, 써넣기 명령들은 본원에서 전술한 바와 같이, 어느 레지스터(40)가 통신 포트들(38)을 선택하는데에 사용되는지에 따라 변할 수 있다. 또한, 다수의 서로 다른 판독 명령들이 있을 수 있는데, 이는 컴퓨터들(12)의 설계자가 어떤 변화들을 대안적인 판독 특성들에 대한 유용한 선택으로 고려하는지에만 의존한다.
유사하게, 본 발명이 단일 다이(14) 상에 있는 어레이(10)의 컴퓨터들(12) 간의 통신들에 대하여 본원에서 설명되었지만은, 동일한 원리들 및 방법은 (입력/출력 포트 등을 통해) 어레이(10)의 컴퓨터와 외부 디바이스 간의 통신 또는 컴퓨터(12)와 그 전용 메모리 간의 통신들과 같은 다른 디바이스간 통신들을 수행하는데에 사용되거나 또는 사용을 위해 수정될 수 있다. 사실상, 일부 응용예들은 어레이들의 어레이들(arrays of arrays)을 요구할 수도 있다고- 본원에서 설명되는 디바이스간 통신 방법은 잠재적으로 어레이들의 어레이들 간의 통신에 적용된다 - 예상된다.
도 1의 컴퓨터(12g)와 같은 컴퓨터가 주 할당 태스크를 수행하기 위한 코드를 실행하는 때에, 프로그래머는 (12f 및 12g)와 같은 2개의 컴퓨터들 간의 간헐적인 대화가 바람직하다고 결정할 수 있다. 컴퓨터(12g)가 "입력 탐지(look for input)"에서 표시된 바와 같이, 하나 이상의 이웃 컴퓨터들이 통신을 시도하였는지를 알기 위해 가끔씩 멈춰지도록, 프로그래머가 규정하게 될 것이다. 만일 통신이 컴퓨터(12f) 내지 컴퓨터(12g)에 의해 개시된 써넣기와 같은 "입력?" 결정 동작(168)에 의해 표시되는 바와 같이 대기하는 경우에, 컴퓨터(12g)는 "다른 컴퓨터로부터의 수신" 동작(170)에서 통신을 종료할 것이다. 만일 그렇지 않은 경우에, 컴퓨터(12g)는 도 9에 도시된 바와 같이 자신에게 할당된 기능으로 복귀할 것이다. "다른 컴퓨터로부터의 수신" 동작(170) 이후에, 컴퓨터(12g)는 "입력에 대해 작용(act on input)" 동작(172)에서 수신된 입력에 대해 작용할 것이다. 프로그래머는 컴퓨터(12g)가 입력으로서 명령들을 예상할 것임을 규정하였을 것이며, 이 경우에, 컴퓨터(12g)는 명령들을 실행할 것이다. 대안적으로, 컴퓨터(12g)는 데이터가 작용됨을 예상하도록 프로그래밍 될 수 있다.
"입력에 대해 작용" 동작(172) 이후에, 컴퓨터(12g)는 자신의 주 기능으로 복귀하는데, 즉 "주 기능 실행" 동작(162)으로 복귀한다. 그러나, 훨씬 보다 복잡한 예들에 대한 가능성이 확실하게 존재한다. 컴퓨터(12f)로부터 수신된 일정한 입력들은 컴퓨터로 하여금 자신에게 이전에 할당된 주 기능을 중지함과 아울러 새로운 기능을 시작하게 하거나, 그렇지 않으면 단순히 일시적으로 정지하고 추가적인 입력을 기다릴 수 있다. 기술분야의 당업자가 인식할 것으로서, 여기에서의 작용에 대한 다양한 가능성들은 오직 프로그래머의 창조력에 의해서만 제한된다.
본원에서 설명되는 본 발명의 실시예에 따르면, 소정의 컴퓨터(12)는 태스크를 수행하는 동안에 인터럽트될 필요가 없는데, 그렇지 않으면 또 하나의 컴퓨터(12)에게 인터럽트를 요구할 수 있는 입력들을 모니터링하고 핸들링하는 태스크가 할당되기 때문이다. 그러나, 또 하나의 태스크를 핸들링하느라 바쁜 컴퓨터(12) 는, 컴퓨터가 입력에 대해 자신의 포트들(38)을 주시하도록 그 프로그래밍이 규정하지 않는 경우에 교란될 수 없음을 주목함이 또한 흥미로울 것이다. 따라서, 컴퓨터(12)로 하여금 다른 입력들을 탐색하도록 멈추도록 하는 것이 가끔씩 원해질 것이다.
본 발명의 실례는 PAUSE 명령의 동작이다. 본원에서 설명되는 사항은 여러 프로세서들간의 "협력적인 멀티-태스킹"이다. 일 세트의 태스크들은 노드 또는 노드들상에 상주한다. PAUSE는 모든 노드들 또는 인입되는(incoming) 실행가능 코드에 대한 포트들을 순차적으로 조사할 것이다. 기상(wake-up) 또는 웜 스타트(warm start)는 4개의 노-옵스(no-ops)(....)에 의해 선행된다. PAUSE 명령은 리턴(;) 명령으로 종료되며, 이후에 후속 스레드가 폴링된다. 마지막으로 조사되는 포트는 2개의 세트의 4개의 노-옵스들을 사용한다. 콜드 스타트(cold start)가 리셋 이후에 발생한다.
입/출력 핀(들)(39)을 갖는 코너 프로세서(12f) 및 에지 프로세서(12a)는 예를 들어, 외부 디바이스(82)에 의한 태스크를 수행하도록, 또한 PAUSE에 의해 폴링될 수 있다. PAUSE는 또한 시동 조건의 일부로서 ROM에 위치될 수 있다. 개시자 루틴이 중지로 점프하고 인접 프로세서들의 4-포인트 판독(four-point read)으로 진행할 것이다. 비록 복수의 프로세서들간의 PAUSE 기능이 4(Fourth)를 참조하여 본원에서 설명되었지만은, 복수의 프로세서들간의 PAUSE 기능에 대한 모든 개념들은 또한 다른 프로그래밍 언어들에 적용될 수 있다.
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)상에 값을 푸시한다. 즉, 데이터 스택(34)의 상부에 있는 T 레지스터(44)상의 값은 리턴 스택(28)의 R 레지스터(29)에 푸시(PUSH)된다. 명령 워드(48)의 제 3 슬롯(54d)에 종종 위치되는 FOR 명령(102)은 사실상 임의의 슬롯(54)에 위치될 수 있다. FOR 명령(102)이 제 3 슬롯(54d)에 위치되지 않는 경우에, 이 명령 워드(48)의 나머지 명령들(52)은 마이크로-루프(100)로 진행하기 이전에 실행될 것이며, 이는 일반적으로 후속으로 적재되는 명령 워드(48)가 될 것이다.
본 발명에 대해 현재에 설명되는 실시예에 따르면, 도 6에서 도시되는 NEXT 명령(104)은 특정 타입의 NEXT 명령(104)이다. 이는 이 명령이 제 3 슬롯(54d)(도 4)에 위치되기 때문이다. 본 발명에서의 이러한 실시예에 따르면, "통상적인(ordinary)" NEXT 명령(미도시)을 따르는 특정 명령 워드(40)에서의 모든 데이터들은 어드레스(여기서, 어드레스는 for/next 루프가 시작하는 어드레스이다)로 가정된다. NEXT 명령(104)에 대한 오피코드(opcode)는 (본원에서 전술한 바와 같이, 명시적으로 써넣어지기 보다는, 이것이 제 3 슬롯(54d)인 경우에, 제 1의 2개의 디지트들이 가정되는 명백한 예외를 제외하고) 4개의 슬롯들(54) 중 어디에 있는지와 관계없이 동일하다. 그러나, 이것이 제 3 슬롯(54d)에 있는 때에, NEXT 명령(104)을 따르는 어떤 어드레스 데이터가 있을 수 없기 때문에, 제 3 슬롯(54d)에 있는 NEXT 명령(104)은 MICRO-NEXT 명령(104a)으로 또한 가정될 수 있다. MICRO-NEXT 명령(104a)은 복귀할 어드레스로서 그것이 위치되어 있는 동일한 명령 워드(48)의 제로 슬롯(54a)에 위치된 제 1 명령(52)의 어드레스를 사용한다. MICRO-NEXT INSTRUCTION(104a)은 또한 R 레지스터(29)로부터의 값을 취하며(이는 본래 FOR 명령(102)에 의해 거기에 PUSH 되었음), 이를 1만큼 감소시키며, 그리고 이후에 이를 R 레지스터(29)에 복귀시킨다. R 레지스터(29) 상의 값이 (0과 같은) 소정의 값에 도달한 때에, MICRO-NEXT 명령은 후속 명령 워드(48)를 적재함과 아울러 전술한 바와 같이 진행할 것이다. 그러나, MICRO-NEXT 명령(104a)이 소정의 값보다 큰 R 레지스터(29)로부터의 값을 판독하는 때에, 이는 자신의 명령 워드(48)의 제로 슬롯(54a)에서의 연산을 재개함과 아울러 제로 슬롯에 위치된 3개의 명령들(52) 전체 를 실행할 것이다. 즉, MICRO-NEXT 명령(104a)은 본 발명에서의 이러한 실시예에서, 항성 3개의 연산 명령들(106)을 실시할 것이다. 일부 경우들에서, 모든 3개의 잠재적으로 이용가능한 명령들(52)을 사용하는 것이 원해지지 않을 수 있기 때문에, "노-오피(no-op)" 명령이 요구되는 바와 같이, 슬롯들(54) 중 하나 이상을 채우는데 이용가능하다.
마이크로-루프들(100)은 전체적으로 단일 컴퓨터(12) 내에서 사용될 수 있음이 주목되어야 한다. 사실상, 이용가능한 기계 언어 명령들의 전체 세트는 연산 명령들(106)로서의 사용에 이용가능하며, 그리고 마이크로-루프들의 응용 및 사용은 오직 프로그래머의 창조력에 의해서만 제한된다. 그러나, 본질적으로 데이터 버스(16)로부터 직접적으로 비롯된 내부의 명령들(52)을 실행하기 위해, 단일 명령 워드(48) 내의 전체 마이크로-루프(100)를 실행하는 성능과 컴퓨터(12)로 하여금 이웃 컴퓨터(12)에 명령 워드(48)를 송신하게 하는 성능이 결합한 때에, 이는 컴퓨터(12)로 하여금 그 이웃들의 자원들을 이용하게 하는 강력한 툴을 제공한다.
소형 마이크로-루프(100)(이들 모두는 단일 데이터 워드(48) 내에 포함되어 있음)는 본원에서 설명되는 바와 같이 컴퓨터들(12) 간에서 통신될 수 있으며, 이는 본원에서 설명되는 바와 같이. 명령 워드(48)에 포함된 임의의 다른 명령들 세트와 마찬가지로 수신 컴퓨터(12)의 통신 포트(38)로부터 직접적으로 실행될 수 있다. 이러한 종류의 "마이크로-루프"(100)에 대한 많은 사용들이 있지만, 전형적인 사용은 일 컴퓨터(12)가 이웃 컴퓨터(12)의 메모리 상에 일부 데이터를 저장하기를 원하는 경우가 될 것이다. 예를 들어, 이는 먼저 그 이웃 컴퓨터에 명령을 송신할 수 있는데, 이때에 일 컴퓨터는 이웃 컴퓨터에게 인입 데이터 워드를 특정 메모리 어드레스에 저장하고, 이후에 그 어드레스를 증가시키며, 그리고 소정의 반복 횟수(여기서, 횟수는 데이터 워드들이 전송되는 횟수이다)로 반복하도록 명령한다. 데이터를 다시 판독하기 위해, 제 1 컴퓨터는 제 2 컴퓨터(여기에서 저장을 위해 사용된 것)로 하여금 유사한 마이크로-루프를 사용하여, 저장된 데이터를 다시 제 1 컴퓨터에 써넣기하도록 명령할 것이다.
본원에서 설명되는 다이렉트 실행 양상과 관련하여 마이크로-루프(100) 구조를 사용함으로써, 컴퓨터(12)는 필요한 데이터 저장소가 각 개별 컴퓨터(12) 내에 구축된 비교적 작은 용량을 초과하는 때에, 초과 데이터 저장을 위해 다른 휴식중인 이웃 컴퓨터(12)를 사용할 수 있다. 상기 예가 데이터 저장의 관점에서 설명되었지만, 동일한 기법은 컴퓨터(12)로 하여금 그 이웃 컴퓨터가 자신의 연산 자원들(computational resources)을 공유하게 하는데 동일하게 사용될 수 있는데, 이는 다른 컴퓨터(12)로 하여금 일부 동작들을 수행하고, 그 결과를 저장하며, 그리고 소정의 횟수로 반복하게 하는 마이크로-루프(100)를 생성함으로써 된다. 이해될 수 있는 바와 같이, 본 발명의 마이크로-루프(100) 구조가 사용될 수 있는 방식들의 개수는 거의 무한정이다.
본원에서 전술한 바와 같이, 본 발명에서의 현재에 설명되는 실시예에서, 데이터 또는 명령들은 본원에서 설명되는 방식으로 통신될 수 있으며, 따라서, 명령들은 본질적으로 데이터 버스(16)로부터 직접적으로 실행될 수 있다. 즉, 명령들을 RAM(24)에 저장하고 실행 전에 이들로부터 호출할 필요가 없다. 대신에, 본 발명의 이러한 양상에 따르면, 통신 포트(38)상에서 수신되는 명령 워드(48)는 본질적으로 이것이 RAM(24)이나 ROM(26)로부터 호출되는 경우에 취급되는 것과 다르게 취급되지 않는다. 이러한 특징에 대한 결여가 종래기술 논의에서 나타났지만, 설명되는 컴퓨터들(12)의 연산에 관하여, 명령 워드들(48)이 어떻게 페치되고 사용되는지에 대한 하기의 보다 구체적인 설명은 본 발명의 이해를 돕게 될 것이다.
이용가능한 기계 언어 명령들 중 하나는 FETCH 명령이다. FETCH 명령은 어디서부터 18 비트 워드를 페치할지를 결정하기 위해 A 레지스터(40a) 상의 어드레스를 사용한다. 당연하게, 프로그램은 A 레지스터(40a) 상에 정확한 어드레스를 위치시키도록 미리 규정하였을 필요가 있을 것이다. 본원에서 전술한 바와 같이, A 레지스터(40a)는 18비트 레지스터이며, 이에 따라 페치가 발생할 수 있는 모든 잠재적인 자원들이 차별화될 수 있도록 이용가능한 충분한 범위의 어드레스 데이터가 있다. 즉, ROM에 할당된 어드레스들 범위 및 RAM에 할당된 다른 어드레스들 범위가 있으며, 그리고 포트들(38) 각각에 대한 특정 어드레스들 및 외부 I/O 포트들(39)에 대한 특정 어드레스들이 있다. FETCH 명령은 자신이 T 레지스터(44) 상에서 페치하도록 항상 18 비트를 위치시킨다.
대조적으로, 본원에서 전술한 바와 같이, 실행가능 명령들은 명령 레지스터(30a)에 일시적으로 저장된다(이는 데이터와 대조되는 것이다). 18 비트 명령 워드(48)를 명령 레지스터(30a)로 "페치하는" 어떤 특정 명령이 없다. 대신에, 명령 레지스터(30a)에 더 이상의 실행가능 명령들이 남아 있지 않은 때에, 컴퓨터는 "후속" 명령 워드(48)를 자동으로 페치할 것이다. "후속" 명령 워드가 어디에 위치되 어 있는지는 "프로그램 카운터"(P 레지스터(40c))에 의해 결정된다. P 레지스터(40c)는 명령 워드들(48)의 시퀀스가 RAM(24)이나 ROM(26)으로부터 페치되는 경우에서와 같이, 종종 자동으로 증가된다. 예를 들어, JUMP 또는 CALL 명령은 JUMP 또는 CALL 명령 이후에 증가하기보다는, 현재에 적재된 명령 워드(48)의 나머지에 있는 데이터에 의해 지정되는 어드레스로 P 레지스터(40c)가 적재되게 할 것이다. 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) 중 임의의 하나로부터 제 1 이용가능한 명령 워드(48)를 수락할 것이다. 만일 어떤 이웃 컴퓨터(12)가 이러한 포트들(38) 중 임의의 하나에 아직 써넣기 시도를 하지 않은 경우에, 당해의 컴퓨터(12)는 상세하게 전술한 바와 같이, 이웃 컴퓨터가 선택된 포트(38)에 써넣기할 때까지 "휴면으로 진행할" 것이다.
도 7은 전술한 다이렉트 실행 방법(120)의 일 예를 도시하는 흐름도이다. 연산들의 "정상적인" 흐름은 본원에서 전술한 바와 같이, 더 이상의 실행가능 명령들이 명령 레지스터(30a)에 남아 있지 않은 때에 시작할 것이다. 이때에, 컴퓨터(12)는 "워드 페치(fetch word)" 연산(122)에 의해 표시된 바와 같이(여기서, 용어 "페치"는 실제 FETCH 명령이 사용되지 않는다는 점에서, 본원에서 일반적인 의미로 사용됨을 주목하자) 또 하나의 명령 워드를 "페치"할 것이다. 이 연산은 (도 7의 흐름도에서의 "어드레스" 결정 연산에 의해 표시된 바와 같이) P 레지스터(40c)의 어드레스에 따라 수행될 것이다. 만일 P 레지스터(40c)의 어드레스가 RAM(24) 또는 ROM(26) 어드레스인 경우에, 후속 명령 워드(48)는 "메모리로부터의 페치" 연산(126)에서, 지정된 메모리 위치로부터 검색될 것이다. 반면에, P 레지스터(40c)의 어드레스가 포트(38) 또는 포트들(38)의 어드레스(메모리 어드레스가 아님)인 경우에, 후속 명령 워드(48)는 "포트로부터의 페치" 연산(128)에서, 지정된 포트 위치로부터 검색될 것이다. 어느 경우에서든지, 검색되는 명령 워드(48)는 "명령 워드 검색" 연산(130)에서 명령 레지스터(30c)에 위치된다. "명령 워드 실행" 연산(132)에서, 명령 워드(48)의 슬롯들(54)에 있는 명령들은 본원에서 전술한 바와 같이 순차적으로 수행된다.
"점프" 결정 연산(134)에서, 명령 워드(48)의 연산들 중 하나가 JUMP 명령인지, 또는 본원에서 전술한 바와 같이, 계속되는 "정상적인" 진행으로부터 연산을 전환시킬 다른 명령인지가 결정된다. 만일 "JUMP" 명령이면, JUMP 명령 (또는 이러한 다른 것) 이후 명령 워드(48) 내에 제공되는 어드레스가 "P 레지스터 로드" 동작(136)에서 P 레지스터(40c)에 제공되고, 시퀀스는 도 7의 흐름도에 나타낸 바와 같이 "워드 페치" 동작(122)에서 다시 시작된다. 만일 "JUMP" 명령이 아니면, "포트 어드레스" 결정 동작(138)으로 나타낸 바와 같이, 다음 동작은 마지막 명령 페치가 포트(38)로부터였는지, 아니면 메모리 어드레스로부터 였는지에 의존한다. 만일 마지막 명령 페치가 포트(38)로부터 였다면, P 레지스터(30a)에 대한 어떠한 변경도 이루어지지 않고, 시퀀스는 "워드 페치" 동작(122)으로부터 시작하여 반복된다. 한편, 마지막 명령 페치가 메모리 어드레스(RAM(24) 또는 ROM(26))로부터였다면, 도 7의 "P 레지스터 증분" 동작(140)에 의해 나타낸 바와 같이, "워드 페치" 동작(122)이 이루어지기 전에, P 레지스터(30a) 내의 어드레스가 증분된다.
상기 설명은 실제 동작 단계들을 나타내는 것으로 의도되지 않는다. 대신에, 본 발명의 설명되는 실시예에 따라 수행되는 것으로부터 비롯되는 다양한 결정들 및 동작들의 흐름도이다. 실제로, 이러한 흐름도는, 제시되어 설명되는 각 동작이 개별적인 별개의 순차 동작을 필요로 하는 것을 의미하는 것으로서 이해되서는 안된다. 실제로, 도 7의 흐름도에서 설명되는 많은 동작들은 일반적으로 동시에 이루어진다.
도 8은 컴퓨터에게 경고(alert)하는 본 발명의 개선된 방법의 예를 나타내는 흐름도이다. 이전에 설명된 바와 같이, 설명되고 있는 실시예의 컴퓨터들(12)은 입력을 기다리는 동안 "수면(sleep) 상태가 된다". 도 1 내지 5와 관련하여 설명되는 실시예에서처럼, 이러한 입력은 이웃하는 컴퓨터(12)로부터 올 수 있다. 대안적으로, 또한 본원에서 이전에 설명된 바와 같이, 다이(14)의 에지에 인접하는 통신 포트들(38)을 갖는 컴퓨터들(12)은, 이러한 컴퓨터(12) 내에 설계되거나, 또는 그렇지 않으면 컴퓨터(12)의 외부에 있지만 그와 결합되는 부가 회로를 구비함으로써, 이러한 통신 포트(38)가 외부 I/O 포트(39)로서 기능할 수 있게 한다. 어느 경우이든, 본 발명에 따른 결합은, 입력이 수신될 때 "수면하고 있는" 컴퓨터(12)가 균형을 잡고 깨어나 어떠한 정해진 동작을 행할 준비를 할 수 있다는 부가적인 장점을 제공할 수 있다. 따라서, 본 발명은 또한, 입력들이 외부 입력장치로부터 오든, 어레이(10) 내의 다른 컴퓨터(12)로부터 오든지 간에, 이러한 입력들을 처리하기 위해 인터럽트들을 이용하는 것에 대한 대안을 제공한다.
인터럽트를 처리하기 위해 컴퓨터(12)로 하여금 그것이 행하고 있는 것을 정지(또는 중단)하게 하는 대신, 상기 설명한 바와 같이, 본원에서 설명되는 본 발명의 결합은 컴퓨터(12)가 "수면하고 있지만 경계하는(asleep but alert)" 상태에 있을 수 있게 한다. 따라서, 1개 이상의 컴퓨터들(12)이 특정의 입력들을 수신하고 그에 입각하여 동작하도록 지정될 수 있다. 이러한 특징이 이용될 수 있는 많은 방법들이 있지만, 단지 1개의 이러한 "컴퓨터 경계 방법"을 예시하는 실예가 도 8에 도시되어 있으며, 여기에서는 참조 문자(150)로 열거되어 있다. 도 8로부터 알 수 있는 바와 같이, "경계 상태 진입(enter alert state)" 동작(152)에 있어서, 컴퓨터(12)는 "수면 모드가 되고", 이에 따라 이웃 컴퓨터(12)로부터, 또는 1개 이상(모두 4개)의 이웃 컴퓨터들로부터 입력을 기다리거나, 또는 "에지" 컴퓨터(12)의 경우에는, 외부 입력, 또는 이웃 컴퓨터(12)로부터의 입력들 그리고/또는 외부 입력들의 어떠한 결합을 기다리게 된다. 본원에서 설명되는 바와 같이, 컴퓨터(12)는 "수면 모드가 되어", 판독 또는 기록 동작중 어느 하나의 완료를 기다릴 수 있다. 본 예에서 설명되는 바와 같이, 어떠한 가능한 "입력"을 기다리기 위해 컴퓨터(12)가 이용되는 경우, 기다리고 있는 컴퓨터는 그의 판독 라인(18)을 하이로 설정하고, 이웃하는 또는 외부의 소스로부터 "기록"을 기다린다고 가정하는 것은 당연할 것이다. 실제로, 이것이 현재 통상의 조건으로 예측되고 있다. 하지만, 기다리고 있는 컴퓨터(12)가 그의 기록 라인(20)을 하이로 설정하고, 그에 따라 이웃하는 또는 외부의 소스가 그것을 "판독"할 때에 깨어나게 되는 것도 본 발명의 범위 내에 있다.
"깨어남(awaken)" 동작(154)에 있어서, 이웃하는 컴퓨터(12) 또는 외부 장치(39)가 기다리고 있는 트랜잭션을 완료했기 때문에, 수면하고 있는 컴퓨터(12)는 동작을 재개한다. 기다리고 있는 트랜잭션이 실행될 명령 워드(48)의 수신이었다면, 컴퓨터(12)는 그 내에서 명령들을 실행하도록 진행된다. 기다리고 있는 트랜잭션이 데이터의 수신이었다면, 컴퓨터(12)는 큐(queue) 내의 다음 명령를 실행하도록 진행하는 바, 상기 다음 명령는 본 명령 워드(48) 내의 다음 슬롯(54)의 명령이거나, 그렇지 않으면 다음 명령 워드(48)가 로드되고, 다음 명령은 다음 명령 워드(48)의 슬롯 0 내에 있게 될 것이다. 어느 경우이든, 상기 설명된 방식으로 이용되고 있는 동안, 다음 명령는 막 수신된 입력을 처리하기 위해 1개 이상의 명령들의 시퀀스를 시작할 것이다. 이러한 입력을 처리하기 위한 옵션들은 미리 정의된 어떠한 기능을 내부적으로 수행하기 위해 반응하고, 어레이(10) 내의 1개 이상의 다른 컴퓨터들과 통신하거나, 또는 심지어 입력을 무시하는 것(통상의 종래 기술과 마찬가지로, 정해진 조건하에서 인터럽트들이 무시될 수 있다)을 포함할 수 있다. 이러한 옵션들은 도 8에서 "입력에 대해 작용하는(act on input)" 동작(156)으로서 도시된다. 이해될 사항으로서, 어떠한 경우에 있어서, 입력의 콘텐츠는 중요하지 않을 수도 있다. 어떠한 경우에는, 예를 들어 외부 장치가 관심있는 통신을 시도했다는 것 만이 중요한 사실이 될 수 있다.
도 8에 도시된 방법에 있어서, 컴퓨터(12)에 "경계" 컴퓨터로서 기능하는 태스그(task)가 할당되면, 도 8에 나타낸 바와 같이 그것은 "수면하고 있지만 경계하는" 상태로 돌아가는 것이 일반적이다. 하지만, 모니터되고 있는 특정의 입력 또는 입력들을 더 이상 모니터할 필요가 없을 때, 또는 태스크를 어레이 내의 컴퓨터들(12)중 어떠한 다른 것에게 넘기는 것이 보다 편리할 때, 이러한 옵션은 컴퓨터(12)에게 어떠한 다른 태스크를 항상 자유롭게 할당할 수 있다.
당업자라면 상기 설명된 이러한 동작 모드가 통상의 인터럽트 이용에 대한 보다 효율적인 대안으로서 유용하게 될 것임을 인식할 것이다. 컴퓨터(12)가 1개 이상의 그 판독 라인들(18)(또는 기록 라인(20))을 하이로 설정하면, 이것은 "경계" 상태라 불릴 수 있다. 이러한 경계 상태에서, 컴퓨터(12)는 하이로 설정된 판독 라인 또는 라인들(18)에 대응하는 데이터 버스(16) 상에서 자신에게 전송된 임의의 명령를 즉시 실행하거나, 또는 대안적으로는 데이터 버스(16) 상으로 전송되는 데이터에 따라 동작할 준비가 된다. 이용가능한 컴퓨터들(12)의 어레이가 있는 경우, 임의의 소정의 시간에서, 상기 설명된 경계 상태가 되도록 1개 또는 그 이상의 컴퓨터가 이용될 수 있으며, 이에 따라 지정된 입력들의 세트중 임의의 것에 의해 동작이 시작될 것이다. 이것은 컴퓨터의 "주의를 얻기 위해(get the attention)" 통상의 인터럽트 기술을 이용하는 것에 대해 바람직한데, 그 이유는 인터럽트는 컴퓨터로 하여금 인터럽트 요청에 응답하여 어떠한 데이터를 저장하고, 어떠한 데이터를 로드하는 등을 행하게 한다. 대조적으로, 본 발명에 따르면, 컴퓨터를 경계 상태에 두고 관심있는 입력을 기다리는 태스크를 할당할 수 있는 바, 이에 따라 입력에 의해 제공되는 명령들의 실행을 시작함에 있어서 어떠한 명령 주기도 낭비하지 않게 된다. 다시 한번 주목할 사항으로서, 현재 설명되고 있는 실시예에서, 경계 상태에 있는 컴퓨터들은 실제로 "수면하고 있지만 경계하는" 상태에 있 게 되는 바, 이것은 이들이 본질적으로 어떠한 전력도 이용하지 않고 있다는 의미에서 "수면하고"있지만, 이들이 입력에 의해 즉시 동작을 개시할 수 있다는 점에서 "경계" 상태에 있음을 의미한다. 하지만, "수면하고" 있지 않다고 하더라도 컴퓨터에서 "경계" 상태를 구현하는 것도 본 발명의 범위 내에 있다. 설명되는 경계 상태는 본질적으로, 그렇지 않으면 통상의 종래 기술의 인터럽트(하드웨어 인터럽트 또는 소프트웨어 인터럽트)가 이용되게 되는 임의의 상황에서도 이용될 수 있다.
현재의 컴퓨터(12)가 네이트브(native) 포스(FORTH) 언어 명령을 실행하도록 실시되지만, 본 발명은 본 예에 의해 한정되지 않는다. 포스 컴퓨터 언어에 친숙한 사람이라면, FORTH "워드들"로서 알려져있는 복잡한 포스 명령들이 컴퓨터 내에 설계된 네이티브 프로세서 명령들로부터 구성된다는 것을 인식할 것이다. 포스 워드들의 집합은 "딕셔너리(dictionary)"로서 알려져있다. 다른 언어들에 있어서, 이것은 "라이브러리(library)"로서 알려져 있다. 하기에서 보다 상세히 설명되는 바와 같이, 컴퓨터(12)는 RAM(26), ROM(26)으로부터, 또는 데이터 버스들(16)(도 2)중 하나로부터 직접적으로, 한번에 18개의 비트들을 판독한다. 하지만, 포스에서, (오퍼랜드가 없는 명령들(operand-less instructions)로서 알려져있는) 대부분의 명령들은 자신들의 오퍼랜드들을 스택들(28 및 34)로부터 직접 얻기 때문에, 이들은 일반적으로 단지 5비트의 길이를 가지며, 이에 따라 그룹 내의 마지막 명령이 단지 3비트 만을 요구하는 제한된 명령들의 세트로부터 선택된다는 조건하에서, 단일의 18 비트 명령 워드 내에 최대 4개의 명령들이 포함될 수 있다. 또한, 도 3의 블록도에는 슬롯 시퀀서(42)가 도시되어 있다. 본 발명의 이러한 실시예에서, 데이터 스택(34) 내의 상부의 2개의 레지스터들은 T 레지스터(44) 및 S 레지스터(46)이다.
상기 방법은 포스릿(Forthlet)의 이용을 포함한다. 비록 정확한 기재는 아니지만, 포스릿은 애플릿과 포스를 결합하여 만들어진 용어이다. 포스는 1970년대 초기에 개발된 컴퓨터 프로그래밍 언어이다. 포스릿은 코드를 둘러싸는 래퍼(wrapper)이며, 이에 따라 이러한 코드는 데이터로서 취급될 수 있다. 대안적인 정의는, 포스릿이 래퍼에 의해 둘러싸이는 머신 실행가능 코드의 스트링이라는 것이다. 래퍼는 헤더와 테일로 이루어지거나, 헤더 만으로 이루어진다.
포스릿은 스케일러블 임베디드 어레이 스타일 병렬 프로세서(Scalable Embedded Array style parallel processor)들의 병렬 프로그래밍을 지원하는 부분들 및 툴들이다. 포스릿들은 소정의 파일 특성을 갖는다. 이들의 특성은 이름, 타입, 어드레스, 길이, 이후 설명되는 그 밖의 많은 선택적인 타입 필드들을 포함한다. 포스릿들은 툴들 또는 컴파일러에 의해 템플릿들 또는 소스 코드로부터 구성되는 것들에 대한 래퍼이다. 포스릿들은 코드 및 데이터에 대한 래퍼들이며, 또한 다른 포스릿들을 래핑할 수 있다. 포스릿들은, 프로그램들 및 데이터를 분배하고 프로그램들의 구성 및 디버깅을 지원하는 메커니즘이다.
이러한 하드웨어 기능들은 간단하고 신속한 원격 절차 호출 및 뮤텍스(mutex)를 제공한다. 뮤텍스는 쓰레드(thread)들 간의 상호 배제를 교섭하는 프로그램 객체에 대한 공통 이름이며, 이러한 이유로 인해 뮤텍스는 종종 로크(lock)라 불린다. 스케일러블 임베디드 어레이 프로세서들을 간단한 병렬 프로그램들에 대해 적합하게 하는 이들의 특성들중 하나는, 이들이 미결(pending)의 메세지 교환 이 완료될 때 까지 프로세서를 극도로 낮은 전력의 수면 상태가 되게 함으로써 프로세서들 및 프로세스들을 동기화하는 하드웨어 채널들에 의해 연결된다는 것이다.
상기 환경에서 이용되는 본 발명의 소프트웨어의 하나의 특성은, 그의 로컬메모리 공간에서 프로그램들을 실행하는 것과 프로그램들을 그의 실행 채널들에 흐르게 하는 것 사이에서 각 프로세서를 멀티태스크하기 위해 전형적인 방식으로 전형적인 포스 스타일의 협동 멀티태스커를 이용한다는 것이다. 이것은 하드웨어 내의 멀티-포트 어드레스 선택 논리와 협력하여, 병렬의 하드웨어 및 소프트웨어의 간단한 결합을 제공하고, 멀티태스킹 프로그래밍으로부터 올바른(true) 병렬 멀티프로세싱 프로그래밍으로의 변환을 용이하게 한다.
제 2 특성은, 이러한 동기화된 통신 채널들이 프로세서들의 어드레스 공간들 내의 동일한 장소에 있게 되고, 포인터들을 이용하여 데이터 판독 및 기록에 이용되거나, 또는 프로세서 프로그램 카운터에 분기되거나, 호출되어 판독됨으로써 실행될 수 있다는 것이다.
제 3 특성은, 다수의 통신 채널들이 프로세서에 의해 판독 또는 기록에 대해 선택될 수 있다는 것인데, 그 이유는 이러한 통신 포트들의 어드레스 범위의 어드레스들 내의 개별적인 비트들이 개별적인 채널들을 선택하기 때문이다.
부츠 포스릿(boot forthlet)은 전체 응용에 대한 래퍼이다. 이것은 통상의 x86 프로세서에 의해 대표되는 통상의 컴퓨터 동작과 다르다. 통상의 마이크로프로세서들에 있어서, 명령들은 먼저 소스 코드라 불리는 C# 또는 C++ 과 같은 하이 레벨 컴퓨터 언어로 기록된다. 이러한 소스 코드는 이후, 객체 코드라고도 불리는 머 신 언어로 변환된다. 이러한 변환 과정은 컴파일레이션(compilation)이라 칭해지며, 이러한 프로세스를 달성하는 프로그램들 또는 머신들은 컴파일러(compiler)라 불린다. 이후 객체 코드가 프로세서에 의해 실행된다. 대조적으로, 포스릿들은 직접 실행가능하다. 하지만, 본 발명은 직접 실행가능한 포스릿들로 한정되지 않는데, 그 이유는 하이 레벨 커맨드들을 포스릿들의 모든 프로세스들을 수행하는 머신 코드 내에 컴파일함으로써 동일한 프로세서 및 기능이 달성될 수 있기 때문이다.
부츠 포스릿은 어떠한 분기없이도 실행될 수 있는 가장 기본적인 타입의 포스릿이다. 스트림 실행가능한 포스릿인, 그 다음의 가장 복잡한 타입의 포스릿은 호출을 포함하고, 이러한 호출은 어드레스를 복귀 스택(28) 내에 둔다. 호출이 이루어지면, PC 내의 어드레스는 복귀 스택에 밀어넣어진다. 메모리에서, PC는 이전에 증분될 것이며, 이에 따라 이것은 항상 그 호출을 이후의 메모리 내의 다음의 순차적인 명령를 지정한다. 따라서, 복귀 명령이 스택 상의 어드레스에 복귀되면, 이것은 호출을 다음에 오는 오피코드에 복귀된다. 다음은 머신 포스(Forth)로 기록된 로우 레벨 포스릿의 예이다. 이러한 포스릿은 간단한 1 워드 포트 실행가능한 포스릿이다(simple one word port executable Forthlet).
예 1
Figure 112007025638241-PAT00001
제 1 라인은 환경을 셋업하고, 제 2 라인은 프로그램 이름을 포트-포스릿으로서 나타낸다. 제 3 라인은 상부의 2개의 스택 아이템들을 실행되고 있는 포트에 전송하고, 이후 그 포트로부터 2개의 스택 아이템들을 판독한다. 이후, 포스릿은 포스를 수면 상태로 하고, 누군가 이 포트에 다음 포스릿을 기록하기를 기다린다. 마지막 라인은 포스릿을 랩업한 다음, 그것을 서버 상에 두며, 이에 따라 이름 포트-포스릿이 그 패킷의 어드레스를 복귀시킨다.
포트로부터 호출이 이루어지면, PC 내의 어드레스는 그 포트가 될 것이다. 포트 어드레스들은 자동으로 증분되지 않고, 그 대신에 이들은 어떠한 다른 프로세서가 그 포트를 재기록하기를 기다리고, 어드레스는 증분되지 않으며, 이들은 동일한 포트 어드레스를 다시 판독하고 그 포트가 기록될 때 까지 수면 상태가 된다. 따라서, 포트에서 실행되는 코드가 다른 포트를 호출하거나 RAM 또는 ROM을 호출한다면, 호출을 행한 그 포트의 복귀 어드레스는 그 호출이 이루어질 때 복귀 스택 상에 놓여질 것이다. 복귀 명령이 발생하면, 이것은 호출하는 포트에 복귀되는데, 그 이유는 그것이 PC에 돌아가게될 어드레스이기 때문이다.
포트릿의 제 3 타입은 메모리 실행가능한 포트릿이다. 메모리 실행가능한 포트릿은 래퍼로서 부츠 포트릿 또는 스트림 실행가능한 포트릿을 이용한다. 메모리 실행가능한 포트릿은, 예를 들어 메모리 노드 0 어드레스 0 (rev 7 노드 0, rev 9 $200)을 점유할 수 있다. 메모리 실행가능한 포트릿은 메모리 내의 소정의 어드레스에서 실행된다. 이것은 임의의 노드 상의 어드레스 0 또는 1 또는 $D 또는 $34에서 실행된다. 이것은 노드 0 또는 노드 1 또는 노드 2에서 실행된다.
포트릿의 제 4 타입은 노드 실행가능한 포트릿이다. 노드 실행가능한 포트릿 역시 래퍼로서 부츠 포트릿 또는 스트림 실행가능한 포트릿을 이용한다. 노드 실행 가능한 포트릿은 임의의 노드로부터 실행될 것이다. 노드 실행가능한 포트릿은 메모리의 위치에 주목한다.
포트릿의 제 5 타입, 가변의 실행가능한 어드레스 포트릿 역시 래퍼로서 부츠 포트릿 또는 스트림 실행가능한 포트릿을 이용한다. 가변의 실행가능한 어드레스 포트릿은 가변 노드로부터 동작한다.
예 2는 직접 포트 스트림 오피코드 실행을 포함하는 포트릿을 나타낸다.
예 2
Figure 112007025638241-PAT00002
이 예는 리터럴 로드(literal load)로 시작되는 "스트림으로부터의 호출(call-from-stream)"이라 불리는 포트릿을 컴파일하는 바, 이것은 실행될 때, 리터럴 $12345를 T 내로 로드할 것이며, 이후 "두샘플(dosample)"이라 불리는 서브루틴을 호출한다. 리터널 로드 명령, 샘플, 및 RAM 내의 서브루틴에 대한 호출은 이러한 포트릿에서 래핑되며, 만일 노드에 기록되는 경우에는, 로드를 실행하고 RAM 내의 루틴에 대한 호출을 수행하게 할 것이다. 그 루틴이 복귀되면, 이것은 보다 많은 코드를 위해 그것을 호출했던 포트(들)에 복귀될 것이다.
직접 포트 스트림 오피코드의 실행은, 포스 언어에서 대부분의 원시 동작(primitive operation)들을 나타내고 컴파일러에 의해 프로그램들 내에 인라 인(line)되는 5비트 명령들에 대한 액세스를 제공한다. 이러한 포스릿들은 프로세서들의 통신 채널에 스트림되고, 워드 단위로 실행된다. 이들은 분기들을 갖지 않으며, 본질적으로 어드레스 또는 노드에 특정하지 않다. 이러한 포스릿들은 다른 포스릿들을 데이터로서 메세지들에 붙이는 구(phrase)들을 형성한다. 프로그램 카운터는 포트를 선택하는 어드레스에 남게 되고, 최대 c18의 오피코드를 포함하는 워드가 실행된 이후 증분되지 않는다. 스트림된 코드 워드의 실행을 완료한 후, 프로세서는 다음 스트림된 명령 워드가 도달할 때 까지 수면 상태가 된다. 대개, 종종 이러한 타입의 포스릿은 복귀 명령으로 종료되는 바, 이러한 복귀 명령은 포트(아마도 PAUSE 멀티태스커)를 호출한 루틴에 대한 실행으로 복귀할 것이다.
예 3은 RAM/ROM 내의 코드의 호출에 의한 코드 스트림의 포트 실행을 포함하는 포스릿을 나타낸다.
예 3
Figure 112007025638241-PAT00003
이 예는 코드를 갖게 될 "ram-based-spi-drive"라 명명되는 포스릿을 특정하는 바, 상기 코드는 노드 5에 고유한 핀들을 요구하고, 이용가능하게 존재해야 한다. 이것은 또한 그 내에서 정의되는 워드들에 의해 특정되는 특정의 어드레스에 속박된다. 워드 "spi-code"는 어드레스 0에 대해 호출을 컴파일한다. 이 코드는 이 러한 포스릿이 실행될 때에 로드되어 노드 5 상의 어드레스 0에서 실행될 것이다.
스트림된 포스릿들은 ROM 또는 RAM 내의 루틴들에 대한 호출들을 포함할 수 있다. 호출될 루틴의 어드레스들은 컴파일러에 의해 자신들의 이름들로부터 발생된다. RAM 내의 루틴들은 이들이 호출되기 전에 로드되어야 한다. RAM 또는 ROM 내의 루틴이 포트로부터 호출되는 경우, 명령 스트림을 전달하는 프로세서가 그 포트에서 실행할 다음 스트림되는 워드를 제공할 가능성이 크며, 프로세서가 RAM 또는 ROM 내의 호출된 루틴을 실행하고 있는 동안 수면 상태가 된다. 메세지의 라우팅은, 프로세서들을 깨우고 이들로 하여금 ROM 내의 자신들의 라우팅 워드를 호출하게 하는 포트 실행가능한 스트림들의 전송을 수반한다. 이러한 워드들은 또한 보다 많은 명령 워드들을 판독한 다음, 스트림을 그 목적지를 향해 다음 프로세서 상에 라우팅한다.
예 4는 램 실행 포스릿의 시작을 나타낸다.
예 4
Figure 112007025638241-PAT00004
이러한 포스릿는 주소 1에서 노드 0 상에서 실행하도록 디자인되어, 로딩될 수 있고 "램_서버 상의 실행"(runs_on_ram_server) 포스릿의 주소를 "X0" 명령 호출에게 전달함으로써 노드 0 상에 로딩 및 실행될 수 있다. 상기 램 서버상으로부터 로딩 및 외부 램의 사용을 위해 패키지된 어플리케이션들(applications)이 명령 에 의해 Forthlet0 타입 포스릿들로서 패키지된다. 또한 어플리케이션들은 자신들이 상기 램 서버상에서 사용되는 포맷과 다를 때 SPI 또는 비동기 직렬 인터페이스들로부터 로딩되기 위해 요구되는 어플리케이션들 같은 다른 포맷으로 만들어질 수 있다. 이러한 타입의 포스릿는 램의 바닥에 있는 프로그램이다. 램의 바닥으로 로딩된 후, 어떤 주소까지, 상기 포스릿는 실행된다. 램 실행 포스릿들은 램에서 실행되기 때문에 그들은 브랜치 명령(branch instructions)을 구비하여 호출을 램, 롬 또는 통신 포트들에서의 주소들로 점프 또는 리턴할 수 있다. 이러한 포스릿들은 DOS에서 .com을 실행할 수 있는 파일들과 같다. 상기 포스릿들은 메모리의 처음에서 시작하며 길이를 갖는다. 상기 포스릿들은 로딩되어 실행된다. 상기 포스릿들은 로딩된 후 나중에 다시 호출될 수 있다.
예 5는 다른 램 주소들에 코드 또는 데이터 오버레이(overlay)들이 로딩되거나 혹은 로딩되어 수행되는 로딩 포스릿를 보여준다.
예 5
Figure 112007025638241-PAT00005
이러한 예는 주소 0에서 실행되지만 어떤 특정 노드로의 포스릿 래퍼의 내부에 속박되지는 않는 코드를 설명한다. 상기 코드는 어떤 노드 상의 주소 0에서 실 행될 수 있다.
이러한 로딩 포스릿는 코드 및 데이터 오버레이들에 관한 것이다. 코드 또는 데이터는 노드의 어떤 주소에도 로딩될 수 있다. 상기와 동일한 코드는 많은 노드들 상의 주소의 범위에 로딩되었고 상기 주소가 램의 시작이었다면 상기 로딩 포스릿들은 도 8의 것과 유사한 램 실행 포스릿가 될 수 있을 것이다. 코드 또는 데이터가 램의 시작이 아닌 다른 주소에 로딩되었을 때 그것은 가끔 메모리의 시작에서 코드 또는 데이터로 사용될 수 있다. 프로그램에서 자주 사용되는 많은 서브루틴은 하이 메모리로 로딩됨과 아울러 로우 메모리에 있는 다른 오버레이 코드 루틴들에 의해 호출될 수 있다. 코드는 로우 메모리로 쉽게 로딩되어, 하이 메모리로 로딩된 코드의 오버레이에 의해 반복적으로 호출되도록 로우 메모리에 남겨질 수 있다. 이것의 하나의 예는, 상기와 동일한 코드가 많은 노드들 상에서 동일한 주소에 놓여질 수 있으나 그룹의 각 노드는 상기 코드에 의한 데이터 조작을 위해 설정된 상기 주소들에서 고유한(unique) 데이터의 오버레이를 얻을 수 있는 하나의 용도가 될 수 있다.
예 6은 소정 코드에 속박된 포스릿를 보여준다.
예 6
Figure 112007025638241-PAT00006
이러한 포스릿는 노드0의 주소 0에서 실행하도록 디자인되고 "램_서버 상의 수행" (runs_on_ram_server)의 주소를 "X0" 명령 호출에 전달함으로써 노드 0에 로딩되어 수행될 수 있다. 상기 램 서버로부터 로딩 및 외부 램의 사용을 위해 패키지된 어플리케이션들은 명령에 의해 Forthlet 0 타입의 포스릿들로 패키지된다.
예 7은 IO 회로의 소정 포스릿를 보여준다.
예 7
Figure 112007025638241-PAT00007
이러한 예는 포스릿 자신이 실행되는 노드가 적어도 2개의 핀을 갖는다는 요건에 묶이게 될 포스릿를 생성한다. 이것은 IO 노드의 전형적인 예이다. IOCS 레지스터의 비트-17에서 판독되는 핀과 비트-1에서 판독되는 핀을 판독 및 기록할 필요가 있을 것이기 때문에 0 또는 1핀을 가진 노드들은 이러한 포스릿를 실행하지 않는다.
이러한 포스릿들은 어떤 노드들에 대하여 유일한 IO 회로들을 판독하거나 기록하는 코드를 포함한다. SPI 접속들, A/D, D/A 또는 리셋 회로들과 같은 물리적인 회로들은 이러한 포스릿들을 실행하도록 정합 IO 하드웨어 특성들을 갖는 노드들을 위해 적합한 소프트웨어 드라이버를 구비한다.
0 상에서 실행하는 X0 포스릿들, 즉 네이티브 포스릿들(특정 운용 프로그램에 내재된 포스릿들)은 노드 0의 램 서버 상에서 실행된다. 이러한 포스릿들은 그 들이 외부 메모리로부터 직접 로딩됨과 아울러 외부 메모리로부터 그들을 판독하는 CPU에 의해 실행되는 프로그램들이라는 점에서 대부분의 시스템에서 통상의 프로그램처럼 가장 많이 작용한다. 어떤 프로세서들은 메모리로부터 한번에 한 개의 워드를 판독하여 실행하고, 어떤 프로세서들은 자신들이 그것들을 실행하기 전에 로컬 캐시 메모리로부터 외부 메모리의 블럭을 판독한다. 이러한 포스릿들은, 상기 프로세서가 캐시 메모리가 아닌 외부 메모리를 실행하고 있다고 단지 인지하도록, 캐시 메모리의 로컬 주소를 외부 메모리 주소로 투명하게 매핑하지 않는 하드웨어에서 유용하다. 이러한 포스릿는 램 또는 롬에서 이미 수행되고 있는 프로그램에 의해 외부 메모리로부터 로컬 메모리로 상기 코드를 명확하게 로딩할 것이고 이때 우리는 이미 로딩된 코드로 브랜치할 것이다. 어떤 노드는 노드 0인 상기 램 서버로 메시지를 송신하고, 로딩하여 상기 램 서버 상에서 로컬 램의 처음에서 실행할 네이티브 포스릿의 주소를 상기 램 서버에게 준다. 어떤 프로세서는 스택 상에 주소를 간략하게 넣을 수 있고 X0 기능을 호출할 수 있으며 X0 메시지는 상기 램 서버 상의 상기 주소에서 상기 포스릿를 실행하도록 상기 램 서버 버퍼 노드를 통해 상기 램 서버로 송신될 것이다. 발생된 것이 이때, 상기 서버 상에서 실행되는 상기 네이티브 포스릿의 내용에 따라 변한다.
가장 기본적인 데이터 전달 포스릿는 fsend이다. 상기 램 서버 상에서 네이티브 포스릿를 로딩 및 실행하는 프로세스는 롬 바이어스(BIOS)에서 또는 램에서 루틴의 호출을 담당하는바, 상기 루틴은 외부 메모리로부터 판독하고 상기 프로세스는 실행을 위한 x0 포스릿들을 로컬 램으로 로딩하기 위해 사용된다.
상기 램 서버 상에서 동작하는 포스릿들은 외부 메모리로부터 다른 포스릿들을 로딩하나 파이프로 송신하지는 않는다. 포트 실행가능한 포스릿 구(phrases)들은 데이터(이 또한 포스릿들이 될 수 있음)를 하나의 위치로부터 또 하나의 위치로 전달하기 위해 메모리 실행가능한 포스릿들과 결합된다. SPI 또는 12C와 같은 프로토콜을 통해 또는 무선 소프트웨어 링크를 통해 온 또는 오프 칩(on or off chip)의 데이터를 송신하기 위한 드라이버는 온 및 오프 칩의 데이터의 전달을 담당하고, 데이터 전달 포스릿들은 온 칩의 노드들 간에 데이터의 이동을 다룬다. 컴파일러는 어플리케이션을 조직화하여 램 서버를 통해 외부 메모리 밖에서, 또는 직렬 플래시에 연결된 SPI 포트로부터 분리되어, 또는 프로세서에 직렬 링크로 송신된 PC 개발 시스템으로부터 분리되어 실행되도록 할 수 있다. 광범위한 외부 램, 롬 또는 플래시 디바이스에 연결되는 램 서버로서 노드 0을 사용함을 보증하도록 충분한 외부 메모리를 필요로 하는 어플리케이션은 상기 컴파일러에 의해 상기 램 서버 상에서 포스릿들로 패키지되는 어플리케이션들에 따라 달라질 것이다. 상기 포스릿 타입의 어플리케이션들을 사용하여, 부하 코드 오버레이는 협력하여 데이터를 또 하나의 어플리케이션 및 상기 램 서버와 교환한다. 이벤트는 주변 프로세서 노드들을 깨울 수 있고 그 주변 프로세서 노드들은 깨어 있는 다른 노드들과 협력하여 데이터를 처리할 수 있다.
예 9는 특정 노드에 속박되지 않은 재배치 가능한 포스릿를 보여준다.
예 9
Figure 112007025638241-PAT00008
이러한 예는 노드에 속박되지는 않으나 주소에 의존적인 브랜치를 내부적으로 구비하는 포스릿를 구비한다. 특정 주소에 로딩되었을 때 브랜치들의 브랜치 필드들은 루틴을 재배치하여 특정 주소 상에서 실행되도록 설정된다.
이러한 포스릿들은 메모리로부터 실행되고 브랜치 명령들을 구비할 수 있다. 그러나 상기 포스릿들은 필요하면 상이한 실행 주소에 재배치되는 노드 상에 로딩되었을 때 메시징될 수 있다. 이러한 포스릿들은 DLL에 유사한 메카니즘을 제공하는바 이는 호출가능한 기능들의 결합이 실행시간에서 상이하게 배열될 수 있고 여전히 컴파일러 포스릿들을 안전하게 호출할 수 있다. 상기 컴파일러는 더욱 복잡한 기능을 제공하도록 상이한 프리미티브(primitive) 포스릿 타입들을 결합함으로써 포스릿들의 구조를 도울 수 있다. 포스릿 문구들의 스트리밍은 더욱 복잡한 포스릿 타입들의 안전한 구조를 제공하도록 상기 컴파일러에 의해 이미 컴파일된 다른 포스릿들과 결합된다. 상기 컴파일러 및 프로그래머는 포스릿 특성들을 더욱 정교한 객체 조작을 가능하게 하는 포스릿들에게 할당할 수 있다. 또한 이들은 안전한 프로그램 구조를 돕도록 수학적으로 입증할 수 있는 특성들을 가진 포스릿 객체들을 생성하는 툴을 상기 프로그래머에게 제공한다.
송신 포스릿는 상기 컴파일러에 의해 상기 프로그래머를 위해 구성된다. 그것은 또 하나의 포스릿이 특정 루트를 이용하여 하나의 위치로부터 또 하나의 위치로 송신되게 할 포스릿의 타입이다. 상기 프로그래머는 FSEND(F송신) 명령을 이용하여 예 10에서 보여지는 바와 같이 송신 타입 포스릿를 구성한다.
예 10
Figure 112007025638241-PAT00009
이러한 문구는 "myforthlet"라고 명명되는 새로운 송신 타입 포스릿를 생성하는바, 실행되었을 때 "dataforthlet"가 루트-디스크립터 "myroute"에 의해 설명되는 루트로 송신되게 된다. 컴파일러는 루트-디스크립터가 일련의 단계들로서 루트를 설명하거나 그것을 추적하거나 혹은 노드들의 개시 및 종료를 특정함으로써 생성되도록 할 것이다.
도 13은 실행 포스릿를 보여준다. 실행 포스릿는 컴파일러에 의해 프로그래머를 위해 구성된다. 그것은, 램 실행 포스릿이 특정 루트를 이용하여 하나의 위치로부터 또 하나의 위치로 송신되도록 함과 아울러 이때 램의 시작으로부터 실행되도록 할 포스릿의 타입이다. 상기 프로그래머는 FRUN(F실행) 명령을 이용하여 예 11에서 보여지는 바와 같이 실행 타입 포스릿를 구성한다.
예 11
Figure 112007025638241-PAT00010
이러한 문구는 "run-app2"로 명명되는 새로운 실행 타입 포스릿를 생성하는바, 이는 실행되었을 때 루트-디스크립터 "route1-21"에 의해 설명되는 루트를 통해 "app2"가 송신되게 된다.
많은 포스릿들이 송신 포스릿와 유사하다. 획득 포스릿(get forthlet)는 송신 포스릿와 역으로 유사하다. 상기 획득 포스릿는 자신이 오픈한 파이프에 있는 포스릿를 송신한다기 보다는 오히려 루트를 오픈하여 포스릿를 당긴다. 브로드캐스트 포스릿는 상기 컴파일러에 의해서 하나의 포스릿를 다중 위치들로 송신하도록 구성된다. 수집(collect) 및 집합(gather) 포스릿들은 다중 위치로부터 단일 위치로 데이터를 수집 또는 집합하도록 컴파일러에 의해 구성된다. 분산(distribute) 포스릿들은 하나의 위치로부터 수집된 데이터의 부분들을 다중 위치들에게 분산하도록 컴파일러에 의해 구성된다.
상기 간단한 포스릿들에 추가하여, 많은 중간 레벨(midlevel) 포스릿 객체들이 있다. 중간 레벨 포스릿 객체들은 프로그래머 및 컴파일러에 의해 설정됨과 아울러 상기 프로그래머를 돕기 위해 상위 레벨 포스릿들에 의해 사용되는 객체 특성들을 가진 포스릿들이다. 예 12는 템플릿(template) 포스릿를 보여준다.
예 12
Figure 112007025638241-PAT00011
이러한 예는 재배치 가능한 포스릿로서 데이터 클리퍼(clipper)의 정의를 보여준다. "ioport", "fmax#" 및 "Cntmsg#"의 명칭들의 사용은 이러한 포스릿이 상기 포스릿의 내부에 관련 주소들과 함께 3개 필드를 구비함을 지정하는바 상기 포스릿은 템플릿이 실증될 때 예시적인 변수들을 포함할 것이다. 재배치 가능한 포스릿에서 그러한 명칭들을 사용함으로써, 이러한 포스릿의 복사(copy)가 수행될 수 있어서 그것이 적합한 노드 및 메모리에서의 주소로 재배치될 수 있다는 것을 컴파일러에게 알리게 됨과 아울러, 실증될 알려진 특성들과 함께 3개의 필드들을 구비하게 된다. 컴파일러는 재배치 가능한 포스릿를 만들 때 이러한 키워드들을 인식하여, "ioport#" 필드가 어느 것으로부터 2개의 이웃한 필드들의 결합된 주소를 포함함과 아울러 2개의 데이터 샘플들이 이러한 포스릿에 의해 판독 및 기록될 것이라는 것을 알게 된다.
이러한 프로그램의 일례가 실제 프로그램에서 데이터 샘플들을 처리하도록 어레이에서의 위치에 배치될 때, 적합한 이웃들에 대한 2개의 포트들의 결합된 주 소들로 상기 필드들의 내용이 설정될 것이다.
컴파일러는 또한, "Cntmsg#" 필드는 들어오는 제어 메시지들을 위해 체크될 포트의 주소를 특정하고 "fmax#" 필드는 이러한 클리퍼에 의해 스트림에서 패스될 최대 값이 되는 값을 포함함을 안다. 상기 컴파일러는 3개 포트가 요구되는 특성을 이러한 포스릿이 또한 구비함을 결정할 것이고, 그래서 그것은 오직 2개 포트를 갖는 코너 노드 상에 배치될 수 없다. 소프트웨어는 따라서 템플릿 프로그램들을 적당히 어레이 안으로 배치할 수 있어서, 상기 어레이의 각 노드를 통하는 상기 메시지 및 제어 경로들이 정확함과 아울어 어떠한 플로우 데드락(deadlock)도 존재하지 않음을 수학적으로 증명할 수 있다.
템플릿 포스릿은 그것의 템플릿의 종류와 연관되는 특성을 갖는 실행가능한 포스릿의 타입이다. 이러한 객체 특성 필드들은 컴파일러 및 프로그래머에게 상기 포스릿의 일반적인 기능이 무엇인지 그리고 상기 포스릿이 갖는 특성들이 무엇인 지를 알려준다. 일례는 FIR 필터 엘리먼트 템플릿이 될 것이다. 다단계(multi-stage) FIR 필터는 노드들의 워킹 그룹 상에 구성될 수 있는바 각 노드는 필터 기능의 일부를 수행한다. 토탈 필터 기능은 케스케이드(cascade) 필터 엘리먼트들의 각 단계 상의 특성 설정들에 의해 결정된다. 각 필터 엘리먼트의 코드는, 탭 피드백(tap feedback)을 위한 지연, 각 탭에서 피드백되는 데이터를 곱하기 위해 사용되는 상수들(contants), 그리고 데이터가 판독되고 다음 필터 단계로 기록되는 포트를 제외하면 동일하다. 템플릿 포스릿는, 조작될 수 있는 파라미터들이 어디에 있고 상기 파라미터들이 무엇을 나타내는지의 명세와 함께 이러한 코드로 구성된 다.
많은 문제점들은 이 기-정의된 기능 템플릿들의 사용을 통해 해결점으로 그 자신들을 제공하는바 상기 기-정의된 기능 템플릿들은 컴파일러에 의해 안전한 기법으로 기능에 매핑된 것이다. 이러한 특성들은, 디자인을 시각화하고 디자인의 정확성을 확인하도록 프로그래머에게 도식적으로 표현될 수 있다. 상위 레벨 포스릿들은 이러한 템플릿 포스릿 특성 필드들을 사용하여, 모듈들이 데드락을 허용하는 기법으로 연결하는 코드의 구성을 보호하도록 이웃 모듈들을 매치하는 부분들로 모듈들이 구성되게 한다.
상위 레벨 포스릿들은 또한 필요하면 상위-레벨로 될 수 있는 포스릿 위자드(wizard)로 지칭된다. 상위 레벨 포스릿들은 컴파일러의 일부이고 코드의 디자인, 구성 및 검증시 프로그래머를 돕는다. 상위 레벨 포스릿들은 포스릿들의 객체 특성을 사용하여 프로그래머를 위한 객체들을 생성한다. 포스릿 라이브러리에 몇몇의 포스릿 위자드들이 있고, 포스릿 위자드가 새로운 포스릿 위자드들의 구성을 돕도록 교대로 사용될 수 있는 문서(documentation) 있다.
FIR 필터 템플릿(template) 포스릿(forthlet)의 앞선 예에서, 필터 빌더 위저드 포스릿(filter builder wizard forthlet)은 필터의 하이-레벨 디스크립션(discription)을 받을 수 있고 그리고 각 노드에 대해 필요한 포트 방향, 상수(constants), 탭(taps), 지연(delay)을 결정하기 위해 필요한 계산을 수행하여, 노드들(nodes)의 그룹 상에 병렬(parallel) 분포된 다수-단계(multi-stage) FIR 필터를 생성한다. 이것은 각 노드에 대한 FIR 필터 포스릿 템플릿을 인스턴 스(instance)화 할 수 있고 그리고 로딩(loading)을 위해 필요한 포스릿 래퍼(wrapper)를 더할 수 있고 그리고 노드들의 전체 동작 그룹 상에서의 소프트웨어를 시작하게 할 수 있다.
상기 위저드는 송신기, 수신기, 필터, 프로토콜 번역기(protocol translators), 또는 라이브러리(library)에 더해지는 그 밖의 것들을 포함하는 R/F 컴포넌트 오브젝트(component object), 아날로그 컴포넌트 오브젝트의 구성을 도울 수 있다.
진단(diagnostic) 포스릿은 프로세서 포트 상에서 실행되고, 그리고 그 프로세서의 상태의 전체 뷰(view), 또는 그 상태에 대한 어떤 특정 정보를 PC 상의 개발 시스템과 같은 어떤 다른 위치에 리턴(return)하고 또는 심지어는 무선 링크(radio link)를 통해 원격 목적지에 리턴한다.
포스릿 해석기는, 이것이 포스릿 어드레스들의 리스트(list)로부터 포스릿들을 실행한다는 점에서 종래의 Forth 시스템과 매우 유사하다. 이 리스트는 외부 메모리 내에 상주할 수 있고 그리고 하나의 어드레스는 한번에 이 리스트로부터 판독된다. 그 다음에 이 어드레스는 X0을 갖는 RAM 서버상에서 실행된다. 내부의 세부적인 것은 종래 스레드된(threaded) Forth 시스템과 매우 많은 공통점을 가진다. 브랜치(branch)는 포스릿 해석기 포인터(pointer) 등 ram 실행을 리세트(reset)한다. 이러한 방법을 동작시키는 포스릿 해석기는 마치 종래 프로세서와 같은 매우 커다란 어드레스 공간으로부터 동작하는 매우 커다란 프로그램들을 라이팅(writing) 하게 한다. Forth 워드의 크기는 로컬 노드들 중 하나의 노드 상에서 의 메모리의 크기에 의해 제한되지 않고, 오히려 외부 메모리의 크기에 의해 제한된다. 포스릿 해석기를 사용함으로써 우리는 컴파일 타임(complile time)에서 발생하는 것으로 앞서 설명했던 런타임(Runtime)에서 많은 것들을 할 수 있다. 그 다음으로 포스릿들을 확립(build)하고 배포하는 것과 함께 컴파일러(compiler)가 할 수 있는 스마트(smart)한 것은 런타임에서 선택적으로 수행될 수 있다. 일 예로는, 로딩된 포스릿 코드(code)의 압축을 얼마나 허용할지를 이용하기 위해 그리고 배포된 프로세서들 상에서의 실행을 위해, 런타임에서의 임베디드 칩(embedded chip) 상에서 실행하는 동적 필터 빌더 타입 프로그램이 있다. 런타임 포스릿 해석기 오브젝트로서 포함되는 템플릿 및 인스턴스화 프로그램은, 필터 요소(element)가 매번 복제되는 인스턴스화 노드들의 완전한 세트(set)보다 더 작을 수 있다.
동적 포스릿 디스패처(dispatcher)는 하이 레벨 포스릿이다. 동적 런타임 로드 발란스(load balance)는, 그 순간에서 이용가능한 노드들의 수 또는 물리적 혹은 R/F 링크들을 사용하여 함께 네트워킹(networking) 되는 칩들의 수에 기초하여, 실행 가능한 포스릿들 및 포스릿 동작 그룹들의 동적 디스패칭(dispatching)을 하는 포스릿을 사용함으로써, 일부 응용들에 대해서 성취될 수 있다.
하이 레벨 포스릿들은 또한 시각화 툴(visualization tools) 및 프로파일러(profilers)로서 동작할 수 있다. 하이-레벨 포스릿들은 컴파일된 포스릿들의 오브젝트 성질들을 검사할 수 있고, 그리고 응용들의 효율, 이용도, 및 배포의 유용한 시각화를 제공할 수 있다. 이 시각화 툴 및 프로파일러는, 라이브 베이시스(live basis) 상에서의 코드 및 프로세서들과 상호작용하는 능력을 갖는 모든 코 어(core) 상에서 실행되는 종래 Forth 명령 해석기로서 행동하는 완전히 상호작용적인 환경을 포함할 수 있다. 이것은, 응용들을 빠르게 디버깅(debugging)하기 위해 필요한 번거럽고(cumbersome) 거슬리는(obtrusive) 회로 내 에뮬레이션(in-circuit emulation)에 대한 필요를 때때로 제거하는 Forth에 대한 종래의 힘(strength)이다.
본 발명 컴퓨터 어레이(10) 및 컴퓨터(12)의 특정 예들이 발명의 상세한 설명에서 개시되었지만, 아직 구상되지 않은 것들에 대한 매우 많은 응용들이 존재할 것으로 기대된다. 실제로, 본 방법 발명 및 장치 발명이 매우 다양한 사용에 적합하게 구성될 수 있다는 것은 본 발명의 여러 장점들 중 하나이다.
상기 모든 것은 본 발명의 이용가능한 실시예들의 단지 일부이다. 본 발명의 기술분야에서 숙련된 기술을 가진자들은 본 발명의 사상 및 범위를 벗어나지 않으면서 여러 가지 다른 수정 및 변경이 가능하다는 것을 쉽게 알 수 있다. 따라서, 발명의 상세한 설명에서 개시된 것은 본 발명을 한정하기 위해 의도된 것이 아니며, 그리고 첨부되는 특허청구범위는 본 발명의 전체 범위를 포함하는 것으로 해석되어져야 한다.
컴포넌트(component) 목록
10 컴퓨터 어레이
12 컴퓨터
12a 메모리 제어기 컴퓨터
14 다이(die)
16 데이터 라인
18 플래시 메모리
20 RAM
22 직렬 데이터 라인
24 병렬 데이터 버스
26a 내지 26p 입력/출력 회로
28 프로세서
30 ROM
32 컴퓨터 RAM
34 컴퓨테이션 코어(computational core)
36 컴퓨터 어레이 방법
38 상호연결된 컴퓨터 제공
40 태스크를 위한 컴퓨터 구성
42 태스크를 컴퓨터에 할당
44 컴퓨터를 초기화
본 발명 컴퓨터 어레이들(10, 10a)과 그 관련 방법은 매우 다양한 컴퓨터 응용에서 광범위하게 사용되도록 의도된 것이다. 이것은 다르지만 관련된 많은 기능들이 수행될 필요가 있는 컴퓨터 집약적 응용들에서 특히 유용할 것으로 예측된다. 본 발명 컴퓨터 어레이들(10, 10a)과 그 관련 방법의 최상의 응용들 중 어떤 응용 은 필요한 태스크(task)들이 나누어질 수 있어 컴퓨터들(12) 각각이 다른 컴퓨터들과 거의 동일한 컴퓨테이션(computation) 요건들을 가지는 곳에서의 응용일 것으로 예측된다. 그러나, 컴퓨터들(12) 중 일부의 컴퓨터는 때때로 또는 심지어 언제나 그들의 최대 성능보다 훨씬 더 적은 성능에서 동작하는 곳에서조차도, 본 발명자는, 컴퓨터 어레이(10, 10a)의 전체 속도 및 효율이 일반적으로 태스크들이 동적으로 할당될 수 있는 이전의 컴퓨터 어레이들의 전체 속도 및 효율을 능가한다는 것을 알았다.
하나 이상의 컴퓨터 어레이들(10, 10a)을 갖는 것이 유리한 많은 응용들이 존재할 수 있다는 것에 유의해야 한다. 가능한 이러한 예들 중 하나는 디지털 라디오(digital radio)가 GPS 입력을 요구할 수 있는 것이다. 이러한 예에서, 라디오는 하나의 컴퓨터 어레이(10)에 의해 구현될 수 있고, 이 컴퓨터 어레이(10)는 GPS 기능을 달성할 수 있도록 구성된 개별 컴퓨터 어레이(10)로부터 입력을 수신한다.
더욱 주의할 것으로, 컴퓨터들(12)이 상기 예에서 설명된 바와 같이 개별 태스크를 하도록 최적화될 수 있을지라도, 만약에 그 태스크가 특별한 응용에서 필요하지 않다면, 컴퓨터들(12)은, 프로그래머의 구상력에 의해서만 단지 한정될 수 있는 바와 같이, 다른 어떤 태스크를 수행하도록 쉽게 프로그래밍 될 수 있다.
본 발명 컴퓨터 어레이(10, 10a)는 Forth 컴퓨터 언어를 사용하여 가장 잘 구현될 수 있고, 이 Forth 컴퓨터 언어는, 본 발명을 구현하기 위해 요구되는 바와 같이, 태스크들을 쉽게 나누도록 본래 세그먼트(segment)화 되어있다. Color Forth는 Forth 언어의 최근 변형이며, 동등하게 응용가능 하다.
본 발명 컴퓨터 어레이(10, 10a) 및 컴퓨터 어레이 방법(36)이 현재의 태스크, 입력/출력 디바이스, 등과 쉽게 통합될 수 있고 생산될 수 있기 때문에, 그리고 상세한 설명에서 설명된 바와 같은 장점이 제공되기 때문에, 본 발명이 산업 분야에서 쉽게 받아들여질 것으로 기대된다. 이런저런 이유로 인해, 본 발명의 유용성 및 산업상 이용 가능성은 그 범위에 있어서 중요하고 그 지속 기간이 오래 유지될 것으로 기대된다.

Claims (27)

  1. 복수의 컴퓨터들과; 그리고
    상기 컴퓨터들을 연결하는 복수의 데이터 경로들과; 그리고
    상기 복수의 컴퓨터들 중 하나의 컴퓨터와 상기 복수의 컴퓨터들 중 또 다른 하나의 컴퓨터 사이에 프로그램들 및 데이터를 분산시키는 메커니즘(mechanism)을 포함하는 컴퓨터 어레이 시스템.
  2. 제 1 항에 있어서,
    상기 메커니즘은 래퍼(wrapper)를 더 포함하며, 상기 래퍼가 상기 복수의 컴퓨터들 중 상기 하나의 컴퓨터와 조우하는(encounter) 때에, 어떤 액션(action)이 취해져야 할지에 관해 상기 래퍼가 상기 복수의 컴퓨터들 중 적어도 하나의 컴퓨터에 명령하는 것을 특징으로 하는 컴퓨터 어레이 시스템.
  3. 제 2 항에 있어서,
    상기 래퍼는 상기 컴퓨터들의 상기 적어도 일부의 컴퓨터들 중 상기 하나의 컴퓨터로 하여금 상기 래퍼에 후속하여 데이터를 로딩(loading)할 것을 명령하는 것을 특징으로 하는 컴퓨터 어레이 시스템.
  4. 제 2 항에 있어서,
    상기 래퍼는 상기 컴퓨터들의 상기 적어도 일부의 컴퓨터들 중 상기 하나의 컴퓨터로 하여금 상기 래퍼에 후속하여 명령들을 로딩(loading)할 것을 명령하는 것을 특징으로 하는 컴퓨터 어레이 시스템.
  5. 제 2 항에 있어서,
    상기 래퍼는 상기 컴퓨터들의 적어도 일부의 컴퓨터들 중 하나의 컴퓨터로 하여금 상기 컴퓨터들 중 또 다른 컴퓨터에 캐리어(carrier)를 전송할 것을 명령하는 것을 특징으로 하는 컴퓨터 어레이 시스템.
  6. 제 2 항에 있어서,
    상기 래퍼는 포트(port)에서 직접 실행가능한 것을 특징으로 하는 컴퓨터 어레이 시스템.
  7. 제 2 항에 있어서,
    상기 래퍼는 포트에서 직접 실행가능한 것을 특징으로 하는 컴퓨터 어레이 시스템.
  8. 제 2 항에 있어서,
    상기 래퍼는 콜(call)을 포함하며, 여기서 상기 콜은 리턴 스택(return stack) 상에 어드레스(address)를 풋(put)하고, 이어서 리턴하는 것을 특징으로 하 는 컴퓨터 어레이 시스템.
  9. 제 2 항에 있어서,
    상기 래퍼는 상기 래퍼의 길이를 표시하는 카운터(counter)를 더 포함하는 것을 특징으로 하는 컴퓨터 어레이 시스템.
  10. 제 1 항에 있어서,
    상기 컴퓨터들은 물리적으로 5×5 어레이로 배열되는 것을 특징으로 하는 컴퓨터 어레이 시스템.
  11. 제 1 항에 있어서,
    상기 컴퓨터들 중 적어도 일부의 컴퓨터는 물리적으로 4×6 어레이로 배열되는 것을 특징으로 하는 컴퓨터 어레이 시스템.
  12. 제 1 항에 있어서,
    상기 어레이의 각 사이드(side)를 따라 있는 컴퓨터들의 수량은 짝수인 것을 특징으로 하는 컴퓨터 어레이 시스템.
  13. 제 1 항에 있어서,
    상기 컴퓨터들 중 적어도 하나의 컴퓨터는 외부 메모리 소스(source)와 직접 통신하는 것을 특징으로 하는 컴퓨터 어레이 시스템.
  14. 제 1 항에 있어서,
    상기 컴퓨터들 중 적어도 하나의 컴퓨터는, 외부 메모리 소스로부터 상기 복수의 컴퓨터들 중 적어도 일부의 컴퓨터로 데이터를 전달하는 것을 특징으로 하는 컴퓨터 어레이 시스템.
  15. 복수의 컴퓨터들을 제공하는 단계와; 그리고
    상기 컴퓨터들 중 적어도 일부의 컴퓨터에 다른 태스크를 할당하는 단계를 포함하는 컴퓨터 작업을 수행하는 방법.
  16. 제 15 항에 있어서,
    상기 컴퓨터들 중 적어도 하나의 컴퓨터는 플래시 메모리와 통신하도록 할당되는 것을 특징으로 하는 컴퓨터 작업을 수행하는 방법.
  17. 제 15 항에 있어서,
    상기 컴퓨터들 중 적어도 하나의 컴퓨터는 RAM과 통신하도록 할당되는 것을 특징으로 하는 컴퓨터 작업을 수행하는 방법.
  18. 제 15 항에 있어서,
    상기 컴퓨터들 중 적어도 하나의 컴퓨터는 입력/출력 기능을 달성하도록 할당되는 것을 특징으로 하는 컴퓨터 작업을 수행하는 방법.
  19. 제 15 항에 있어서,
    상기 컴퓨터들 중 하나의 컴퓨터는 상기 컴퓨터들의 나머지 컴퓨터들에 대한 할당을 라우팅(routing)하는 것을 특징으로 하는 컴퓨터 작업을 수행하는 방법.
  20. 복수의 컴퓨터들과; 그리고
    상기 컴퓨터들 사이의 복수의 데이터 연결들을 포함하여 구성되며;
    여기서 상기 컴퓨터들 중 적어도 일부의 컴퓨터는 다른 기능들을 수행하도록 프로그래밍되는 것을 특징으로 하는 컴퓨터 어레이.
  21. 제 20 항에 있어서,
    상기 다른 기능들은 태스크를 달성하기 위해 함께 동작하는 것을 특징으로 하는 컴퓨터 어레이.
  22. 제 20 항에 있어서,
    상기 기능들 각각은, 상기 컴퓨터 어레이가 초기화될 때, 각각의 컴퓨터들 내에 프로그래밍되는 것을 특징으로 하는 컴퓨터 어레이.
  23. 제 20 항에 있어서,
    상기 컴퓨터들 사이의 통신은 비동기식인 것을 특징으로 하는 컴퓨터 어레이.
  24. 복수의 컴퓨터들을 사용하여 태스크를 수행(accomplish)하는 방법에 있어서,
    태스크를 연산 컴포넌트들(operational components)로 나누고 그리고 상기 연산 컴포넌트들 각각을 상기 컴퓨터들 중 하나의 컴퓨터에 할당하는 단계와;
    상기 연산 컴포넌트들 각각을 수행하기 위해 상기 컴퓨터들 중 적어도 일부 컴퓨터를 프로그래밍하는 단계를 포함하는 태스크를 달성하는 방법.
  25. 제 24 항에 있어서,
    상기 연산 컴포넌트들은 GPS 수신 기능을 수행하는데 사용되는 연산들인 것을 특징으로 하는 태스크를 달성하는 방법.
  26. 제 24 항에 있어서,
    상기 태스크가 시작되기 전에, 상기 연산 컴포넌트들 각각을 수행하도록 상기 컴퓨터들을 프로그래밍하는 것을 특징으로 하는 태스크를 달성하는 방법.
  27. 제 24 항에 있어서,
    상기 컴퓨터들은 컴퓨터 어레이로 배열되는 것을 특징으로 하는 태스크를 달 성하는 방법.
KR1020070032588A 2006-03-31 2007-04-02 컴퓨터 프로세서 어레이를 동작하는 방법 및 시스템 KR20070098760A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US78826506P 2006-03-31 2006-03-31
US60/788,265 2006-03-31

Publications (1)

Publication Number Publication Date
KR20070098760A true KR20070098760A (ko) 2007-10-05

Family

ID=38283039

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020070032588A KR20070098760A (ko) 2006-03-31 2007-04-02 컴퓨터 프로세서 어레이를 동작하는 방법 및 시스템

Country Status (7)

Country Link
US (1) US20070250682A1 (ko)
EP (1) EP1840742A3 (ko)
JP (1) JP2007272895A (ko)
KR (1) KR20070098760A (ko)
CN (1) CN101051301A (ko)
TW (1) TW200817925A (ko)
WO (1) WO2007117414A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8813073B2 (en) 2010-12-17 2014-08-19 Samsung Electronics Co., Ltd. Compiling apparatus and method of a multicore device

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080052490A1 (en) * 2006-08-28 2008-02-28 Tableau, Llc Computational resource array
US20080052525A1 (en) * 2006-08-28 2008-02-28 Tableau, Llc Password recovery
US20080126472A1 (en) * 2006-08-28 2008-05-29 Tableau, Llc Computer communication
US8363542B2 (en) * 2006-11-28 2013-01-29 Nokia Corporation Robust remote reset for networks
US20080282062A1 (en) * 2007-05-07 2008-11-13 Montvelishsky Michael B Method and apparatus for loading data and instructions into a computer
GB2454996B (en) * 2008-01-23 2011-12-07 Ibm Method for balanced handling of initiative in a non-uniform multiprocessor computing system
US20090254886A1 (en) * 2008-04-03 2009-10-08 Elliot Gibson D Virtual debug port in single-chip computer system
TWI384374B (zh) * 2008-05-27 2013-02-01 Nat Univ Tsing Hua 具資料串流功能之多核心遠端程序呼叫方法
US20100023730A1 (en) * 2008-07-24 2010-01-28 Vns Portfolio Llc Circular Register Arrays of a Computer
US20100158076A1 (en) * 2008-12-19 2010-06-24 Vns Portfolio Llc Direct Sequence Spread Spectrum Correlation Method for a Multiprocessor Array
US8185898B2 (en) 2009-10-01 2012-05-22 National Tsing Hua University Method of streaming remote procedure invocation for multi-core systems
US9588881B2 (en) 2011-05-16 2017-03-07 Cypress Semiconductor Corporation Stack processor using a ferroelectric random access memory (F-RAM) for code space and a portion of the stack memory space having an instruction set optimized to minimize processor stack accesses
US9910823B2 (en) * 2011-05-16 2018-03-06 Cypress Semiconductor Corporation Stack processor using a ferroelectric random access memory (F-RAM) having an instruction set optimized to minimize memory fetch
US9195575B2 (en) * 2013-05-17 2015-11-24 Coherent Logix, Incorporated Dynamic reconfiguration of applications on a multi-processor embedded system
RU2530285C1 (ru) * 2013-08-09 2014-10-10 Федеральное Государственное Бюджетное Образовательное Учреждение Высшего Профессионального Образования "Саратовский Государственный Университет Имени Н.Г. Чернышевского" Активный аппаратный стек процессора
TWI594131B (zh) * 2016-03-24 2017-08-01 Chunghwa Telecom Co Ltd Cloud batch scheduling system and batch management server computer program products
GB2580165B (en) 2018-12-21 2021-02-24 Graphcore Ltd Data exchange in a computer with predetermined delay
CN112559440B (zh) * 2020-12-30 2022-11-25 海光信息技术股份有限公司 多小芯片系统中实现串行业务性能优化的方法及装置

Family Cites Families (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4215401A (en) * 1978-09-28 1980-07-29 Environmental Research Institute Of Michigan Cellular digital array processor
US4739474A (en) * 1983-03-10 1988-04-19 Martin Marietta Corporation Geometric-arithmetic parallel processor
DE3533800C1 (de) * 1985-09-21 1987-02-05 Hans-Werner Lang Verfahren zum Betreiben eines hochintegrierten Wellenfront-Feldrechners sowie entsprechender Wellenfront-Feldrechner
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
US5222237A (en) * 1988-02-02 1993-06-22 Thinking Machines Corporation Apparatus for aligning the operation of a plurality of processors
US5257395A (en) * 1988-05-13 1993-10-26 International Business Machines Corporation Methods and circuit for implementing and arbitrary graph on a polymorphic mesh
CA2019299C (en) * 1989-06-22 2002-01-15 Steven Frank Multiprocessor system with multiple instruction sources
US5440749A (en) * 1989-08-03 1995-08-08 Nanotronics Corporation High performance, low cost microprocessor architecture
DE4019040A1 (de) * 1990-06-14 1991-12-19 Philips Patentverwaltung Multirechnersystem
US5765015A (en) * 1990-11-13 1998-06-09 International Business Machines Corporation Slide network for an array processor
JPH0713945A (ja) * 1993-06-16 1995-01-17 Nippon Sheet Glass Co Ltd 演算処理部および制御・記憶部分離型マルチプロセッサ ・システムのバス構造
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
DE69712587T2 (de) * 1996-10-31 2003-01-09 Stmicroelectronics Ltd., Almondsbury Mikrorechner mit Zugriff auf einen externen Speicher
US6895452B1 (en) * 1997-06-04 2005-05-17 Marger Johnson & Mccollom, P.C. Tightly coupled and scalable memory and execution unit architecture
US6292822B1 (en) * 1998-05-13 2001-09-18 Microsoft Corporation Dynamic load balancing among processors in a parallel computer
SE514785C2 (sv) 1999-01-18 2001-04-23 Axis Ab Processor och metod för att exekvera instruktioner från flera instruktionskällor
US6966002B1 (en) * 1999-04-30 2005-11-15 Trymedia Systems, Inc. Methods and apparatus for secure distribution of software
US6691219B2 (en) * 2000-08-07 2004-02-10 Dallas Semiconductor Corporation Method and apparatus for 24-bit memory addressing in microcontrollers
US20060248360A1 (en) * 2001-05-18 2006-11-02 Fung Henry T Multi-server and multi-CPU power management system and method
US20030005168A1 (en) * 2001-06-29 2003-01-02 Leerssen Scott Alan System and method for auditing system call events with system call wrappers
US7069372B1 (en) * 2001-07-30 2006-06-27 Cisco Technology, Inc. Processor having systolic array pipeline for processing data packets
US7249357B2 (en) * 2001-08-20 2007-07-24 Silicon Graphics, Inc. Transparent distribution and execution of data in a multiprocessor environment
US6959372B1 (en) * 2002-02-19 2005-10-25 Cogent Chipware Inc. Processor cluster architecture and associated parallel processing methods
US7415594B2 (en) * 2002-06-26 2008-08-19 Coherent Logix, Incorporated Processing system with interspersed stall propagating processors and communication elements
US7237045B2 (en) * 2002-06-28 2007-06-26 Brocade Communications Systems, Inc. Apparatus and method for storage processing through scalable port processors
US7657861B2 (en) * 2002-08-07 2010-02-02 Pact Xpp Technologies Ag Method and device for processing data
JP3987784B2 (ja) * 2002-10-30 2007-10-10 Necエレクトロニクス株式会社 アレイ型プロセッサ
US7353501B2 (en) * 2002-11-18 2008-04-01 Microsoft Corporation Generic wrapper scheme
US7673118B2 (en) * 2003-02-12 2010-03-02 Swarztrauber Paul N System and method for vector-parallel multiprocessor communication
US7581081B2 (en) * 2003-03-31 2009-08-25 Stretch, Inc. Systems and methods for software extensible multi-processing
US7937557B2 (en) * 2004-03-16 2011-05-03 Vns Portfolio Llc System and method for intercommunication between computers in an array
US7269805B1 (en) * 2004-04-30 2007-09-11 Xilinx, Inc. Testing of an integrated circuit having an embedded processor
US7484041B2 (en) * 2005-04-04 2009-01-27 Kabushiki Kaisha Toshiba Systems and methods for loading data into the cache of one processor to improve performance of another processor in a multiprocessor system
US20080282062A1 (en) * 2007-05-07 2008-11-13 Montvelishsky Michael B Method and apparatus for loading data and instructions into a computer

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8813073B2 (en) 2010-12-17 2014-08-19 Samsung Electronics Co., Ltd. Compiling apparatus and method of a multicore device

Also Published As

Publication number Publication date
EP1840742A2 (en) 2007-10-03
US20070250682A1 (en) 2007-10-25
WO2007117414A3 (en) 2008-11-20
EP1840742A3 (en) 2008-11-26
TW200817925A (en) 2008-04-16
WO2007117414A2 (en) 2007-10-18
JP2007272895A (ja) 2007-10-18
CN101051301A (zh) 2007-10-10

Similar Documents

Publication Publication Date Title
KR20070098760A (ko) 컴퓨터 프로세서 어레이를 동작하는 방법 및 시스템
CN114586004B (zh) 静默可重新配置数据处理器
JP2519226B2 (ja) プロセツサ
US5036453A (en) Master/slave sequencing processor
US10073700B2 (en) Method and apparatus for a general-purpose multiple-core system for implementing stream-based computations
US5752068A (en) Mesh parallel computer architecture apparatus and associated methods
US8667252B2 (en) Method and apparatus to adapt the clock rate of a programmable coprocessor for optimal performance and power dissipation
US5752071A (en) Function coprocessor
JP2502960B2 (ja) マイクロコンピュ−タ、ならびにマイクロコンピユ−タおよびマイクロコンピユ−タ・ネットワ−クを動作させる方法
JP2019079529A (ja) マルチタイル処理アレイにおける同期化
KR20210057184A (ko) 이종 cpu/gpu 시스템에서 데이터 흐름 신호 처리 애플리케이션 가속화
WO2010046622A1 (en) Integrated circuit incorporating an array of interconnected processors executing a cycle-based program
JP2009064411A (ja) データおよび命令をコンピュータにロードするための方法および装置
US11782760B2 (en) Time-multiplexed use of reconfigurable hardware
US20050278720A1 (en) Distribution of operating system functions for increased data processing performance in a multi-processor architecture
JP2884831B2 (ja) 処理装置
US6327648B1 (en) Multiprocessor system for digital signal processing
CN116670644A (zh) 通用计算核上的交错处理的方法
KR20090004394A (ko) 입력 소스로부터의 직접적인 명령어들의 실행
Pereira et al. Co-designed FreeRTOS deployed on FPGA
US20100325389A1 (en) Microprocessor communications system
WO2021013727A1 (en) Processor
Samman et al. Architecture, on-chip network and programming interface concept for multiprocessor system-on-chip
Arifin et al. FSM-controlled architectures for linear invasion
Amouri et al. FPGA implementation of an invasive computing architecture

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