KR20040017251A - 다수의 파이프라인을 이용해 패킷을 다수의 프로그래밍엔진에 할당하는 방법 및 프로세서 - Google Patents

다수의 파이프라인을 이용해 패킷을 다수의 프로그래밍엔진에 할당하는 방법 및 프로세서 Download PDF

Info

Publication number
KR20040017251A
KR20040017251A KR10-2003-7017289A KR20037017289A KR20040017251A KR 20040017251 A KR20040017251 A KR 20040017251A KR 20037017289 A KR20037017289 A KR 20037017289A KR 20040017251 A KR20040017251 A KR 20040017251A
Authority
KR
South Korea
Prior art keywords
programming
engines
shared variable
cam
context
Prior art date
Application number
KR10-2003-7017289A
Other languages
English (en)
Other versions
KR100613923B1 (ko
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 KR20040017251A publication Critical patent/KR20040017251A/ko
Application granted granted Critical
Publication of KR100613923B1 publication Critical patent/KR100613923B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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/461Saving or restoring of program or task context
    • G06F9/462Saving or restoring of program or task context with multiple register sets
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Multi Processors (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Devices For Executing Special Programs (AREA)
  • Multi-Process Working Machines And Systems (AREA)
  • Numerical Control (AREA)
  • Exchange Systems With Centralized Control (AREA)

Abstract

병렬 하드웨어 기반 멀티쓰레드식 프로세싱 방법이 개시되어 있다. 이 방법은 패킷 프로세싱에 대한 작업을 프로그래밍 엔진에 할당하는 단계와 프로그래밍 엔진에 대응하는 프로그래밍 단계 사이에 파이프라인을 설정하는 단계를 포함한다, 이 방법은 프로그래밍 엔진 상에 할당된 작업에 대한 문맥을 설정하는 단계와 CAM과 같은 소프트웨어 제어된 캐시를 이용하여 프로그래밍 엔진에 상주하는 다음 이웃 레지스터 사이에서 데이터를 전송하는 단계도 포함한다.

Description

다수의 파이프라인을 이용해 패킷을 다수의 프로그래밍 엔진에 할당하는 방법 및 프로세서{CONTEXT PIPELINES}
병렬 프로세싱은 컴퓨터 프로세스에서 동시성 이벤트의 정보 프로세싱의 효율적인 방식이다. 순차적 프로세싱에 비해 병렬 프로세싱은 컴퓨터에서 다수의 프로그램의 동시 실행을 요구한다. 병렬 프로세서의 문맥에서, 병행법은 동시에 하나 이상의 일을 실행하는 것을 포함한다. 모든 작업이 단일 스테이션에서 순차적으로 수행되는 직렬 패러다임과 달리, 작업들이 지정된 스테이션들에서 병렬 프로세싱으로 수행되는 파이프라인식 기계에서는 다수의 스테이션이 제공되고, 각각은 다양한 작업들을 동시에 수행할 수 있다. 다수의 스테이션은 계산 작업의 동일 또는 공통 요소에 대해 동시에 그리고 독립적으로 동작한다. 따라서, 병렬 프로세싱을 사용 또는 적용함으로써 계산 작업을 해결할 수 있다.
본 발명은 병렬의 하드웨어 기반 멀티쓰레드식 프로세싱 방법 및 장치에 관한 것이다.
도 1은 하드웨어 기반 멀티쓰레드식 프로세서를 이용하는 통신 시스템의 블록도,
도 2는 도 1의 하드웨어 기반 멀티쓰레드식 프로세서에 사용되는 프로그래밍 엔진 기능 유닛의 블록도,
도 3은 문맥 상태 전환의 블록도,
도 4는 콘텐츠 어드레스가능 메모리(CAM)의 블록도,
도 5는 CAM 프로세스의 상세한 블록도,
도 6은 문맥 파이프라인 프로세스의 구체화된 블록도.
도 1을 참조하면, 컴퓨터 시스템(10)은 병렬의, 하드웨어 기반 멀티쓰레드식 네트워크 프로세스(12)를 포함한다. 하드웨어 기반 멀티쓰레드식 프로세서(12)는 메모리 시스템 또는 메모리 리소스(14)에 결합된다. 메모리 시스템(14)은 동적 랜덤 액세스 메모리(DRAM)(14a) 및 정적 랜덤 액세스 메모리(SRAM)(14b)를 포함한다. 프로세싱 시스템(10)은 병렬 하위작업 또는 기능으로 분할될 수 있는 작업들에 특히 유용하다. 구체적으로, 하드웨어기반 멀티쓰레드식 프로세서(12)는 대기시간(latency) 지향성 보다 대역폭 지향성 작업에 유용하다. 하드웨어 기반 멀티쓰레드식 프로세서(12)는 다수의 기능 마이크로엔진 또는 프로그래밍 엔진(16)을 포함하되, 각각은 특정 작업에 대해 동시에 작용하고 독립적으로 동작하는 다수의 하드웨어 제어된 쓰레드를 갖는다.
프로그래밍 엔진(16)은 각각 하드웨어식 프로그램 카운터 및 이 프로그램 카운터와 연관된 상태(state)를 유지한다. 실제로, 문맥 또는 쓰레드의 대응 세트는 프로그램 엔진(16) 각각에 대해 동시에 작용할 수 있지만 사실상 임의의 한번에 하나만이 실행된다.
이 예에서, 8개의 프로그래밍 엔진(16a-16h)은 도 1에 도시되어 있다. 프로그래밍 엔진(16a-16h)의 각 엔진은 8개의 하드웨어 쓰레드 또는 문맥을 처리한다. 8개의 프로그래밍 엔진(16a-16h)은 메모리 리소스(14)를 포함하는 공유된 리소스 및 버스 인터페이스(도시되어 있지 않음)와 동작한다. 하드웨어 기반 멀티쓰레드식 프로세서(12)는 동적 랜덤 액세스 메모리(DRAM) 제어기(18a) 및 정적 랜덤 액세스 메모리(SRAM) 제어기(18b)를 포함한다. DRAM 메모리(14a) 및 DRAM 제어기(18a)는 전형적으로 대량의 데이터를 처리하는데, 예를 들어 네트워크 패킷으로부터의 네트워크 페이로드(payloads)를 처리하는데 사용된다. SRAM 메모리(14b) 및 SRAM 제어기(18b)는 낮은 대기 시간의, 고속 액세스 작업을 위한 네트워킹 구현, 예를 들어 룩업 테이블, 코어 프로세서(20)용 메모리 등을 액세스하는데 사용된다.
8개의 프로그래밍 엔진(16a-16h)은 데이터 특성에 근거하여 DRAM 메모리(14a) 또는 SRAM 메모리(14b) 중 하나를 액세스한다. 그러므로, 낮은 대기시간의, 낮은 대역폭 데이터가 SRAM 메모리(14b)에 저장되고 그로부터 인출되는 반면, 대기 시간이 중요하지 않는 보다 높은 대역폭 데이터는 DRAM 메모리(14a)에 저장되고 그로부터 인출된다. 프로그래밍 엔진(16a-16h)은 DRAM 제어기(18a) 또는SRAM 제어기(18b)에 대해 메모리 참조 인스트럭션(memory reference instructions)을 수행할 수 있다.
하드웨어 기반 멀티쓰레드식 프로세서(12)는 프로그래밍 엔진(16a-16h)에 대한 마이크로코드 제어를 로딩하는 프로세서 코어(20)도 포함한다. 이 예에서, 프로세서 코어(20)는 XScaleTM기반 아키텍쳐이다.
프로세서 코어(20)는 프로토콜, 예외 상황(exceptions), 및 프로그램 엔진이 보다 상세한 프로세싱을 위해 패킷들을 예를 들어 경계 조건(boundary conditions)으로 전달하는 패킷 프로세싱에 대한 가외 지원(extra support)과 같은 범용 컴퓨터 유형 기능을 수행한다.
프로세서 코어(20)는 운영 시스템(도시되어 있지 않음)을 구비하다. 운영 시스템(OS)을 통해, 프로세서(20)는 프로그래밍 엔진(16a-16h) 상에서 동작할 기능을 호출할 수 있다. 프로세서 코어(20)는 임의의 지원되는 OS, 특히 실시간 OS를 사용할 수 있다. XScaleTM아키텍쳐로서 구현된 코어 프로세서(20)에서, 마이크로소프트 NT 실시간, VXWorks 및 μCOS와 같은 운영 시스템, 또는 인터넷을 통해 입수가능한 프리웨어 OS가 사용될 수 있다.
하드웨어 멀티쓰레딩의 장점은 SRAM 또는 DRAM 메모리 액세스에 의해 설명될 수 있다. 예로서, 프로그래밍 엔진(16)들 중 하나로부터, 문맥(예를 들어, 쓰레드_0)에 의해 요청된 SRAM 액세스는 SRAM 제어기(18b)로 하여금 SRAM 메모리(14b)로의 액세스를 개시하도록 할 것이다. SRAM 제어기(18b)는 SRAM 메모리(14b)를 액세스하고, SRAM 메모리(14b)로부터 데이터를 인출하여, 데이터를 요청 프로그래밍 엔진(16)에 리턴한다.
SRAM 액세스 동안, 프로그래밍 엔진(16a-16h)들 중 하나가 동작할 수 있는 단일 쓰레드만을 구비한 경우, 그 프로그래밍 엔진은 SRAM 메모리(14b)로부터 데이터가 리턴되었을 때까지 휴지 상태일 것이다.
각각의 프로그래밍 엔진(16a-16h) 내에서 하드웨어 문맥 스와핑을 이용함으로써, 하드웨어 문맥 스와핑은 고유한 프로그램 카운터를 갖는 다른 문맥이 그 동일한 프로그래밍 엔진 내에서 수행되도록 인에이블링한다. 그러므로, 또 다른 쓰레드 예를 들어, 쓰레드_1은 제 1 쓰레드, 예를 들어 쓰레드_0이 리턴되는 판독 데이터를 대기하는 동안 기능을 수행할 수 있다. 실행 동안, 쓰레드_1은 DRAM 메모리(14a)를 액세스할 수 있다. 쓰레드_1이 DRAM 유닛 상에서 동작하고, 쓰레드_0이 SRAM 유닛 상에서 동작하는 동안, 새로운 쓰레드, 예를 들어 쓰레드_2는 이제 프로그래밍 엔진(16)에서 동작할 수 있다. 쓰레드_2는 메모리를 액세스하거나 또는 버스 인터페이스에 액세스하는 것과 같은 일부 다른 긴 대기시간 동작을 수행할 필요가 있을 때까지, 소정 양의 시간 동안 동작할 수 있다. 그러므로, 동시에, 멀티 쓰레드싯 프로세서(12)는, 모두가 프로그램 엔진(16)들 중 하나에 의해 완료 또는 동작되는 버스 동작, SRAM 동작 및 DRAM 동작을 가질 수 있고 보다 많은 작업을 처리하는데 이용가능한 하나 이상의 쓰레드 또는 문맥을 가질 수 있다.
하드웨어 문맥 스와핑은 또한 작업의 완료가 동시에 일어나게 하다. 예를 들어, 두 개의 쓰레드가 공유 메모리 리소스, 예를 들어 SRAM 메모리(14b)를 액세스할 수 있다. 별개의 기능 유닛, 예를 들어, SRAM 제어기(18b) 및 DRAM 제어기(18a) 각각은, 그들이 프로그래밍 엔진 쓰레드 또는 문맥들 중 하나로부터 요청된 작업을 완료하면 동작의 완료를 나타내는 플래그를 보고한다. 프로그래밍 엔진(16a-16h)가 플래그를 수신하는 경우, 프로그래밍 엔진(16a-16h)은 어느 쓰레드를 턴온할 지를 결정할 수 있다.
하드웨어 기반 멀티쓰레드식 프로세서(12)에 대한 애플리케이션의 일 예는 네트워크 프로세서이다. 네트워크 프로세서로서, 하드웨어 기반 멀티쓰레드식 프로세서(12)는 매체 액세스 제어기(MAC) 장치, 예를 들어, 10/100BaseT Octal MAC(13a) 또는 기가비트 이더넷 장치(13b)와 같은 네트워크 장치와 인터페이싱한다. 일반적으로, 네트워크 프로세서로서, 하드웨어 기반 멀티쓰레드식 프로세서(12)는 대량의 데이터를 수신 또는 송신하는 임의의 유형의 통신 장치 또는 인터페이스와 인터페이싱할 수 있다. 네트워크 애플리케이션에 동작하는 컴퓨터 프로세싱 시스템(10)은 네트워크 패킷을 수신할 수 있고 이들 패킷을 병렬 방식으로 처리할 수 있다.
프로그래밍 엔진
도 2를 참조하면, 프로그램 엔진(16a-16h)들 중 하나의 예시적인 프로그래밍 엔진(16a)이 도시되어 있다. 프로그래밍 엔진(16a)은, 일 예에서 각각이 전체 40비트인 4096개의 인스트럭션의 RAM을 포함하는 제어 저장소(30)를 포함한다. RAM은 프로그래밍 엔진(16a)이 수행하는 마이크로프로그램을 저장한다. 제어저장소(30)의 마이크로프로그램은 프로세서 코어(20)(도 1)에 의해서 로딩이 가능하다.
실행 쓰레드에 대해 지역적인 이벤트 신호 이외에, 프로그래밍 엔진(16a)은 전역적인 신호전달 상태(signaling states)를 이용한다. 신호전달 상태를 이용해, 실행 쓰레드는 모든 프로그래밍 엔진(16a-16h)에 신호 상태를 브로드캐스트할 수 있다. 프로그래밍 엔진에 있는 임의의 그리고 모든 쓰레드는 이들 신호화 상태 상에서 분기할 수 있다. 이들 신호화 상태는 리소스의 유용성을 결정하거나 또는 리소스가 서비싱을 할 예정인 지를 결정하는데 사용된다. 문맥 이벤트 로직은 8개(8) 쓰레드에 대한 중재(arbitration)를 갖는다. 일 예에서, 이 중재는 라운드 로빈 매카니즘(round robin mechanism)이다. 우선순위 큐잉(priority queuing) 또는 가중 공정 큐잉(weighted fair queuing)을 포함하는 다른 기법이 사용될 수 있다.
위에서 설명한 바와 같이, 프로그래밍 엔진(16a)은 8개 문맥의 멀티쓰레드식 실행을 지원한다. 이렇게 함으로써 하나의 쓰레드는 또 다른 쓰레드가 메모리 참조를 발행하고 보다 많은 작업을 하기 전에 그 참조가 완료될 때까지 대기한 후 곧 실행할 수 있게 된다. 멀티 쓰레드식 실행은 프로그래밍 엔진(16a)의 효율적인 하드웨어 실행을 유지하기 위해 중요한데, 그 이유는 메모리 대기 시간이 중요하기 때문이다. 멀티쓰레드식 실행은 프로그래밍 엔진(16)이 몇몇 쓰레드를 가로질러 유용한 독립적 작업을 수행함으로써 메모리 대기 시간을 숨길 수 있게 해준다.
효율적인 문맥 스와핑을 위해, 프로그래밍 엔진(16a)은 자기 자신의 레지스터 세트, 프로그램 카운터 및 문맥 특정 로컬 레지스터(context specific local register)를 갖는다. 문맥마다 복사본을 가짐으로써 각 문맥 스와핑을 위해 공유 메모리 및 프로그래밍 엔진 레지스터로 또한 그로부터 문맥 특정 정보를 이동시킬 필요가 없어진다. 고속의 문맥 스와핑은 하나의 문맥이 다른 문맥이 입-출력(I/O), 전형적으로 완료할 외부 메모리 액세스, 또는 또 다른 문맥 또는 하드웨어 유닛으로부터 신호를 대기하는 동안 계산을 수행할 수 있게 해준다.
예를 들어, 프로그래밍 엔진(16a)은 8개의 프로그램 카운터 및 8개의 문맥 관련 레지스터 세트를 유지함으로써 8개의 문맥을 실행한다. 6개의 상이한 유형의 문맥 관련 레지스터, 즉 범용 레지스터(GRPs)(32), 인터-프로그래밍 에이전트 레지스터(도시되 있지 않음), 정적 랜덤 액세스 메모리(SRAM) 입력 전송 레지스터(34), 동적 랜덤 액세스 메모리(DRAM) 입력 전송 레지스터(36), SRAM 출력 전송 레지스터(38), DRAM 출력 전송 레지스터(40)이 존재한다.
GRPs(32)는 범용 프로그래밍에 사용된다. GPRs(32)는 오직 프로그램 제어하에서 판독 및 기록된다. GPRs(32)는 인스트럭션에서 소스로서 사용되는 경우 실행 데이터경로(44)에 피연산자를 제공한다. 인스트럭션에서 수신지로서 사용되는 경우, GPRs(32)는 실행 데이터(44)의 결과로 기록된다. 프로그래밍 엔진(16a)은, 프로그래밍 엔진(16a)에서부터 프로그래밍 엔진(16a)에 외부적인 위치, 예를 들어 DRAM 메모리(14a), SRAM 메모리(14b) 등으로 데이터를 전송하는데 사용되는 I/O 전송 레지스터(34,36,38 및 40)도 포함한다.
로컬 메모리(42)도 사용된다. 로컬 메모리(42)는 프로그래밍 엔진(16a) 내에 위치하는 어드레싱 가능한 저장소이다. 로컬 메모리(42)는 오직 프로그램 제어 하에서 기록 및 판독된다. 로컬 메모리(42)는 모든 프로그래밍 엔진(16a-16h)에 의해 공유되는 변수도 포함한다. 공유 변수는 기능적 파이프라인 단계 동안 다양한 할당된 작업에서 프로그래밍 엔진(16a-16h)에 의해 수정되며, 이는 다음에 설명된다. 공유 변수는 판독-수정-기록 시간을 정의하는 임계 영역(critical section)을 포함한다. 컴퓨팅 프로세싱 시스템(10)에서 임계 영역의 구현 및 사용은 이하에서 설명된다.
프로그래밍 엔진 문맥
프로그래밍 엔진(16) 각각은 8개 문맥의 멀티쓰레드식 실행을 지원한다. 이러한 이유는, 보다 많은 작업을 하기 전에 참조가 완료될 때까지 대기해야 하는 또 다른 쓰레드가 메모리 참조를 발행한 직후 하나의 쓰레드가 실행을 시작하도록 하기 위해서이다. 이러한 행위는 프로그래밍 엔진(16a)의 효율적인 하드웨어 실행을 유지하기 위해 중요한데, 그 이유는 메모리 대기 시간이 중요하기 때문이다. 달리 말하면, 하나의 쓰레드 실행이 지원되는 경우, 프로그래밍 엔진은, 다수의 싸이클이 참조가 완료되기를 대기하는 동안 유휴 상태가 되어 전체 계산량을 감소시킨다. 멀티-쓰레드식 실행은 몇몇쓰레드에 걸쳐 유용한 독립적 작업을 수행함으로써 메모리 대기 시간을 숨길 수 있게 해준다.
프로그래밍 엔진(16a-16h) 각각은 8개의 이용가능한 문맥을 갖는다. 효율적인 문맥 스와핑을 위해, 프로그래밍 엔진에서 8개의 문맥 각각은 자기 자신의 레지스터 세트, 프로그램 카운터 및 문맥 특정 로컬 레지스터를 갖는다. 문맥마다 복사본을 가짐으로써 각 문맥 스와핑을 위해 공유 메모리 및 프로그래밍 엔진 레지스터로 또한 그로부터 문맥 특정 정보를 이동시킬 필요가 없어진다. 고속의 문맥 스와핑은 하나의 문맥이 다른 문맥이 완료할 I/O, 전형적으로 외부 메모리 액세스 또는 또 다른 문맥 또는 하드웨어 유닛으로부터 신호를 대기하는 동안 계산을 수행할 수 있게 해준다.
따라서, 도 3은 문맥에 대한 상태 전환(100)을 예시한다. 8개의 문맥 각각은 위에서 설명한 상태들 중 하나에 존재할 것이다. 기껏해야, 한번에 하나의 문맥이 실행 상태에 존재할 수 있고 임의의 수의 문맥은 임의의 다른 상태에 존재할 수 있다.
1) 상호작용 상태(100a)- 일부 애플리케이션은 8개 문맥 모두를 필요하지 않을 수도 있기 때문에, 문맥은, 그것의 CTX_Enable(문맥 인에이블) 제어 및 상태 레지스터(CSR) 인에이블 비트가 '0'일 경우 상호작용 상태에 존재한다.
2) 준비 상태(100b)- 이 상태에서는, 비록 문맥이 실행할 준비가 되어 있을 지라도, 문맥은 진행하지 않는데, 그 이유는 다른 문맥이 여전히 실행되기 있기 때문이다. 실행 문맥이 수면 상태로 진행하는 경우, 프로그래밍 엔진의 문맥 중재자는 준비 상태에 있는 모든 문맥들 사이에서 실행 상태로 진행하는 다음 문맥을 선택한다. 중재는 라운드 로빈(round robin)이다.
3) 실행 상태(100c)- 문맥은, 그것의 문맥 번호가 Active_CTX_Status CSR에 존재하는 경우 실행 단계에 존재한다. 실행 문맥의 프로그래밍 카운터(도시되어있지 않음)는 제어 저장소(50)로부터 인스트럭션을 인출하는데 사용된다. 문맥은 그것이 수면 상태로 진입하도록 하는 인스트럭션을 수행하기까지 실행 상태로 유지된다. 기껏 해야, 임의의 시간에 하나의 문맥이 실행 상태에 존재할 수 있다.
4) 수면 상태(100d)- 문맥은, CTX_#_Wakeup_Events CSR에서 지정된 외부 이벤트(들)가 발생할 동안 대기하되, #은 문맥 #0 내지 #7과 같은 8개의 상이한 문맥들, 전형적으로 I/O 액세스를 나타내나 여기에 제한되는 것은 아니다. 이 상태에 있어서, 문맥은 실행 단계로 진입하도록 중재하지는 않는다.
도 2로 돌아가면, 각 프로그래밍 엔진(22)은 이하에서 설명되는 32 비트 데이터경로 레지스터의 4개의 유형을 포함한다. 256개의 범용 레지스터, 128개의 다음 이웃 레지스터, 512개의 전송 레지스터 및 640개의 로컬 메모리의 32비트 워드가 그것이다.
범용 레지스터
프로그래밍 엔진(16a)은 범용 프로그래밍에 사용되는 범용 레지스터(GPRs)(52)를 포함한다. 그들은 오직 프로그램 제어 하에서 판독 및 기록된다. GPRs(52)는 인스트럭션에서 소스로 사용되는 경우 실행 데이터경로(56)에 피연산자를 제공한다. 인스트럭션에서 수신지로서 사용되는 경우, GPRs(52)는 실행 데이터경로(56)의 결과로 기록된다. GPRs(52)는 도 3에 예시된 바와 같이 두 개의 뱅크, 즉 GPR A(52) 및 GPR B(52b)에 물리적으로 및 논리적으로 포함된다.
전송 레지스터
프로그래밍 엔진(16a)은 전송 레지스터(58 및 60)를 포함한다. 전송 레지스터(34,36,38 및 40)는 프로그래밍 엔진(16a) 및 프로그래밍 엔진에 외부적인 위치 예를 들어, DRAMs, SRAMs 등에 또한 그로부터 데이터를 전송하는데 사용된다. 도 2에 예시된 4개 유형의 전송 레지스터, 즉 입력 전송 레지스터 및 출력 전송 레지스터가 존재한다.
입력 전송 레지스터는 인스트럭션에서 소스로서 사용되는 경우 실행 데이터경로에 피연산자를 제공한다. 출력 전송 레지스터는 인스트럭션에서 수신지로 사용되는 경우 실행 데이터경로(44)의 결과로 기록된다.
로컬 제어 및 상태 레지스터(CSRs)
로컬 제어 및 상태 레지스터(CSRs)(66)는 실행데이터 경로(56)에 외적이고 특정 목적 정보를 포함한다. 그들은 특정 인스트럭션(local_csr_rd 및 local_csr_wr)에 의해 판독 및 기록될 수 있고 전형적으로 데이터경로 레지스터보다 적은 빈도로 액세스된다.
다음 이웃 레지스터
프로그래밍 엔진(16a)은 128개의 다음 이웃(NN) 레지스터(54)도 포함한다. 각 NN 레지스터(54)도 인스트럭션에서 소스로 사용되는 경우 실행 데이터경로(44)에 피연산자를 제공한다. NN 레지스터(54)는 인접 프로그래밍 엔진, 여기에 제한되지 않는 외부 엔티티에 의해 또는 NN 레지스터(54)가 상주하는 동일한 프로그래밍 엔진(16a)에 의해 기록된다. 특정 레지스터는, 레지스터 번호가 인스트럭션에서 엔코딩되는 문맥 관련 연산에 의해 선택되거나, 또는 CSR 레지스터에서 예를 들어 NN_Put(NN 기록 어드레스) 및 NN-Get(NN 판독 어드레스)를 통해 링 연산(ring operation)으로서 선택된다.
NN_Put 레지스터는 이전 이웃 프로그래밍 엔진이 수신지로서 NN_Put를 갖는 인스트럭션을 실행하는 경우 사용된다. 이 레지스터의 값에 의해 선택된 NN 레지스터(54)는 기록되고, 그런 다음 NN_Put의 값은 증가된다(127개의 값은 0으로 감싸진다(wraps back)). 이 레지스터의 값은 NN_Get 레지스터의 값과 비교되어 NN_Full 및 NN_Empty 상태 신호를 언제 가정할 지를 결정한다.
NN_Get 레지스터는 NN 레지스터(54)가 인스트럭션의 소스 필드에서 지정되는 소스로서 액세스되는 경우 사용된다. 이 레지스터의 값에 의해 선택된 NN 레지스터(54)는 판독되고, 그런 다음 NN_Put의 값은 증가된다(127개의 값은 0으로 감싸진다). 이 레지스터의 값은 NN_Put 레지스터의 값과 비교되어 NN_Full 및 NN_Empty 상태 신호를 언제 가정할 지를 결정한다.
구체적으로, NN 레지스터(54)가 인스트럭션에서 수신지로서 사용되는 경우, 이 인스트럭션 결과 데이터는 프로그래밍 엔진(16a)으로부터, 전형적으로 또 다른 엔진, 인접 프로그래밍 엔진으로 보내진다. 또 한편으로, NN 레지스터(54)가 인스트럭션에서 수신지로서 사용되는 경우, 이 인스트럭션 결과 데이터는 프로그래밍 엔진(16a)에서 선택된 NN 레지스터(54)에 기록된다. 이 데이터는 NN 레지스터(54)가 수신지로서 사용되는 경우와 같이 프로그래밍 엔진(22f)로부터 전송되지 않는다. NN 레지스터(54)는 이하에서 설명되는 문맥 파이프라이닝 방법에서 사용된다.
로컬 메모리
프로그래밍 엔진(16a)은 로컬 메모리(42)에 640개의 32-비트 워드를 포함한다. 로컬 메모리(42)는 프로그래밍 엔진(16a)에 위치한 어드레스가능한 저장소이다. 로컬 메모리(42)는 오로지 프로그램 제어하에서 판독 및 제어된다. 로컬 메모리(42)는 실행 데이터경로(44)에 피연산자를 소스로서 공급하고, 결과를 수신지로서 수신한다. 선택된 특정 로컬 메모리 위치는 local_CSR_wre 인스트럭션에 의해 기록되는 LM-Addr 레지스터(53)들 중 하나의 값에 기반을 둔다. 문맥마다 두 개의 LM_Addr 레지스터(53)와 각각의 작업 복사본(working copy)이 존재한다. 문맥이 수면 상태(sleep state)(100d)로 진행하는 경우, 작업 복사본의 값은 LM_Addr의 문맥 복사본에 푸싱된다. 문맥이 실행 단계로 진행하는 경우, LM_Addr의 문맥 복사본의 값은 작업 복사본으로 이용된다. LM_Addr_0 또는 LM_Addr_1의 선택은 인스트럭션에서 선택된다. CTX_Enable [LM_Addr_0Global] 및/또는 CTX_Enable [LM_Addr_1_Global]을 설정함으로써 LM_Addrs 모두 또는 하나를 글로벌로서 사용할 수 있다. 글로벌로 사용되는 경우, 모든 문맥은 그들 자신의 문맥 특정 복사본 대신에 LM_Addr의 작업 복사본을 사용한다.
로컬 메모리(42)는 프로그래밍 엔진(16a-16h)에 의해 공유되는 변수도 포함한다. 공유 변수는 프로그래밍 엔진(16a-16h)의 의해 파이프라인 단계 동안 사용되는 다양한 할당된 작업에서 변경된다. 공유 변수는 그들의 판독-수정-기록 시간을 정의하는 임계 영역을 포함한다.
임계 영역
프로그래밍 엔진(16a-16h)의 파이프라인 단계는 공유 변수의 임계 영역과 뒤따른 패킷의 도착 시간 사이의 차이에 의해 정의되는 최소 분해능(minimum resolution)을 포함한다. 임계 영역에 할당된 시간은 파이프라인 단계의 최소 분해능을 결정하는 뒤따른 패킷의 도착 시간보다 작아야 한다. 변수를 수정하는 인스트럭션이 뒤따르고, 기록이 뒤따르는 메모리 판독의 대기 시간은 최소 크기 패킷에 대한 패킷 도착 레이트를 훨씬 초과한다. 그러므로, 임계 영역은 뒤따른 패킷의 도착 시간보다 작게 유지되어야 한다.
실행 데이터 경로
프로그래밍 엔진(16a)은 하나 또는 두 개의 피연산자를 취할 수 있고, 연산을 수행할 수 있으며 선택적으로 결과를 재기록할 수 있는 실행 데이터 경로(44)도 포함한다. 소스 및 수신지는 GPRs(32), 전송 레지스터(34,36,38 및 40), NN 레지스터(54) 및 로컬 메모리(42)일 수 있다. 연산은 시프트, 가산/감산, 논리, 곱셈, 바이트 정렬 및 제 1 일 비트 검색(find first one bit)이다. 실행 데이터 경로(44)는 콘텐츠 어드레스가능한 메모리(CAM)(64)도 포함한다.
콘텐츠 어드레스가능한 메모리(CAM)
도 4는 CAM 블록 다이아그램(102)을 도시한다. 프로그래밍 엔진(16a)은 연관된 제어 로직(104)을 갖는 16개의 엔트리 CAM(64)을 포함한다. 각 엔트리는 소스 피연산자와 비교될 수 있는 32 비트 값을 저장한다. 모든 엔트리는 병렬식으로 비교되고 룩업의 결과는 6비트 값이다. 6비트 결과는 4비트 엔트리 번호(106)와 연결된 2비트 코드로 구성된다. 가능한 룩업(108)의 결과는 두 개의 폴딩(two fold)이다. 제 1 결과는 미스(0)(110)이되 룩업 값은 CAM(64) 내에 존재하지 않고 엔트리 번호는 교체를 위해 제안된 엔트리로서 사용될 수 있는 가장적게 최근에 사용된(LRU) 엔트리이다. 제 2 결과는 히트(1)(112)이고 룩업 값은 CAM(64) 내에 존재하고 엔트리 번호는 매치가 이루어진 엔트리이다.
LRU 로직(104)은 CAM(64)에 대한 엔트리 사용의 시간 순서화된 리스트를 유지한다. 엔트리가 로딩되거나 룩업(108)과 매치되는 경우, 그것은 MRU(가장 많이 최근에 사용됨)로서 마킹된다. 미스를 나타내는 룩업은 LRU 리스트를 수정하지 않는다.
도 5를 참조하면, 예시적인 CAM 프로세스(120)가 도시되어 있다. 프로그래밍 엔진(16a)은 예를 들어, 여덟(8) 개의 활동 문맥 또는 쓰레드 상에서 동작하는 최근에 사용된 변수의 리스트를 한번에 저장하기 위해 LRU 교체 기법과 함께 16-엔트리 캐시 또는 CAM(64)을 이용한다. 쓰레드는 판독 단계(122) 및 수정 기록 단계(도시되어 있지 않음)를 이용하여 순서대로 실행된다. 판독 단계(122) 동안, 문맥은 변수를 요구하고 CAM(64)은 필요한 변수가 캐싱되어 있는지를 알기 위해 체킹된다(단계 124), CAM(64)이 히트를 나타내는 경우, 판독은 불필요하고 CAM(64)의 콘텐츠는 CAM 내의 변수 위치를 알려준다(단계 126). 또한, 이 문맥이 그것의 수정-기록 단계에 대해 활동적이되 이 문맥은 CAM(64)으로부터 직접 값을 판독(단계 128)하게 되는 경우 변수의 업데이트된 값은 캐시에 저장될 것이다.
또 다른 한편으로, CAM(64)이 판독 단계(122) 동안 미스를 나타내는 경우, 필요한 변수의 판독이 개시된다(단계 130). 따라서, 나머지 일곱(7) 개의 문맥의 실행 시간은 판독의 대기 시간을 완벽히 숨기기 위해 사용된다(단계 132). 또한, 변수는 이 문맥의 수정 기록 단계에서 이용가능하다(단계 132). 임계 영역의 기록 대기 시간은 회피되는데 그 이유는 변수가 최근에 사용된 경우 이미 CAM(64)에서 유효하기 때문이다. 다음으로, CAM은 기록 또는 업데이트된다(단계 134). CAM(64)의 콘텐츠는 LRU 캐싱된 변수의 위치를 제공하되, 새로운 변수는 이전에 사용된 변수를 오버라이딩한다(단계 136).
다음으로, 문맥은 CAM(64)으로부터 직접 값을 판독하고(단계 136), 문맥은 판독 단계(122)의 시작부분으로 리턴한다. 따라서, 각 프로그래밍 엔진은 파이프라인 단계가 되고, 패킷 프로세싱의 특별화된 작업을 수행하며, 또한 특정 작업에 사용된 문맥 또는 변수(들)를 모니터링한다.
문맥 파이프라이닝
도 6을 참조하면, 문맥 파이프라인(130) 흐름은 패킷 또는 셀의 프로세싱 작업의 특정 부분에 할당된 프로그래밍 엔진(16a-16h)을 도시한다. 특정 할당된 작업에 대한 문맥은 CAM(64a-64c)을 사용하여 프로그래밍 엔진 상에 유지된다. 패킷은 어셈블리 라인과 유사한 파이프라인식 방법으로 처리되되 NN 레지스터(54a-54c)를 사용하여 데이터를 하나의 프로그래밍 엔진에서 뒤따르는, 인접한 프로그래밍 엔진으로 전달한다. 데이터는 파이프라인의 일 단계(132a)에서부터 뒤따르는 단계(132b)로 그리고 단계(132b)에서 단계(132c)로 그리고 이와 같은 방식으로 전달된다. 다시 말해, 데이터는 프로세서 사이클에서 단계가 오버래핑되도록 하면서 파이프라인의 다음 단계로 전달된다. 특히, 하나의 인스트럭션이 실행되는 동안, 다음 인스트럭션은 인출될 수 있는데, 이는 하나 이상의 인스트럭션이 임의의 한번에 "파이프"로 구성될 수 있되, 각각은 상이한 단계에서 처리된다는 것을 의미한다.
예를 들어, 데이터는 NN 레지스터(54a-54c)를 사용하여 파이프라인에서 하나의 프로그래밍 엔진(16)에서 다음 프로그래밍 엔진(16)으로 전달될 수 있다. 파이프라인식 프로세싱을 구현하는 이 방법은 각 단계(132a-132c)마다 CAM(64a-64c)에서 포함된 정보가 파이프라인 단계의 모든 8개의 문맥에 대해 일관되게 유효하다는 장점을 갖고 있다. 문맥 파이프라인 방법은 프로세싱되는 패킷으로부터의 최소 데이터가 문맥 파이프라인(130)을 통해 진행하야 하는 경우에 사용될 수 있다.
다른 실시예
위의 예가 상세한 설명과 연계하여 설명되었지만, 앞선 설명은 본 발명의 범주를 예시할 뿐 제한하려 하지는 않고, 본 발명의 범주는 첨부한 청구항의 범주에의해 정의된다는 것을 이해할 것이다. 다른 측면, 장점 및 변경은 후속하는 청구항의 범주에 들어간다.

Claims (25)

  1. 패킷 프로세싱을 위한 작업들을 다수의 프로그래밍 엔진에 할당하는 단계와,
    상기 다수의 프로그래밍 엔진에 대응하는 프로그래밍 단계를 설정하는 단계와,
    상기 프로그래밍 단계 사이에 다수의 파이프라인을 설정하는 단계
    를 포함하는 방법.
  2. 제 1 항에 있어서,
    상기 다수의 프로그래밍 엔진 상에 상기 할당된 작업에 대한 문맥을 설정하는 단계를 더 포함하는 방법.
  3. 제 2 항에 있어서,
    상기 할당된 작업에 대한 문맥을 설정하는 단계는 소프트웨어 제어된 캐시를 사용하는 단계를 포함하는 방법.
  4. 제 3 항에 있어서,
    상기 소프트웨어 제어된 캐시는 CAM(Content Addressable Memory)인 방법.
  5. 제 1 항에 있어서,
    상기 다수의 프로그래밍 엔진 각각에 상주하는 적어도 하나의 다음 이웃 레지스터를 형성하는 단계를 더 포함하는 방법.
  6. 제 5 항에 있어서,
    상기 다수의 파이프라인을 설정하는 단계는 상기 다수의 프로그래밍 엔진 중 하나에 상주하는 적어도 하나의 다음 이웃 레지스터에서부터 상기 하나의 프로그래밍 엔진으로부터 인접한 프로그래밍 엔진에 상주하는 뒤따른 다음 이웃 레지스터(subsequent next neighbor register)로 데이터를 전송하는 단계를 포함하는 방법.
  7. 제 6 항에 있어서,
    상기 하나의 프로그래밍 엔진은 상기 파이프라인의 현재 동작하는 프로그래밍 단계를 유지하고 상기 이웃 프로그래밍 엔진은 상기 다수의 파이프라인 중 뒤따른 프로그래밍 단계를 유지하는 방법.
  8. 제 1 항에 있어서,
    상기 다수의 프로그래밍 엔진에 의해 상기 프로그래밍 단계에 사용되는 상기 할당된 작업에서 변수를 수정하는 단계를 더 포함하는 방법.
  9. 제 8 항에 있어서,
    상기 변수는 상기 다수의 프로그래밍 엔진의 상기 프로그래밍 단계에 의해 사용되는 공유 변수이고 상기 공유 변수의 판독 수정 기록 시간(read-modify-write time)을 정의하는 임계 영역(critical section)을 포함하는 방법.
  10. 제 9 항에 있어서,
    상기 공유 변수의 상기 임계 영역과 뒤따른 패킷의 도착 시간 사이의 차이에 의해서 정의되는 상기 프로그래밍 단계의 최소 분해능(minimum resolution)을 정의하는 단계를 더 포함하되, 상기 임계 영역은 상기 뒤따른 패킷의 상기 도착 시간보다 적은 방법.
  11. 제 4 항에 있어서,
    상기 다수의 프로그래밍 엔진 각각은 다수의 문맥을 동시에 실행하는 방법.
  12. 제 11 항에 있어서,
    상기 다수의 문맥은 순서대로 실행되는 방법.
  13. 제 12 항에 있어서,
    상기 순서는 판독 단계 및 기록 수정 단계를 포함하는 방법.
  14. 제 13 항에 있어서,
    상기 CAM은 가장 적게 최근에 사용된 변수를 모니터링하는 다수의 엔트리를 포함하는 방법.
  15. 제 14 항에 있어서,
    상기 판독 단계는 상기 CAM에서 공유 변수의 상기 캐시 상태를 결정하는 단계와 상기 공유 변수가 상기 CAM에 캐싱되어 있는 경우 상기 공유 변수에 대한 값을 업데이트하는 단계를 포함하는 방법.
  16. 제 14 항에 있어서,
    상기 판독 단계는 상기 다수의 문맥 중 적어도 하나에서 로컬 메모리로부터의 상기 공유 변수의 판독을 실행하는 방법.
  17. 제 16 항에 있어서,
    상기 남아있는 다수의 문맥은 패킷 프로세싱을 위해 할당된 다른 작업을 실행함으로써 상기 판독의 대기 시간(latency time)을 숨기는(hide) 방법.
  18. 제 16 항에 있어서,
    상기 공유 변수는 상기 CAM에 캐싱되어 있고 상기 다수의 문맥들 중 적어도 하나의 상기 수정 판독 단계에서 프로세싱이 가능한 방법.
  19. 다수의 프로그래밍 엔진에 할당된 패킷 프로세싱에 대한 특정 작업과,
    상기 다수의 프로그래밍 엔진에 대응하는 프로그래밍 단계와,
    상기 프로그래밍 단계 사이의 다수의 파이프라인과,
    상기 할당된 작업을 위한 상기 다수의 프로그래밍 엔진에 대응하는 다수의문맥
    을 포함하는 다수의 프로그래밍 엔진을 포함하는 프로세서.
  20. 제 19 항에 있어서,
    상기 다수의 프로그래밍 엔진 각각은, 현재 실행되는 프로그래밍 엔진에 상주하는 다음 이웃 레지스터로부터 인접한 프로그래밍 엔진에 상주하는 뒤따른 다음 이웃 레지스터로 데이터를 전송하는 다음 이웃 레지스터를 더 포함하는 프로세서.
  21. 제 20 항에 있어서,
    상기 다수의 프로그래밍 엔진 각각은 CAM을 더 포함하는 프로세서.
  22. 제 21 항에 있어서,
    상기 CAM은 가장 적게 최근에 사용된 변수를 모니터링하기 위한 다수의 엔트리를 포함하는 프로세서.
  23. 제 21 항에 있어서,
    상기 다수의 프로그래밍 엔진의 상기 프로그래밍 단계에 의해 사용되는 공유 변수를 더 포함하되, 상기 공유 변수는 상기 공유 변수의 상기 판독 수정 기록 시간을 정의하는 임계 영역을 포함하는 프로세서.
  24. 제 23 항에 있어서,
    상기 공유 변수의 임계 영역과 뒤따른 패킷의 도착 시간의 차이에 의해 정의되는 상기 프로그래밍 단계의 최소 분해능을 더 포함하는 프로세서.
  25. 제 21 항에 있어서,
    상기 다수의 문맥은 순서대로 실행되되 상기 순서는 판독 단계 및 기록 수정 단계를 포함하고, 상기 판독 단계는 상기 CAM에서 공유 변수의 상기 캐시 상태를 결정하는 단계와 상기 공유 변수가 상기 CAM에 캐시되어 있는 경우 상기 공유 변수에 대한 값을 업데이트하는 단계를 포함하며, 상기 판독 단계는 상기 다수의 문맥 중 적어도 하나에서 로컬 메모리로부터의 상기 공유 변수의 판독을 실행하는 프로세서.
KR1020037017289A 2002-01-25 2003-01-16 다수의 파이프라인을 이용해 패킷을 다수의 프로그래밍 엔진에 할당하는 방법, 프로세서, 컴퓨터 판독 가능 저장 매체 및 멀티프로세싱 시스템 KR100613923B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/057,723 2002-01-25
US10/057,723 US7181594B2 (en) 2002-01-25 2002-01-25 Context pipelines
PCT/US2003/001580 WO2003065207A2 (en) 2002-01-25 2003-01-16 Pipelines of multithreaded processor cores for packet processing

Publications (2)

Publication Number Publication Date
KR20040017251A true KR20040017251A (ko) 2004-02-26
KR100613923B1 KR100613923B1 (ko) 2006-08-18

Family

ID=27609476

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020037017289A KR100613923B1 (ko) 2002-01-25 2003-01-16 다수의 파이프라인을 이용해 패킷을 다수의 프로그래밍 엔진에 할당하는 방법, 프로세서, 컴퓨터 판독 가능 저장 매체 및 멀티프로세싱 시스템

Country Status (11)

Country Link
US (1) US7181594B2 (ko)
EP (1) EP1481323B1 (ko)
KR (1) KR100613923B1 (ko)
CN (1) CN100440151C (ko)
AT (1) ATE375552T1 (ko)
AU (1) AU2003209290A1 (ko)
CA (1) CA2473551C (ko)
DE (1) DE60316774T2 (ko)
HK (1) HK1072298A1 (ko)
TW (1) TWI231914B (ko)
WO (1) WO2003065207A2 (ko)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2001016702A1 (en) 1999-09-01 2001-03-08 Intel Corporation Register set used in multithreaded parallel processor architecture
US7681018B2 (en) * 2000-08-31 2010-03-16 Intel Corporation Method and apparatus for providing large register address space while maximizing cycletime performance for a multi-threaded register file set
US20020053017A1 (en) * 2000-09-01 2002-05-02 Adiletta Matthew J. Register instructions for a multithreaded processor
US6934951B2 (en) * 2002-01-17 2005-08-23 Intel Corporation Parallel processor with functional pipeline providing programming engines by supporting multiple contexts and critical section
US7437724B2 (en) * 2002-04-03 2008-10-14 Intel Corporation Registers for data transfers
US20040034858A1 (en) * 2002-08-14 2004-02-19 Kushlis Robert J. Programming a multi-threaded processor
US9330060B1 (en) * 2003-04-15 2016-05-03 Nvidia Corporation Method and device for encoding and decoding video image data
US20060236011A1 (en) * 2005-04-15 2006-10-19 Charles Narad Ring management
US20070044103A1 (en) * 2005-07-25 2007-02-22 Mark Rosenbluth Inter-thread communication of lock protected data
US7853951B2 (en) * 2005-07-25 2010-12-14 Intel Corporation Lock sequencing to reorder and grant lock requests from multiple program threads
US20070124728A1 (en) * 2005-11-28 2007-05-31 Mark Rosenbluth Passing work between threads
US7624250B2 (en) 2005-12-05 2009-11-24 Intel Corporation Heterogeneous multi-core processor having dedicated connections between processor cores
US20070140282A1 (en) * 2005-12-21 2007-06-21 Sridhar Lakshmanamurthy Managing on-chip queues in switched fabric networks
US20070245074A1 (en) * 2006-03-30 2007-10-18 Rosenbluth Mark B Ring with on-chip buffer for efficient message passing
JP5256685B2 (ja) * 2007-10-18 2013-08-07 日本電気株式会社 情報処理装置
US7926013B2 (en) * 2007-12-31 2011-04-12 Intel Corporation Validating continuous signal phase matching in high-speed nets routed as differential pairs
US20110224549A1 (en) * 2008-11-14 2011-09-15 Hitachi Medical Corporation Ultrasonic diagnostic apparatus and method for generating ultrasonic images
US8127262B1 (en) * 2008-12-18 2012-02-28 Xilinx, Inc. Communicating state data between stages of pipelined packet processor
US10534719B2 (en) 2017-07-14 2020-01-14 Arm Limited Memory system for a data processing network
US10613989B2 (en) 2017-07-14 2020-04-07 Arm Limited Fast address translation for virtual machines
US10353826B2 (en) * 2017-07-14 2019-07-16 Arm Limited Method and apparatus for fast context cloning in a data processing system
US10489304B2 (en) 2017-07-14 2019-11-26 Arm Limited Memory address translation
US10592424B2 (en) 2017-07-14 2020-03-17 Arm Limited Range-based memory system
US10467159B2 (en) 2017-07-14 2019-11-05 Arm Limited Memory node controller
US10565126B2 (en) 2017-07-14 2020-02-18 Arm Limited Method and apparatus for two-layer copy-on-write
US10884850B2 (en) 2018-07-24 2021-01-05 Arm Limited Fault tolerant memory system

Family Cites Families (109)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3373408A (en) 1965-04-16 1968-03-12 Rca Corp Computer capable of switching between programs without storage and retrieval of the contents of operation registers
US3478322A (en) 1967-05-23 1969-11-11 Ibm Data processor employing electronically changeable control storage
BE795789A (fr) 1972-03-08 1973-06-18 Burroughs Corp Microprogramme comportant une micro-instruction de recouvrement
IT986411B (it) 1973-06-05 1975-01-30 Olivetti E C Spa Sistema per trasferire il control lo delle elaborazioni da un primo livello prioritario ad un secondo livello prioritario
US4130890A (en) 1977-06-08 1978-12-19 Itt Industries, Inc. Integrated DDC memory with bitwise erase
JPS56164464A (en) 1980-05-21 1981-12-17 Tatsuo Nogi Parallel processing computer
US4400770A (en) 1980-11-10 1983-08-23 International Business Machines Corporation Cache synonym detection and handling means
CA1179069A (en) 1981-04-10 1984-12-04 Yasushi Fukunaga Data transmission apparatus for a multiprocessor system
US4745544A (en) 1985-12-12 1988-05-17 Texas Instruments Incorporated Master/slave sequencing processor with forced I/O
US5297260A (en) 1986-03-12 1994-03-22 Hitachi, Ltd. Processor having a plurality of CPUS with one CPU being normally connected to common bus
US5142683A (en) 1987-03-09 1992-08-25 Unisys Corporation Intercomputer communication control apparatus and method
US4866664A (en) 1987-03-09 1989-09-12 Unisys Corporation Intercomputer communication control apparatus & method
JP2572136B2 (ja) 1988-03-14 1997-01-16 ユニシス コーポレーシヨン 多重処理データシステムにおけるロック制御方法
US5155854A (en) 1989-02-03 1992-10-13 Digital Equipment Corporation System for arbitrating communication requests using multi-pass control unit based on availability of system resources
US5155831A (en) 1989-04-24 1992-10-13 International Business Machines Corporation Data processing system with fast queue store interposed between store-through caches and a main memory
US5168555A (en) 1989-09-06 1992-12-01 Unisys Corporation Initial program load control
US5263169A (en) 1989-11-03 1993-11-16 Zoran Corporation Bus arbitration and resource management for concurrent vector signal processor architecture
DE3942977A1 (de) 1989-12-23 1991-06-27 Standard Elektrik Lorenz Ag Verfahren zum wiederherstellen der richtigen zellfolge, insbesondere in einer atm-vermittlungsstelle, sowie ausgangseinheit hierfuer
EP0446721B1 (en) 1990-03-16 2000-12-20 Texas Instruments Incorporated Distributed processing memory
US5390329A (en) 1990-06-11 1995-02-14 Cray Research, Inc. Responding to service requests using minimal system-side context in a multiprocessor environment
US5404482A (en) 1990-06-29 1995-04-04 Digital Equipment Corporation Processor and method for preventing access to a locked memory block by recording a lock in a content addressable memory with outstanding cache fills
US5432918A (en) 1990-06-29 1995-07-11 Digital Equipment Corporation Method and apparatus for ordering read and write operations using conflict bits in a write queue
US5347648A (en) 1990-06-29 1994-09-13 Digital Equipment Corporation Ensuring write ordering under writeback cache error conditions
AU630299B2 (en) 1990-07-10 1992-10-22 Fujitsu Limited A data gathering/scattering system in a parallel computer
US5367678A (en) 1990-12-06 1994-11-22 The Regents Of The University Of California Multiprocessor system having statically determining resource allocation schedule at compile time and the using of static schedule with processor signals to control the execution time dynamically
US5255239A (en) 1991-08-13 1993-10-19 Cypress Semiconductor Corporation Bidirectional first-in-first-out memory device with transparent and user-testable capabilities
US5623489A (en) 1991-09-26 1997-04-22 Ipc Information Systems, Inc. Channel allocation system for distributed digital switching network
US5392412A (en) 1991-10-03 1995-02-21 Standard Microsystems Corporation Data communication controller for use with a single-port data packet buffer
GB2260429B (en) 1991-10-11 1995-05-24 Intel Corp Versatile cache memory
US5392391A (en) 1991-10-18 1995-02-21 Lsi Logic Corporation High performance graphics applications controller
EP0538817B1 (en) 1991-10-21 2001-07-25 Kabushiki Kaisha Toshiba High-speed processor capable of handling multiple interrupts
US5452437A (en) 1991-11-18 1995-09-19 Motorola, Inc. Methods of debugging multiprocessor system
US5442797A (en) 1991-12-04 1995-08-15 Casavant; Thomas L. Latency tolerant risc-based multiple processor with event driven locality managers resulting from variable tagging
JP2823767B2 (ja) 1992-02-03 1998-11-11 松下電器産業株式会社 レジスタファイル
US5459842A (en) 1992-06-26 1995-10-17 International Business Machines Corporation System for combining data from multiple CPU write requests via buffers and using read-modify-write operation to write the combined data to the memory
DE4223600C2 (de) 1992-07-17 1994-10-13 Ibm Mehrprozessor-Computersystem und Verfahren zum Übertragen von Steuerinformationen und Dateninformation zwischen wenigstens zwei Prozessoreinheiten eines Computersystems
DE69422448T2 (de) 1992-12-23 2001-08-23 Eta Sa Fabriques D Ebauches Gr Multi-tasking-steuerungsgerät mit geringem energieverbrauch
JPH08506198A (ja) 1993-01-22 1996-07-02 ユニバーシティ コーポレイション フォーアトモスフェリック リサーチ 多重パイプライン多重プロセッサシステム
US5404464A (en) 1993-02-11 1995-04-04 Ast Research, Inc. Bus control system and method that selectively generate an early address strobe
US5448702A (en) 1993-03-02 1995-09-05 International Business Machines Corporation Adapters with descriptor queue management capability
US6311286B1 (en) 1993-04-30 2001-10-30 Nec Corporation Symmetric multiprocessing system with unified environment and distributed system functions
CA2122182A1 (en) 1993-05-20 1994-11-21 Rene Leblanc Method for rapid prototyping of programming problems
CA2107299C (en) 1993-09-29 1997-02-25 Mehrad Yasrebi High performance machine for switched communications in a heterogenous data processing network gateway
US5446736A (en) 1993-10-07 1995-08-29 Ast Research, Inc. Method and apparatus for connecting a node to a wireless network using a standard protocol
US5450351A (en) 1993-11-19 1995-09-12 International Business Machines Corporation Content addressable memory implementation with random access memory
US5490204A (en) 1994-03-01 1996-02-06 Safco Corporation Automated quality assessment system for cellular networks
US5835755A (en) 1994-04-04 1998-11-10 At&T Global Information Solutions Company Multi-processor computer system for operating parallel client/server database processes
JP3547482B2 (ja) 1994-04-15 2004-07-28 株式会社日立製作所 情報処理装置
US5542088A (en) 1994-04-29 1996-07-30 Intergraph Corporation Method and apparatus for enabling control of task execution
US5721870A (en) 1994-05-25 1998-02-24 Nec Corporation Lock control for a shared main storage data processing system
US5544236A (en) 1994-06-10 1996-08-06 At&T Corp. Access to unsubscribed features
US5574922A (en) 1994-06-17 1996-11-12 Apple Computer, Inc. Processor with sequences of processor instructions for locked memory updates
US5781774A (en) 1994-06-29 1998-07-14 Intel Corporation Processor having operating modes for an upgradeable multiprocessor computer system
JP3810449B2 (ja) 1994-07-20 2006-08-16 富士通株式会社 キュー装置
JP3169779B2 (ja) * 1994-12-19 2001-05-28 日本電気株式会社 マルチスレッドプロセッサ
US5550816A (en) 1994-12-29 1996-08-27 Storage Technology Corporation Method and apparatus for virtual switching
US5784712A (en) 1995-03-01 1998-07-21 Unisys Corporation Method and apparatus for locally generating addressing information for a memory access
US5649157A (en) 1995-03-30 1997-07-15 Hewlett-Packard Co. Memory controller with priority queues
US5886992A (en) 1995-04-14 1999-03-23 Valtion Teknillinen Tutkimuskeskus Frame synchronized ring system and method
US5592622A (en) 1995-05-10 1997-01-07 3Com Corporation Network intermediate system with message passing architecture
JPH08320797A (ja) 1995-05-24 1996-12-03 Fuji Xerox Co Ltd プログラム制御システム
US5828746A (en) 1995-06-07 1998-10-27 Lucent Technologies Inc. Telecommunications network
US5828863A (en) 1995-06-09 1998-10-27 Canon Information Systems, Inc. Interface device connected between a LAN and a printer for outputting formatted debug information about the printer to the printer
US5613071A (en) 1995-07-14 1997-03-18 Intel Corporation Method and apparatus for providing remote memory access in a distributed memory multiprocessor system
US5680641A (en) 1995-08-16 1997-10-21 Sharp Microelectronics Technology, Inc. Multiple register bank system for concurrent I/O operation in a CPU datapath
US5940612A (en) 1995-09-27 1999-08-17 International Business Machines Corporation System and method for queuing of tasks in a multiprocessing system
US5689566A (en) 1995-10-24 1997-11-18 Nguyen; Minhtam C. Network with secure communications sessions
US5809530A (en) 1995-11-13 1998-09-15 Motorola, Inc. Method and apparatus for processing multiple cache misses using reload folding and store merging
KR0150072B1 (ko) 1995-11-30 1998-10-15 양승택 병렬처리 컴퓨터 시스템에서의 메모리 데이타 경로 제어장치
US5796413A (en) 1995-12-06 1998-08-18 Compaq Computer Corporation Graphics controller utilizing video memory to provide macro command capability and enhanched command buffering
US5940866A (en) 1995-12-13 1999-08-17 International Business Machines Corporation Information handling system having a local address queue for local storage of command blocks transferred from a host processing side
US5699537A (en) 1995-12-22 1997-12-16 Intel Corporation Processor microarchitecture for efficient dynamic scheduling and execution of chains of dependent instructions
EP0870386B1 (de) 1995-12-29 2000-04-12 Tixi.Com GmbH Telecommunication Verfahren und mikrocomputersystem zur automatischen, sicheren und direkten datenübertragung
US5761507A (en) 1996-03-05 1998-06-02 International Business Machines Corporation Client/server architecture supporting concurrent servers within a server with a transaction manager providing server/connection decoupling
US5809235A (en) 1996-03-08 1998-09-15 International Business Machines Corporation Object oriented network event management framework
US5784649A (en) 1996-03-13 1998-07-21 Diamond Multimedia Systems, Inc. Multi-threaded FIFO pool buffer and bus transfer control system
US5797043A (en) 1996-03-13 1998-08-18 Diamond Multimedia Systems, Inc. System for managing the transfer of data between FIFOs within pool memory and peripherals being programmable with identifications of the FIFOs
KR100219597B1 (ko) 1996-03-30 1999-09-01 윤종용 씨디-롬 드라이브에서의 큐잉 제어 방법
US5956518A (en) * 1996-04-11 1999-09-21 Massachusetts Institute Of Technology Intermediate-grain reconfigurable processing device
US5946487A (en) 1996-06-10 1999-08-31 Lsi Logic Corporation Object-oriented multi-media architecture
KR980004067A (ko) 1996-06-25 1998-03-30 김광호 멀티프로세서 시스템의 데이터 송수신장치 및 방법
JP3541335B2 (ja) 1996-06-28 2004-07-07 富士通株式会社 情報処理装置及び分散処理制御方法
US5937187A (en) 1996-07-01 1999-08-10 Sun Microsystems, Inc. Method and apparatus for execution and preemption control of computer process entities
US6023742A (en) 1996-07-18 2000-02-08 University Of Washington Reconfigurable computing architecture for providing pipelined data paths
US5745913A (en) 1996-08-05 1998-04-28 Exponential Technology, Inc. Multi-processor DRAM controller that prioritizes row-miss requests to stale banks
US6058465A (en) 1996-08-19 2000-05-02 Nguyen; Le Trong Single-instruction-multiple-data processing in a multimedia signal processor
JP2970553B2 (ja) 1996-08-30 1999-11-02 日本電気株式会社 マルチスレッド実行方法
US5812868A (en) 1996-09-16 1998-09-22 Motorola Inc. Method and apparatus for selecting a register file in a data processing system
US5860158A (en) 1996-11-15 1999-01-12 Samsung Electronics Company, Ltd. Cache control unit with a cache request transaction-oriented protocol
US5905876A (en) 1996-12-16 1999-05-18 Intel Corporation Queue ordering for memory and I/O transactions in a multiple concurrent transaction computer system
US5854922A (en) 1997-01-16 1998-12-29 Ford Motor Company Micro-sequencer apparatus and method of combination state machine and instruction memory
US5961628A (en) 1997-01-28 1999-10-05 Samsung Electronics Co., Ltd. Load and store unit for a vector processor
US5742587A (en) 1997-02-28 1998-04-21 Lanart Corporation Load balancing port switching hub
US5905889A (en) 1997-03-20 1999-05-18 International Business Machines Corporation Resource management system using next available integer from an integer pool and returning the integer thereto as the next available integer upon completion of use
US5983274A (en) 1997-05-08 1999-11-09 Microsoft Corporation Creation and use of control information associated with packetized network data by protocol drivers and device drivers
US6006321A (en) * 1997-06-13 1999-12-21 Malleable Technologies, Inc. Programmable logic datapath that may be used in a field programmable device
US5887134A (en) 1997-06-30 1999-03-23 Sun Microsystems System and method for preserving message order while employing both programmed I/O and DMA operations
US5938736A (en) 1997-06-30 1999-08-17 Sun Microsystems, Inc. Search engine architecture for a high performance multi-layer switch element
US6170051B1 (en) * 1997-08-01 2001-01-02 Micron Technology, Inc. Apparatus and method for program level parallelism in a VLIW processor
US6014729A (en) 1997-09-29 2000-01-11 Firstpass, Inc. Shared memory arbitration apparatus and method
US5915123A (en) 1997-10-31 1999-06-22 Silicon Spice Method and apparatus for controlling configuration memory contexts of processing elements in a network of multiple context processing elements
US5948081A (en) 1997-12-22 1999-09-07 Compaq Computer Corporation System for flushing queued memory write request corresponding to a queued read request and all prior write requests with counter indicating requests to be flushed
US5970013A (en) 1998-02-26 1999-10-19 Lucent Technologies Inc. Adaptive addressable circuit redundancy method and apparatus with broadcast write
US6067300A (en) * 1998-06-11 2000-05-23 Cabletron Systems, Inc. Method and apparatus for optimizing the transfer of data packets between local area networks
US6327650B1 (en) * 1999-02-12 2001-12-04 Vsli Technology, Inc. Pipelined multiprocessing with upstream processor concurrently writing to local register and to register of downstream processor
US6745317B1 (en) * 1999-07-30 2004-06-01 Broadcom Corporation Three level direct communication connections between neighboring multiple context processing elements
WO2001016702A1 (en) * 1999-09-01 2001-03-08 Intel Corporation Register set used in multithreaded parallel processor architecture
US6625654B1 (en) * 1999-12-28 2003-09-23 Intel Corporation Thread signaling in multi-threaded network processor
US6665755B2 (en) * 2000-12-22 2003-12-16 Nortel Networks Limited External memory engine selectable pipeline architecture

Also Published As

Publication number Publication date
KR100613923B1 (ko) 2006-08-18
ATE375552T1 (de) 2007-10-15
HK1072298A1 (en) 2005-08-19
DE60316774T2 (de) 2008-08-28
WO2003065207A2 (en) 2003-08-07
EP1481323B1 (en) 2007-10-10
TWI231914B (en) 2005-05-01
WO2003065207A3 (en) 2004-05-27
CA2473551C (en) 2009-01-06
US7181594B2 (en) 2007-02-20
US20030145173A1 (en) 2003-07-31
DE60316774D1 (de) 2007-11-22
CN100440151C (zh) 2008-12-03
CA2473551A1 (en) 2003-08-07
AU2003209290A1 (en) 2003-09-02
TW200307214A (en) 2003-12-01
CN1820253A (zh) 2006-08-16
EP1481323A2 (en) 2004-12-01

Similar Documents

Publication Publication Date Title
KR100613923B1 (ko) 다수의 파이프라인을 이용해 패킷을 다수의 프로그래밍 엔진에 할당하는 방법, 프로세서, 컴퓨터 판독 가능 저장 매체 및 멀티프로세싱 시스템
US7437724B2 (en) Registers for data transfers
US6671827B2 (en) Journaling for parallel hardware threads in multithreaded processor
EP1236088B1 (en) Register set used in multithreaded parallel processor architecture
US5353418A (en) System storing thread descriptor identifying one of plural threads of computation in storage only when all data for operating on thread is ready and independently of resultant imperative processing of thread
US5499349A (en) Pipelined processor with fork, join, and start instructions using tokens to indicate the next instruction for each of multiple threads of execution
US5872985A (en) Switching multi-context processor and method overcoming pipeline vacancies
CA2391833C (en) Parallel processor architecture
US7546444B1 (en) Register set used in multithreaded parallel processor architecture
US6944850B2 (en) Hop method for stepping parallel hardware threads
US7240164B2 (en) Folding for a multi-threaded network processor
US20060179277A1 (en) System and method for instruction line buffer holding a branch target buffer
JP2004220070A (ja) コンテキスト切り替え方法及び装置、中央演算装置、コンテキスト切り替えプログラム及びそれを記憶したコンピュータ読み取り可能な記憶媒体
KR20040017822A (ko) 데이터 전송 방법, 시스템 및 컴퓨터 판독가능 매체
US7376950B2 (en) Signal aggregation
JPH1063502A (ja) プログラムによって命令をフェッチする命令キャッシュメモリ方式

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20121102

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20130801

Year of fee payment: 8

LAPS Lapse due to unpaid annual fee