KR101713815B1 - 고효율의 내장형 동종 멀티코어 플랫폼용 타일 기반 프로세서 구조 모델 - Google Patents

고효율의 내장형 동종 멀티코어 플랫폼용 타일 기반 프로세서 구조 모델 Download PDF

Info

Publication number
KR101713815B1
KR101713815B1 KR1020127022959A KR20127022959A KR101713815B1 KR 101713815 B1 KR101713815 B1 KR 101713815B1 KR 1020127022959 A KR1020127022959 A KR 1020127022959A KR 20127022959 A KR20127022959 A KR 20127022959A KR 101713815 B1 KR101713815 B1 KR 101713815B1
Authority
KR
South Korea
Prior art keywords
data
instruction
tile
data communication
instructions
Prior art date
Application number
KR1020127022959A
Other languages
English (en)
Other versions
KR20120140653A (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 KR20120140653A publication Critical patent/KR20120140653A/ko
Application granted granted Critical
Publication of KR101713815B1 publication Critical patent/KR101713815B1/ko

Links

Images

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/30181Instruction operation extension or modification
    • 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
    • G06F15/17337Direct connection machines, e.g. completely connected computers, point to point communication networks
    • 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
    • G06F15/17306Intercommunication techniques
    • G06F15/17325Synchronisation; Hardware support therefor
    • 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
    • G06F15/17337Direct connection machines, e.g. completely connected computers, point to point communication networks
    • G06F15/17343Direct connection machines, e.g. completely connected computers, point to point communication networks wherein the interconnection is dynamically configurable, e.g. having loosely coupled nearest neighbor architecture
    • 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/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7839Architectures of general purpose stored program computers comprising a single central processing unit with memory
    • G06F15/7842Architectures of general purpose stored program computers comprising a single central processing unit with memory on one IC chip (single chip microcontrollers)
    • 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
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • 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
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • 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
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • G06F9/3891Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute organised in groups of units sharing resources, e.g. clusters
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Multimedia (AREA)
  • Advance Control (AREA)
  • Multi Processors (AREA)

Abstract

본 발명은 복수의 명령어를 병렬로 수행하며 소위 데이터 통신 링크(DCL)라 불리우는 점대점 통신 링크와 함께 연결되는 프로세싱 엘리먼트를 포함하는 프로세서에 관한 것이다. 상기 명령어들은 그들 간의 데이터 통신을 위해 데이터 통신 링크를 이용하며, 이러한 통신을 실현하기 위해, 상기 명령어들은 그들의 피연산자를 취하며, 그들의 처리 결과를 기록하는 데이터 통신 링크를 특정화한다. 상기 데이터 통신 링크는 상기 명령어들의 수행을 동기화하며, 그들이 처리하는 데이터를 명시적으로 관리하도록 한다. 통신은 명시적으로 이루어지며, 지속 변수의 저장소로부터 분리된 임시 변수의 저장소를 구현하는데 사용된다.

Description

고효율의 내장형 동종 멀티코어 플랫폼용 타일 기반 프로세서 구조 모델 {A tile-based processor architecture model for high efficiency embedded homogeneous multicore platforms}
본 발명은 복수의 명령어를 동시에(병렬로)(inparallel) 수행하며 소위 데이터 통신 링크(DCL:Data Communication Link)라 불리우는 점대점(point-to-point) 통신 링크와 함께 연결되는 프로세싱 엘리먼트(processing elements)를 포함하는 프로세서에 관한 것이다.
본 발명은 여러 개의 특정 기능을 대개 실시간으로 수행하게 되는 제약 조건 하에서도 동시에 수행할 수 있는, 큰 시스템의 일부로써 내장형(embedded) 컴퓨터 시스템이다. 이러한 내장형 시스템은 데이터 또는 신호의 처리뿐만 아니라 제어에도 사용된다. 상기 내장형 시스템은, 전기 통신(telecommunications), 자동차, 산업 제어, 동력 변환기, 군사용, 항공전자기기, 항공우주산업, 가전기기 및 일반 전자제품과 그 밖에 다른 여러 응용분야에 사용된다. 이러한 내장형 시스템의 예로는 휴대폰 송수화기 및 기지국, 탑재 레이더(on-board radars), 네트워크 라우터(network routers), 모뎀, 소프트웨어 기반 무선 통신 단말기(software-defined radio communication terminals), 엔진 제어기, 위성 운항 컴퓨터, GPS 위치측정 단말기, 세트톱 박스(set-top box), 또는 디지탈 카메라 등이 있다. 일반적으로, 내장형 시스템은 작동 환경 또는 신뢰성 요건(reliability requirements)에 의해 크게 제약된다. 엔진 제어, 오일 시추작업 또는 군사 응용분야에서는 극한의 온도 요건을 가질 수 있는 반면, 항공전자기기 및 항공우주산업 분야는 방사선에 노출된다. 휴대 전화 단말기는 배터리 수명에 의하여, 휴대전화의 기지국은 냉각 요건에 의하여 제약을 받는다.
내장형 어플리케이션(embedded applications)은 최종 사용자에게 여러 가지 기능을 제공하는 제품들 중의 일부이다. 일반적으로, 그러한 기능들은 각각의 새로운 제품 생성에 더 많은 기능 또는 증가된 정보처리량(throughput)을 제공함으로써 시장 수요를 추동(driving)하는 로드맵(roadmaps)에 의해 형성된다. 각각의 새로운 제품 생성에서의 이러한 기능 향상은 내장형 플랫폼상에서 수행되는 더욱 복잡한 프로그램으로 이어 지지만, 또한 단일 플랫폼상에 지원되는 매우 다양한 프로그램으로도 이어지게 된다. 새로운 기준은 보다 나은 계산능력을 의미하는 보다 많은 데이터 처리량을 필요로 하며, 또한, 보다 많은 처리량 요건에 도달할 수 있도록 진전된 알고리즘(algorithms)을 사용한다. 그 일 예로서, 가장 높은 정보처리량을 위한 적응형 채널 역량(adaptive channel capability)을 갖는 훨씬 복잡한 여러 입력 여러 출력의 직교 주파수 분할 다중화방식(multiple-input multiple-output orthogonal frequency-division multiplexing)에 대해 저속 데이터 전송을 위한 단순한 위상 편이 방식 파형(phase shift keying waveforms)을 이용하는 전기통신 표준화의 발전을 들 수 있다. 이러한 진전된 어플리케이션 및 알고리즘의 지원은 계산을 더욱 복잡하게 한다. 실제로, 단순한 영상 및 신호처리 어플리케이션이 초기의 표준으로 시행되면, 적은 명령어를 갖지만 매우 높은 반복 횟수(iteration count) 및 매우 단순한 제어 경로를 갖는 작은 커널(kernels)에서는 부하된 모든 계산이 다 처리되기 어렵다. 이러한 단순한 커널 중심의 알고리즘(kernel-oriented algorithms)은 고레벨의 병렬처리 기법(high-level parallelism)을 쉽게 활용하도록 하며 전용 하드웨어 가속기에서 시행하기에 쉽다. 새롭게 진전된 복합 표준에 의해, 병렬처리(parallelize)하기 어려운 순차 코드(sequential code)의 중요부들로 이어지는 제어부가 중요하게 되었다. 더욱이, 복잡한 제어 경로는, 전용 하드웨어를 사용하여 시행되는 것을 어렵게 하는 높은 계산 커널(computational kernels)내에 존재할 수도 있다. 또 하나의 주요한 변화의 방향은, 표준이 하드웨어 구현에 의해 완전히 형성되지는 않았지만 소프트웨어를 사용하여 다이나믹하게 구성되는 소프트웨어 기반 어플리케이션(software-defined applications)쪽으로 이루어졌다. 가장 많은 진전이 이루어진 것은 전기 통신 표준들에 대응하는 소프트웨어 기반 무선통신(software-defined radio) 분야이며, 이는 사용자 정의 기능들(custom functions)을 실현하기 위해 서비스를 다이나믹하게 구성하도록 하는 어플리케이션에 의해 호출되는 표준 소프트웨어 인터페이스를 제공하는 것을 목적으로 한다.
요컨대, 향후의 내장형 어플리케이션을 지원하기 위해서는 더욱 높은 계산 처리량을 갖는 더 복잡한 기능을 지원해야 한다. 또한, 실시간 제약하에서, 진전된 기능들과 완전한 소프트웨어 기반 어플리케이션에 이르는 정교한 알고리즘을 지원하기 위해서는 높은 프로그램 가능성(programmability capability)이 요구된다.
호스트 내장형 시스템(host embedded systems) 전용의 내장형 플랫폼은 그 주변 환경에 의해 제약된다. 또한, 1평방 센티미터의 실리콘 면이 이미 데스크탑 멀티코어 프로레서(desktop multicore processor)를 포함할 수 있으므로, 실리콘 칩의 계산 능력에 의해서 제한되지는 않는다. 내장형 시스템은 전체 전력 소모량에 의해 엄격히 제한된다. 실제로, 그 대부분은 제한된 배터리 용량을 갖는 배터리에 의해 작동되며, 배터리의 새로운 제품이 나와도 이에 대한 개선이 근소하게 이루어지고 있을 뿐이다. 배터리에 의해 작동되지 않은 시스템의 경우, 시스템의 전력 소모량에 의한 발열이 통합 환경에서는 다루기 어려운 냉각 문제로 이어진다. 그 예로서, 휴태폰 기지국의 경우, 안테나에 인접하여 통합된 상태에서 동시에 수천 건의 통신을 처리해야 함으로, 매우 집중적인 계산 부하(computation load)를 필요로 한다. 자동차 어플리케이션에서의 엔진 제어와 같은 높은 온도 환경에서 상기 냉각 능력은 더욱 제한된다. 이러한 문제점들로 인해, 전력 소비량은 향후의 내장형 계산 플랫폼이 다뤄야할 주요한 제약이다.
내장형 플랫폼(platforms)의 시행에 사용되는 실리콘 기술 또한 여러 가지 제약에 직면하고 있다. 기술의 수축(technology shrink)와 함께, 트랜지스터의 개수는 새로운 기술 노드(technology node)를 달성하는 기간을 18개월 내지 2년으로 늘어나게 한다. 문제는, 트랜지스터의 수축(transistor shrink)과 함께, 전력 소비량에 대한 트랜지스터의 스케일링(scaling)은 제한적이라는 점이다. 이는 각각의 새로운 세대의 제품 생성에서 트랜지스터 전력 소비량의 실질적인 감소 없이 이중 게이트 리소스(double gate resources)를 제공하는 고기능 FPGA 플랫폼에서 쉽게 관찰될 수 있는데, 상기 트랜지스터들 모두가 동일한 주파수에서 작동하는 경우라도 이들의 사용을 크게 제한하는 부품 전력 소비량의 전체적인 증가를 일으키게 된다. 이러한 트랜지스터 전력 감소의 부진은 65nm 이하의 초미세 기술 노드(deep submicron technology node)에서 더욱 좋지 않은 성적으로 나타난다. 이러한 노드 이후, 플랫폼 개선으로 인한 전력 소비량 증가 문제를 해결하기 위한 기술 향상에 더 이상 기대를 걸 수 없게 된다. 더욱이, 초미세 기술 노드는 지난 수십 년 동안의 경우에서와 같이 이지 게이트 카운트(easy gate count)의 제공자로서 이들의 사용을 더욱 제한한다. 이러한 제약 요소는 바로 공정 변화 및 누전 (process variations and leakages)이다. 이러한 공정 변화는 제조 위험성 (manufacturing hazards)으로 인해 단일 부품에 대한 트랜지스터들의 중요한 전기적 특성 변화로 이어진다. 이는, 플랫폼 레벨에서, 칩 전체에 걸친 단일 광폭 동기식 디자인(single wide synchronous design)이 매우 낮은 보존 주파수(conservative frequency)에서 작동하도록 한다. 누전은 비록 트랜지스터들이 사용되지 않더라도 트랜지스터의 전력 소비량을 증가시킨다. 이는 특히 전력 제한 내장형 어플리케이션에서 높은 문턱 전압(Vth)을 사용하도록 하며, 또한, Vdd의 제곱에 비례하는 동적 소비 전력을 감소시키기 위해 전원 공급 전압(power supply voltage)(Vdd)을 가능한한 줄이게 된다. 작동 주파수를 크게 경감시키는 높은 Vth를 유지시킨 상태에서 이러한 Vdd의 감소는 새로운 기술 노드에 따라 증가한다. 실제로, 내장형 프로세스의 경우, 90nm 노드 이래에 어느 것도 주파수 개선에 도움이 되지 않고 있다.
어플리케이션은, 상기 기술이 여전히 높은 트랜지스터 수를 제공하는 상태에서 높은 수준의 프로그램 가능성을 갖지만 소비전력은 크게 줄지 않는 더욱 높은 계산 정보처리율을 필요로 하며, 제한된 전력 예산(power budget)으로 인해 전체 소비 전력을 감소시키는 내장형 제약(embedded constraints)에 부응하지 못한다. 향후의 내장형 프로세싱 플랫폼에 대한 이러한 모순된 제약들은 다음과 같은 요건들로 이어진다:
● 복잡한 제어 경로 및 소프트웨어 기반 어플리케이션을 갖는 복합 알고리즘을 지원하기 위한 높은 프로그램 가능성
● 제한된 작동 주파수를 갖는 높은 계산 필요성을 지원하기 위한 고레벨의 병렬처리 기법(parallelism)
● 미래의 기술적 노드를 이용하면서 제한된 전력 예산으로 높은 계산 부하(compurtation load)를 지원하기 위한, 와트당 작업량(operations per watt) 면에서의 높은 전력 효율이다.
본 발명의 해결하려는 과제는 기존의 접근법과 관련 작업인 데이터플로우 구조와 내장형(embedded) 시스템용 동종 구조 및 전용가속기의 구조에 대하여 설명하면 다음과 같다.
기존의 접근법(Existing approaches)
내장형 플랫폼 요건을 준수하기 위해 오늘날 사용되고 있는 주요 해법은 이종 멀티코어(heterogeneous multicore)이다. 여기서, 코어는 프로세싱 리소스로서 GPP(general purpose processor) 디지털 신호 프로세서 및 전용 가속기일 수 있다. 멀티코어는, 제한된 주파수가 심지어 코프로세서(coprocessor)의 지원을 받는 단일 프로세서 코어를 사용하는 어플리케이션을 완벽히 지원하지 못하기 때문에, 전체적인 병렬성 실행을 향상시키는데 이용된다. 이질성(heterogeneity)은 전력 효율을 향상시키기 위한 도메인 기반 가속기(domain specific accelerators)의 사용에 의해 발생된다. 플랫폼은 버스(bus)로 연결된 가속기들에 의해 둘러싸인 GPP 둘레에 항상 구축되어 있다. 가속기들은 대부분 규정된 기능의 전용 하드웨어의 구성들로 이루어지거나, 또는 특정 알고리즘 도메인 내에서 제한된 설정 가능성(configuratibility)를 갖는다.
미래의 내장형 계산 플랫폼에 대한 사용이 제한되는 이러한 해법에 의해 제기된 4가지의 주요 쟁점이 있다. 그 첫째는 많은 도메인과 심지어 이러한 도메인 내의 많은 표준(standards)이 있으며 이로 인해 매우 많은 전용 가속기가 존재한다는 것이다. 정보처리량(throughput)과 실시간 제약에 따라 단일 도메인 내에서 여러 개의 다른 가속기를 사용할 수도 있다. 이종 멀티코어가 구비되는 두 번째 쟁점은 상기 이종 멀티코어가 정밀한 어플리케이션 세트를 위해 설계된 복합 플랫폼이라는 것이다. 따라서, 특히 더욱 진보된 표준을 위한 기존의 플랫폼 상에 새로운 어플리케이션을 효과적으로 이식(port)하는 것이 어려워지며, 이는, 예를 들어, 휴대전화의 핸드셋 플랫폼의 경우에서와 같이, 기능 변경에 따른 잦은 재설계의 원인이 된다. 세 번째 쟁점으로는 가속기의 수에 따라 증가는 실리콘 영역을 구비한다는 것이다. 이종 멀티코어들이 실제로 동시에 사용되지는 않기 때문에, 상기 이종 멀티코어는 실리콘을 거의 사용하지 않는다. 마지막으로 네 번째 쟁점은 이러한 이종 플랫폼을 프로그래밍(programming)할 때 발생된다. 이종 플랫폼들은 이종 부품들이 모여 그룹을 형성한 것이기 때문에, 이용 가능한 리소스(resources) 상에서 어플리케이션을 분할하기 위해서는 비용이 많이 드는 수동 작업을 필요로 한다. 더욱이, 이러한 분할 작업은 플랫폼에 의해 좌우되며, 부적절한 리소스에 대한 과제를 수행함으로 인한 과도한 비용 발생 없이 모든 리소스의 역량에 대한 혜택을 얻기 위해 매우 정밀하게 이루어져야 한다. 이는, 상기 플랫폼이 변경될 때, 분할 작업이 어플리케이션 레벨에서 낮은 어셈블리(assembly) 레벨로 다시 시작되도록 한다. 따라서, 플랫폼에 의해 좌우되는 분할 작업은 재사용성과 비용부담에 대한 문제를 야기한다.
이종 멀티코어와 함께, 다른 저전력 기술(low-power techniques)이 사용된다. 구조적 관점으로부터 가장 중요한 것은 아일랜드 기반(island-based) Vdd 스케일링이다. 이러한 방법으로, 칩은 다른 Vdd 및 속도로 작동할 수 있는 아일랜드들로 분할되어, 소비전력을 더욱 최소화하게 된다. 상기 Vdd는 각 아일랜드(island)의 실시간 제약에 따라 조절된다. 각 타일에서의 다양한 속도는 아일랜드 간의 통신 네트워크(inter-island communication network)에서의 지연 문제(latency issue)를 드러낸다. 지연 감내(latency tolerant)를 위해, 상기 칩의 다른 타일들이 메조크로노스 클럭 동기화(mesochronous clock synchronization)를 지원하는 FIFO (first in, first out) 통신 링크를 통해 연결된다. 이러한 아일랜드 기반 방식은 큰 칩에서의 프로세스 변화에 대응하기 위한 주요한 구조적 해결책이라 예견된다.
이러한 최근의 이종 멀티코어 방식은 빠르게 증가하고 있는 표준 요건 및 서비스들을 따라잡기가 매우 어렵다. 이종 멀티코어 해결책을 사용하여 구현되며, 매우 높은 생산 볼륨으로 인해 그 설계비용을 분할 상환할 수 있는 이점이 있는 휴대폰 핸드셋(handsets)의 플랫폼이라 할지라도 이러한 제약에 직면하게 된다. 매우 높은 생산 볼륨으로 운영되지 않는 다른 시장들의 경우, 전문 전자기기 어플리케이션에 서와 같이, 매우 비싼 실리콘, 설계 및 프로그래밍 비용으로 인해 이러한 방식을 취할 수 없다. 이러한 이유로 인해, 가속기들을 낮은 소비전력으로 유지하면서 그들의 프로그래밍 가능성을 향상시킴으로써 더 많은 융통성을 부여하기 하기 위한 중요한 연구 개발이 이루어지고 있다.
이러한 가속기의 융통성을 개선하기 위한 원만한 해결책으로 SIMD (single instruction, multiple data) 벡터 프로세서(vector processor) 구조가 있다. 이는 이미 탁상(desktop) 프로세싱(processing)에서의 멀티미디어 가속기로서 잠시 사용되었으며, 오늘날에는 비디오 및 기저대역 프로세싱을 위한 실제 내장형 플랫폼 제품에 사용된다. SIMD는 프로그램 가능성 및 전력 효율 간의 좋은 타협안을 제공하며, 또한 단일 가속기로 다양한 표준을 구현할 수 있다. 그럼에도 불구하고, 알고리즘이 벡터화될 필요가 있으며 컴파일러(compiler)에 의한 지원이 실험적이거나 또는 매우 특별한 언어 구조로 제한되기 때문에, 이를 프로그램하는 것은 매우 어렵다. 더욱이, 이는 모든 순차 코드 (sequential code)에 지원되지는 않는다. 이러한 이유로 인해, 이종 가속기와 연결되는 GPP 또는 VLIW와 항상 공동으로 사용되며, 또한 예상 성능을 얻기 위해서는 수작업에 의해 매우 정밀하게 프로그램되어야 한다. 어플리케이션이 더욱 복잡해지는 경우, 벡터화의 어려움으로 인해 상기 해결책의 성능 및 전력 효율이 제한된다.
전력 효율이 좋으며 프로그램 가능한 가속기를 위한 더욱 진보된 연구로서 재구성 가능한 콜스 그레인 프로세싱 어레이(coarse-grain reconfigurable processing arrays)가 있다. 이는 실시간으로 구성되는 사용자 정의 데이터 경로(custom datapaths)를 구현하도록 한다. 그 구성은 구성 콘트롤러(configuration controller) 및 구성 메모리 용량에 따라 각각의 클럭 싸이클(clock cycle)로 개정될 수 있다. 이들은 또한 예보제(predicated execution)를 사용하거나 또는 상기 구성 콘트롤러(controller)에서 이루어지는 제한된 브랜지(branch)의 지원을 받는다. 따라서, 가속기 상의 복잡한 제어 경로를 갖는 커널(kernels) 또는 순차 코드를 수행할 수 없게 된다. 상기 SIMD의 구성과 관련하여, 상기 코드의 제어 및 순차부들이 가속기에 인접한 이종 GPP 또는 VLIW 상에서 수행되며, 이들은 지루한 수작업 프로그래밍을 요하는 컴파일러(compiler)의 지원을 받지 못한다. 이들은, 단일 구성을 사용하는 경우, 제한된 커널 사이즈(kernel size)의 지원을 받거나, 또는 반복적인 구성 메모리의 로딩(loading)작업에서 중요한 소비전력의 오우버헤드(overhead)와 직면하게 된다. 구성 가능한 상호 접속 패브릭 (configurable interconnection fabric)의 전력 소모량은 재구성 가능성 역량의 오우버헤드(reconfigurability capability overhad)로 인해 높아진다. 더욱이, 재구성 가능한 상호 접속망(reconfigurable interconnection fabric)은 쉽게 파이프라인 구조를 이룰 수 없는 높은 팬아웃(fanout)과 와이어 길이로 인해 지연을 초래한다. 따라서, 이들의 작동 주파수는 매우 높지 않다.
이종 멀티코어 플랫폼 쟁점에 대한 마지막 주요 해결책은 동종 멀티코어 방식으로, 이는 본 작업에서 사용되는 방식이다. 동종 멀티코어는 최적 스칼라 (optimized scalar) RISC, DSP 또는 VLIW 프로세서와 같은 프로그램 가능한 프로세서 코어의 어레이들(arrays)로 구성된다. 상기 어레이의 프로세서들은 전용의 프로그램 가능한 또는 재구성 가능한 통신 네트워크를 통해 함께 연결된다. 이들은 양호한 컴파일러(compiler) 지원에 의한 혜택을 받음으로써, 다른 방식들과 비교하여, 매우 적은 수동 작업으로 어플리케이션을 이식할 수 있다. 이들의 균일한 ISA (instruction set architecture)는 정밀한 분할작업을 필요로 하지 않는다. 이들은 순차 코드를 수행하며 복잡한 제어 경로를 갖는 커널(kernels)을 지원할 수 있으며, 또한, 이들의 확장 가능한(scalable) 통신 네트워크로 인해, 일부 플랫폼에 대해 코어가 수백 개에 달할 수 있는 높은 수준의 병렬 처리기법을 활용할 수 있다. 그럼에도 불구하고, 이들의 매우 양호한 프로그램 가능성 및 확장 가능성(scalability)과 비교하였을 때, 프로그램 가능한 프로세서 코어의 사용으로 인하여 전력 효율의 측면에서 제한된다. 동종 멀티코어(homogeneous multicores)가 저전력의 단순한 스칼러(scalar) RISC 코어로 구성되는 경우, 이들은 상기 순차부들(sequential parts)에서 ILP를 활용할 수 없게 된다. 실제로, 이들은 어플리케이션의 순차부를 수행할 때 이들의 성능을 제한하는 ILP에 대해 매우 비효율적 인터코어(inter-core) 통신을 위한 통신 네트워크를 사용해야만 한다. 또한, 상기 인터코어 통신 네트워크의 오우버헤드로 인해 이들의 전력 효율은 저하된다.
결과적으로, 동종 멀티코어 방식은 이종 멀티코어에 의해 제기된 많은 쟁점들을 해소한다. 모든 어플리케이션 도메인에 대해 동일한 계산 패브릭(computing fabric)이 사용된다. 플랫폼 설계는 간편하고 포괄적이며 많은 어플리케이션에 대해 재사용된다. 어플리케이션이 무엇이든 모든 코어들이 사용될 수 있으며, 이는 양호한 실리콘 표면의 활용으로 이어진다. 이들은 쉽게 프로그램 가능하며 매우 적은 수작업을 요하는 양호한 컴파일러 및 툴(tool) 지원의 혜택을 받는다. 향후의 내장형 시스템에 의해 제기되는 프로세싱 플랫폼의 제약과 관련하여, 이들은 매우 높은 프로그래밍 역량을 가지며, 이들의 확장성은 매우 높은 수준의 병렬 처리기법을 활용할 수 있도록 하고, 또한 이들의 상대적인 간편성은 실시간 제약에서의 서비스 질을 보장하는데 필요한 WCET(worst case excution time)를 쉽게 구속하도록 한다. 그럼에도 불구하고, 비효율적인 통신 네트워크 및 프로그램 가능한 프로세서 코어의 사용은 내장형 플랫폼에서의 이들의 사용에 가장 큰 결점으로 지적되는 낮은 전력 효율로 이어진다.
동종 멀티코어 방식을 사용하여 이종 멀티코어 플랫폼의 제약을 해결하는 경우, 주의해야할 문제로는 매우 높은 전력 효율과 효율적인 인터코어 통신의 지원을 갖는 ILP를 활용할 수 있는 완전 프로그램 가능한 프로세서를 갖는다는 것이다.
관련 작업: 데이터플로우의 구조(dataflow architecutres)
데이터플로우의 구조는 수십 년 동안 연구 및 사용되고 있다 [78, 79. 80, 81, 82]. 완벽한 프로세서 코어로서 첫 번째로 알려진 구현물은 70년대 초반에 데니스(Dennis)에 의해 이루어졌다 [78]. 데이터플로우 구조는 파인 그레인 명령어 병렬 처리기법(fine-grain instruction-level parallelism)을 활용하여, 실행시 높은 레벨의 병렬성 얻는데 사용된다. 심지어 몇몇 구조에서는 코드의 순차 스레드(sequential thread)로부터 자동적으로 병렬 처리기법을 추출하기 위해 데이터플로우(dataflow)를 사용한다.
일반적인 데이터플로우 모델에서는, 가공된 데이터가 태그(tag)로 장식되어 토큰(tokens)을 형성하도록 한다. 이에 의해, 데이터가 가공될 수 있으며 중앙 콘트롤러를 사용하지 않고도 서로 구별될 수 있다. 명령어들은 피연산자(operands)로서 데이터 토큰(data tokens)을 소모하며, 그 결과로 토큰을 생성한다. 상기 명령어들은 데이터플로우 수행규칙(dataflow firing rule)을 따르는 프로세싱 엘리먼트(processing elements: PE) 상에서 동기적으로 수행된다. 이러한 규칙은 모든 피연산자가 이용가능할 때 명령어가 수행될 수 있도록 하는 것이다. 데이터 토큰(data tokens)은 생성된 이후 저장되며, 명령어에 의해 소모될 때까지 유지된다.
상기 데이터플로우 수행 모델을 구현하는 2가지 주요 구조 모델이 있다. 첫번째는 생성된 데이터를 소비자 명령어(consumer constructions)와 매치(match)시키기 위해 내용주소 지정 메모리(content addressed memories)에서 동적 태그(dynamic tag)를 비교하는 것이다. 두 번째 모델은 레지스터 테이블(register tables)에서 명시적 토큰 통신(explicit token communications)을 사용한다. 레지스터는 명령어와 연관되어 있으며 인텍스(indexes)에 의해 접속할 수 있다. 대부분의 다른 데이터플로우 구조는 아래에서 상세히 설명되는 이러한 두 가지 모델로부터 파생될 수 있다.
첫 번째 데이터플로우의 구조적 모델은 와이스(Weiss)와 스미스(Smith)[85]에 의해 발표되어 HPS[83]에 기술된 수퍼스칼라(superscalar) 프로세서 [83, 84, 85, 86]에 사용된다. 수퍼스칼라(superscalar)는 60년대에 IBM 컴퓨터에 도입된 토마술로 스케줄링(Tomasulo scheduling)[87]을 이용한다. 이는, 현재의 명령어를 수행하면서, 프로그램의 순차 수행 플로우에서 미리 선택된 명령어들 병렬적으로 수행함으로써 부동 소수점 연산기의 수행지연(floating point units execution latencies) 숨기는데 이용된다. 수퍼스칼라는 전용 유니트에서의 수행을 기다리는 명령어 큐(queues)를 이용한다. 프로세싱 엘리먼트에 의해 데이터가 생성되면, 그 데이터는 태그로 장식되고, 공통 데이터 버스(common data bus)에 의해 모든 명령어 큐로 전파된다. 상기 태그가 큐 내의 명령어 피연산자 태그와 매치되면, 그 데이터는 피연산자 위치에 복사된다. 명령어가 준비된 모든 피연산자를 갖는 경우, 그 명령어는 프로세싱 엘리먼트에서 수행될 수 있다. 큐에서 가장 오래된 명령어는 가장 높은 우선권을 갖는다. 가변 방식(variant scheme)은 별도의 데이터 레지스터 파일(data register file)을 사용하며, 복잡성을 줄이기 위해 오직 태그만이 명령어 큐에 저장된다. 이러한 후자의 방식은 추가적인 파이프라인 단계(pipeline stage)를 필요로 하며, 예를 들어, 알파 21264 프로세서에서 사용된다 [88].
이러한 데이터플로우 모델은 본 작업에 제공되는 데이터플로우 모델과 관련하여 두 개의 중요한 특성을 갖는다. 그 첫째로는, 모든 잠재적 소비자와 매치되는 것을 보장하기 위하여, 생성된 토큰은 모든 큐의 모든 입구에 제공되어야 한다. 따라서, 상기 공통 데이터 버스는 높은 팬아웃(fanout)을 가지는 긴 와이어로 형성되며, 이는 중요한 소비전력 문제로 연결된다. 두 번째 특성으로, 명령어가 일단 큐 내에 들어가면, 브랜치(branches)는 잘못된 경로에 속한 명령어들을 무효화하는 프레디키트(predicates)를 이용함으로써 지원될 수 있다. 더욱이, 이러한 프레디키트의 사용은 콘디셔널 브랜치(conditional branch)를 따르는 양쪽 경로의 명령어들을 로딩(load)해야하는 단점을 갖는다. 큐 내의 명령어들은 연속하는 순차 플로우의 일부로서 수행된다. 따라서, 이러한 브랜치는 상기 데이터플로우 수행 엔진(dataflow execution engine)에 의해 약하게 지지된다. 이러한 쟁점을 완화시키기 위해, 본 모델은 잘못된 예측(misprediction)의 경우에 있어서의 상태 회복 메커니즘(state recovery mechanism)[90]과 함께 브랜치 예측기(branch predictor)[89]를 사용한다. 상기 브랜치 예측기는 데이터플로우 엔진에 단일 경로의 명령어 플로우(instruction flow)를 제공한다.
웨이브스칼라 구조(wavescalar architecture)[91, 92]는, 명령어 병렬 처리기법(instruction-level parallelism)을 활용하기 위해, 태그와 명령어 큐를 갖는 이러한 데이터플로우 모델을 사용한다. 이들은 계층적 구조(hierarchical architecture)를 제시하고 있으며, 이러한 계층적 구조에서는 웨이브캐시(wavecaches)라고도 불리우는 캐시에 계산 작업이 분배되어 직접 수행된다. 수퍼스칼라에서와는 다르게, 상기 구성은 순차 프로그램들을 수행하지는 않지만, 전용 ISA를 사용하여 데이터플로우 코드를 직접 수행한다. 이들은 프로세싱 엘리먼트와 관련된 큐 내의 웨이브(waves)라 불리는 데이터플로우 명령어의 블록(block)을 로딩한다. 브랜치(branches)는 프레디키트(predicates)에 의해 로딩(loading) 웨이브(waves)들 사이에서 이루어진다. 웨이브스칼라 매우 높은 레벨의 병렬기법을 활용하는 장점을 갖는다. 상기 전용 데이터플로우 ISA는, 수퍼스칼라와 비교하여, 그 복잡성을 크게 감소시킨다. 그럼에도 불구하고, 전력 소모가 크며 전력 효율이 감소된 모든 큐에서 토큰의 전파와 태그의 비교가 이루어져야 한다.
두 번째 주요 데이터플로우의 구조적 모델은 스케줄링 데이터플로우 (scheduled dataflow)[93]로서 TRIPS[94]에 공개되어 있다. 여기서, 명령어 큐는 사용되지는 않지만, 대신에 인텍스를 통해 어드레스된 테이블 내의 명령어들에 의해 예약된 피연산자 레지스터가 사용된다. 프로듀서 명령어들(producer instructions)은 소비자 명령어의 피연산자 레지스터에 그 결과를 명확히 기록한다. 이를 위해, 2개의 목적지 주소(destination addresses)가, 테이블 내의 소비자 주소 어드레스(consumer address registers)에 대응하여, 프로듀서 명령어에 기록된다. 데이터가 2회 이상 사용되면, 복사 작업이 공표되어야 한다. 준비된 자신의 피연산자를 갖는 명령어들은 그들의 프로세싱 엘리먼트(PE)에서 수행되도록 선택될 수 있다. 파이프라인 싸이클(pipeline cycle)은 명령어 선택을 위해 전용된다. TRIPS는, 프로세싱 엘리먼트와 연관된 테이블 세트와, 레지스터 파일(register files) 및 데이터 메모리 뱅크(memory bank) 세트(set)와 함께, 본 모델(model)을 구현한다. 모든 프로세싱 엘리먼트의 명령어 테이블은 피연산자(NoC)를 통해 가시화되며 동일한 어드레스 공간(address space)의 일부를 구성한다. 상기 분배된 어드레스 공간은, 명령어들로 하여금 설사 그들이 다른 프로세싱 엘리먼트에 속한다 할지라도, 서로 간의 통신을 가능하게 한다. 이러한 구성은 로딩 및 저장 큐(load/store queues)를 구비한 메모리 포트를 가지며 멀티스레딩(multithreading)을 지원한다. 이는 명령어 레벨, 메모리 레벨 및 스레드 레벨 병렬기법(instruction-level, memory-level and thread-level parallelism)을 지원하여 매우 높은 레벨의 병렬성을 갖는 다형성 수행 플랫폼(polymorphous execution platform)을 구성하는 것을 목적으로 한다. 이러한 구성의 단점으로는 다른 프로세싱 엘리먼트에 속하는 명령어의 데이터 통신을 제한하는 NoC 지연이 있다. 별도의 피연산자 테이블과, 상기 NoC 및 별도의 레지스터 파일의 사용은 이러한 구성의 전력 효율을 감소시킨다.
본 작업에서 제공된 데이터플로우 수행 모델은 태그 및 인덱스를 사용하지 않는다. 상기 데이터플로우 엔진은, 프로세싱 엘리먼트와 연관된 명령어 큐 또는 테이블를 갖는 대신에, 프로세싱 엘리먼트당 오직 하나의 명령어 슬롯(instruction slot)을 갖는다. 먼저, 순차적인 서브 스레드(sequential sub-thread)로부터 명령어들을 선택한 다음, 상기 데이터플로우 엔진에서 이들을 하나씩 수행함으로써, 프로그램 수행이 이루어진다. 명령어는 로컬 순차 플로우(local sequential flow)로부터 취해져, 데이터플로우 엔진으로 제공되며, 프로세싱 엘리먼트에서 수행된다. 동적 선택(dynamic selection) 만이 순차 플로우를 따르기 때문에, 데이터의 종속성 및 리소스의 유효성에 근거하여 로컬 순차 서브 스레드(local sequential sub-thread)를 형성하기 위해, 명령어 스케줄링(instruction scheduling)이 정적으로 시행된다. 명령어들이 데이터플로우에서 수행됨에도 불구하고, 타일에서의 이들의 수행 순서는 컴플리케이션 작업(complication)이 이루어지는 동안 결정된다. 이는 프로세싱 엘리먼트당 단 하나의 명령어 슬롯을 사용할 수 있도록 함으로써 큰 테이블 또는 큐의 필요성을 제거하도록 한다. 그럼에도 불구하고, 본 모델에서의 순서를 벗어난 수행능력(out-of-order execution capability)은 컴파일러의 지원 없이도 수행 유닛의 지연을 자동적으로 숨기는데 사용된다.
상기 데이터플로우 엔진 자체는 고정된 점대점(point-to-point) DFL로 구성된다. 명령어들은 그들의 피연산자를 취하고 결과를 전송하기 위한 데이터플로우 링크를 선택한다. 상기 데이터플로우 엔진은 프로세싱 엘리먼트들 간의 통신을 이루기 위해 최소한의 복잡성을 가지며, 이에 따라, 콘텐트 어세스 메모리(content accessed memory)를 갖는 큐와 피연산자 네트워크를 갖는 인덱스 테이블(indexed tables)을 필요로 하지 않는다. 이는, 프로세싱 엘리먼트들 간의 와이어 지연(wires latencies)에 대응하여, 지연(latencies)을 최소한으로 감소시킨다. 더욱이, 이는 스위칭 활동(switching activity)과 와이어 커패시턴스(wire capacitance)를 감소시키기 때문에, 더욱 높은 전력 효율을 얻을 수 있게 한다. 서브 스레드에서의 명령어 선택은 브랜치를 지원하는 로컬 순차 플로우를 수행하는 것과 같다. 콘디셔널 브랜치(conditional branches)에 의해 사용되는 플래그(flags)는 데이터플로우 엔진에 의해 로컬 서브 스레드(local sub-thread)의 제어기에 직접 제공된다. 이러한 작동은 데이터가 프로세싱 엘리먼트들 사이에서 서로 전달되자마자 동일한 방식으로 실행된다. 클러스터(cluster)에 귀속된 타일의 순차 제어기는 동일한 제어 도메인의 일부로서, 클러스터가 최고의 RISC 기구에서와 같이 어떠한 제어 경로라도 수행할 수 있도록 한다. 따라서, 이는 다른 데이터플로우 모델에서 발생되는 브랜치 핸들링 문제를 완화시킨다.
내장형 시스템용 동종 구조(homogeneous architectures)
동종 구조들은 향후의 내장형 시스템에서 발생되는 문제에 대처하기 위한 양호한 후보들이다. 이들의 상태적인 간편성과 더불어, 수많은 구조들이 이미 제안되었다. 초기에 공헌한 동종 병렬 기구(homogeneous parallel machines)로서는 트랜스퓨터(transputer)가 있다 [95]. 이는 병렬 멀티프로세서 시스템을 구축하는데 사용되기 위한 인터 코어 로직(inter-core logic)을 갖는 단일 프로세서 칩으로서 80년대 초에 제안되었으며, 메쉬 토폴로지(mesh topolgy)를 사용하여 인접한 프로세서들 간의 순차적인 점대점 연결을 이용한다. 전용 이동 명령어(dedicated move instructions)를 발급함으로써 인터 코어(Inter-Core) 통신이 이루어진다.
보다 최근에는, 수많은 동종 플랫폼들이 매우 과도한 계산 부하에 대한 초병렬 수행(massively parallel execution)을 필요로 하는 내장형 시스템을 위해 특별히 제안되었다. 이러한 플랫폼들은 초병렬 프로세서 어레이용 MPPA라 불리우며, 수백개에 달하는 코어들을 구비하는 단일 칩 상에 가능한 한 많은 병렬처리를 제공하는 것을 목적으로 한다. 이들은 전용 통신 네트워크에 의해 연결된 로컬 메모리를 갖는 단순한 RISC 코어로 구성된다. 이러한 구성들의 대부분은 통신 프리미티브(communication primitives)로서 FIFO를 사용한다. 또한, 이들은, 초병렬 플랫폼에서는 실현이 불가능한 중앙 제어기를 사용하지 않고, 적절한 오우버헤드를 갖는 독립적인 코어들 상에서의 수행을 동기화하도록 한다. 이러한 MPPA의 주요 공헌 내용이 본 명세서에 기재된다.
피코칩(picoChip)으로부터의 피코어레이(picoArray)는 단일 칩 상에 300여개의 코어들을 포함하는 멀티코어를 제안한다[96]. 각각의 코어는 16 비트 3 이슈(16-bit 3-issue)의 VLIW이다. 이들은 프로그램 가능한 스위치에 의해 구현되는 시분할 다중화 방식(time division multiplexing)을 이용하는 버스에 의해 연결된다. WPPA(weakly programmable processor array)는 연구 플랫폼이다[67]. 이는 FIFO를 이용하는 재구성 가능한 네트워크를 사용한다. AsAP 구조[97]는 동일한 재구성 가능한 통신 모델을 사용하지만, 소비전력을 보다 더 줄이기 위해, 작업부하에 따라 전압 및 주파수를 국부적으로 변경시키는 특성을 갖는다. 이들은 복수의 클럭 도메인에 의해 발생되는 리타이밍 문제(retiming issues)에 쉽게 대처하는 FIFO 기반 통신의 혜택을 받는다.
Ambric은 데이터플로우 재구성 네트워크(dataflow reconfigurable network)에 의해 연결된 수백개의 코어들로 이루어진 멀티코어를 제안한다 [98, 35, 66]. 이들은 채널(CHANNELS)이라 불리우는 소형의 2-레지스터 FIFO와 유사한 통신 링크를 사용한다. FIFO와의 차이점은, 이들이, FIFO에서와 같은 별도의 제어 프로세서를 구현할 필요없이, 서로 연결된 CHANNELS의 데이터 생성 및 소모를 관리할 수 있는 특별한 제어 로직(logic)으로 상기 링크(links)에 설치된다. 이들은 또한, 동일한 명령 소스로부터 동떨어진 일부 코어들을 제어하기 위해, 명령어들이 데이터 CHANNELS를 사용하여 스트림(streamed)처리 및 복제되도록 하는 특징을 갖는다.
마지막으로, RAW 구조[37, 64, 100]를 구현하는 Tilera 프로세서 코어[99]는 64개의 3-이슈 VLIW 코어들로 이루어지며, 여기서, 인터 코어 통신은 두 가지 방식으로 처리된다. 그 첫 번째는 시분할 다중화 방식을 구현할 수 있는 프로그램 가능한 라우터(routers)를 사용하는 네트워크이고, 두 번째 인터 코어 통신 기능은 인접한 코어들을 연결하는 FIFO에 의해 이루어진다. FIFO는 레지스터 인덱스를 통해 레지스터 파일에 접근한다.
상기 MPPA 플랫폼과 상기 제안된 구성 간의 차이점은, 비록 이들이 FIFO를 사용하지만, 코어들 사이에 연결되며, 데이터 전송을 위해 병렬 코어 내에서 사용되지는 않는다는 것이다. 코어들 사이에서 FIFO의 사용은 지연을 발생시킨다. FIFO는 메쉬 토폴로지의 이웃들 간에 연결되거나, 또는 네트워크를 동적으로 재구성하는 것을 필요로 한다. 이러한 네트워크가 적절히 재구성되었을 때, 코어들 간의 최소 지연이 1싸이클에 해당된다. 그러나, 후자의 경우, 통신방법이 고정되며, 프로그램 가능성을 상실하게 된다. 이러한 구성은 몇몇 코어들을 포괄하는 파인 그레인(fine-grain) 병렬기법을 활용할 수 없는 반면, 상기 제안된 구성은 클러스터(cluster) 내의 타일(tiles) 사이에서는 파인 그레인 병렬기법을 활용할 수 있다. 더욱이, 이러한 멀티코어 구성은 별도의 코어들로 구성되기 때문에, 이들은 모두 다른 제어 도메인에 귀속된다. 이것은 비교 명령에 의해 하나의 코어에서 생성된 플래그(flag)가 다른 코어들에서 콘디셔널 브랜치(conditional branch) 수행을 촉발시킬 수 없다는 것을 의미한다. 이들은, 완전한 데이터 워드(full data word)로서의 플래그를 브랜치를 위해 사용하기 이전에 다른 코어(cores)들의 위치를 등록시키기 위하여, 상기 플래그를 재구성 가능한 네트워크를 통해 전달해야만 한다. 이러한 모든 작업은 대략 몇 싸이클 정도 걸린다. 더욱이, 몇몇 코어들이 분기되어야 하는 경우, 복사 명령이 발부되어야 한다. 상기 제안된 구성은, 비교 명령이 클러스터의 다른 타일 상에서 수행되었던 바로 다음 싸이클(cycle)을 일정한 타일에서 분기시키도록 한다.
이러한 제약들로 인해, MPPA는 복잡한 제어 요건 없이 스트리밍 어플리케이션(streaming applications)을 실행하는데 주로 사용된다. 실제로, 계산 레이아웃(computation layout)의 변화는 많은 비용이 소요되는 재구성 프로세스를 필요로 한다. 따라서, 이들은, 상기 어레이 상에서의 공간적 계산(spatial computation)의 혜택을 받으며 어플리케이션 위상이 상대적으로 긴 기간동안 수행되는 어플리케이션에 적합하다. 소비전력과 관련하여, 다수의 코어는 처리량을 증가시키지만 플랫폼의 전력 효율을 향상시키지는 못한다. 이전에 참조된 큰 MPPA 부품들은, 크게 제한된 내장형 시스템에 있어서 비교 큰 약 10와트의 전력을 소모한다.
MPPA와 의 다른 주요 차이점으로는, 라이트플로우(LiteFlow)가 명령어 인덱스에 의해 접속된 로컬 레지스터 파일(local register files)을 사용하지 않는다는 것이다. 그 이유는, 피연산자 추출을 위한 판독작업이 별도의 파이프라인 단계를 발생시키기 때문으로, 이는 가속 결점(speedup drawbacks)으로 인한 콘디셔널 브랜치 지연의 패널티(panelty)를 증가시킨다. 이러한 현상은 루프(loops) 내의 다수의 명령어들이 하나로 모아지는 병렬식 공간적 계산법(widely parallel spatial computation)에서는 매우 중요한 문제이다. 언롤링(unrolling)에 의한 브랜치 지연의 완화는 커널(kernel) 사이즈의 증가시키게 되며, 이는 로컬 명령어 버퍼(local instruction buffers)의 사용을 제한하게 된다. 이러한 문제는 다음 챕터(chapter)에서 상세히 기술된다.
데이터플로우를 갖는 경우가 아닌 레지스터 값(register values)은 항상 판독되며, 데이터가 소비자(consumer)에 의해 사용되면, 그것은 동일한 방식으로 복사되어야 한다. 로컬 레지스터 파일의 사용으로 인해, 명령어들이 인덱스(indexes)에 따라 데이터를 처리한다. 따라서, 로컬 레지스터 파일 기반의 계산을 데이터플로우와 혼합하는 것은 적절하지 않다. 실제로, 레지스터 인덱스로는, 라이트플로우에서와 같이, 값을 소비할지 여부를 선택하는 것이 불가능하다. 레지스터 기반 ISA의 결과는 하나 또는 2개의 레지스터에 기록되며, 데이터 복사를 요구하게 된다. 라이트 플로우에 있어서, 비트(bits)는 목적지 DFLs를 선택하는데 사용되며, 이는 복사 명령을 발부하지 않고도 모든 잠재적인 소비자들에게 데이터를 전달하도록 한다.
전용 가속기의 구조(Dedicated accelerator architectures)
전용 구조는 내장형 시스템에서의 계산 업무의 병렬성과 전력 효율을 증가시키도록 제안되었다. MOVE 프레임워크(framework)에서 구현된 운송 촉발 구조(transport-triggered architecture:TTA)는 계산 리소스에 오직 명시적인 데이터 통신만을 적용한다 (101, 102]. 여기서, 실행 입력부로의 데이터 운송은 특별한 작업 수행을 촉발시킨다. 이러한 구조는 소켓(sockets)에 의해 기능 유닛(functional units)에 연결된 통신 버스를 사용한다. 긴 명령어(long instructions)는 작업의 병렬식 수행을 유발하는 소켓들 간의 통신을 명시적으로 특정화한다.
멀티코어(multicore) 플랫폼의 통신을 위한 전용 구조가 제안되었다. CPA(co-processor array) 모델은 FIFO에 의해 프로그램 가능한 네트워크에 연결된 프로세싱 엘리먼트로 이루어진다[103]. 여기서, 프로세싱 엘리먼트는 프로세서 코어 또는 사용자 정의 이종 가속기(custom heterogeneous accelerators)일 수 있다. NoC의 개선된 버젼이, 내장형 하드 실시간 어플리케이션(embedded hard real-time applications)에서의 중요 문제인 서비스 질에 역점을 둔 이씨어리얼(Aethereal)과 함께 제안되었다.
ADRES 플랫폼은 VLIW와 강하게 결합된 가속기로 이루어진다[31]. 상기 가속기는 MORPHOSYS 구조에 도입된 재구성 가능한 콜스(coarse) 그레인 어레이(CGRA)이다 [32]. 상기 VLIW는 어플리케이션의 콘트롤 인텐시브 파트(control intensive part)를 위해 사용되며, 커널이 CGRA에서 가속된다. 이는 로컬 레지스터 파일을 갖는 서로 연결된 프로세싱 엘리먼트들로 구성된다. 상기 CGRA 전체는 재구성 메모리로부터 각각의 싸이클로 로딩되는 재구성 벡터에 의해 동기적으로 제어된다. 브랜치는 프레디키트(predicates)를 사용하여 이루어진다.
마지막으로, 재구성 가능한 콜스 그레인 플랫폼에 있어서의 중요한 2개의 공헌으로는 Montium [34]과 PACT-XPP [33]이다. 이들은 인텐시브 내장형 계산 플랫폼에 대한 매우 높은 전력 효율을 목표로 한다. Montium은 프로그램 가능한 크로스바(cross bar)에 의해 서로 연결된 메모리 블록들과 ALUs를 포함하는 간단한 프로세싱 엘리먼트들로 이루어진다. 상기 재구성 벡터는 각각의 싸이클로 로딩되며, 그 제어기는 구성 메모리에서의 브랜치를 허용한다. XPP 구조는 재구성 가능한 데이터플로우 네트워크에 의해 서로 연결된 소형 메모리들과 ALUs로 구성된다. 이러한 2개의 구조는 스트리밍 어플리케이션을 위한 커널 가속을 목적으로 한다.
본 발명은 명령어들을 병렬식으로 수행하며 데이터 통신 링크(DCL)라고 하는 점대점 통신 링크와 함께 연결된 프로세싱 엘리먼트를 포함하는 프로세서에 관한 것이다.
본 발명은 또한 2-레벨 코드 구성(two-level code organization)에 관한 것이다.
명령어들은 그들 간의 데이터 전달을 위해 DCL을 사용한다. 이러한 통신을 구현하기 위해, 이들은 그들의 피연산자를 취하며, 그들의 처리 결과를 기록하는 DCL을 특정화한다. 상기 DCL은 상기 명령어들의 수행을 동기화하며, 그들이 처리하는 데이터를 명시적으로 관리하도록 한다. 통신은 명시적으로 이루어지며, 지속 변수의 저장소로부터 분리된 임시 변수의 저장소를 구현하는데 사용된다.
특히, 본 발명은 수행 모델을 구비한 프로세서에 관한 것이다. 상기 프로세서는 명령어를 실행하는 프로세싱 엘리먼트, 데이터 통신 링크 및 명령어 메모리로 구성된다.
DCL은 데이터 저장 능력을 제공할 수 있는 점대점 통신 링크이다. DCL은 하나의 기록 포트(write port)와 하나의 판독 포트(read port)를 가지며, 이러한 포트들의 유효성(availability)에 대한 정보를 제공한다. 상기 판독 포트로부터의 데이터 판독은 기록 포트에서의 데이터 기록 순서에 대해 미리 규정된 순서에 따라 시행된다. 데이터 판독 및 기록 외에도, DCL은 저장된 데이터를 명시적으로 관리할 수 있는 부가적인 작업을 제공한다. 이러한 작업은: 데이터 소비가 없는 판독, 데이터 교체가 이루어지는 강제 기록 및 모든 저장된 데이터를 삭제하는 링크 저장 플러쉬(link storage flush)이다. 유효성 정보는 DCL을 이용한 동기화를 구현할 수 있도록 하며, 데이터 관리 작업은 DCL에 저장된 데이터의 명시적 관리를 수행하도록 한다.
상기 DCL은 프로세싱 엘리먼트들 간의 유일한 통신 수단이다. 또한, 이는 프로세싱 엘리먼트의 계산 결과를 위한 임시 저장소를 제공한다. 프로세싱 엘리먼트들은 타일(tile) 내에서 그룹을 형성한다. 상기 타일의 프로세싱 엘리먼트들은 티일 입력부에 연결된 DCL 판독 포트 세트와, 타일 출력부에 연결된 DCL 기록 포트 세트를 공유한다. 따라서, 상기 타일들은 DCL에 의해 이들 사이에 연결된다. 일부 DCL은 같은 타일의 출력부 및 입력부 사이에 링크를 제공할 수 있다.
본 발명의 특성은, 프로세싱 엘리먼트에서 수행되는 명령어들이 오직 타일 입력부에 연결된 DCL 판독 포트로부터 그들의 피연산자를 취한다는 것이다. 더욱이, 명령어들은 상기 타일 출력부에 연결된 하나 이상의 DCL 기록 포트에 그들의 결과를 기록한다. 명령어들이 점대점 통신 링크를 특정화함에 따라, 프로세싱 엘리먼트들 간의 데이터 통신은 명시적으로 이루어지며 분명하게 결정된다. 통신은 마이크로 구조(micro architecture)에 의해 해석 및 분석될 필요는 없다. 또한, DCLs은 동기 수단을 제공하기 때문에, 명령어들은, 비록 다른 타일 상에서 수행된다 할지라도, 단지 명시적 통신을 사용하여 이들 사이에서의 명령어 수행을 동기화할 수 있다. 또한, DCLs은 데이터를 명시적으로 관리하도록 하기 때문에, 명령어들은 타일 DCL 내에 저장된 데이터를 완벽히 제어한다.
타일 프로세싱 엘리먼트 상에서의 명령어 수행은 명령어에 규정된 순서에 따라 실행된다. 상기 타일 프로세싱 엘리먼트가 동일한 DCL 세트를 공유하기 때문에, 이러한 우선 순위는 동일한 번들(bundle)에 귀속된 명령어들에 의해 사용되는 DCLs에 대한 접근 순서(access sequence)를 특정화하도록 한다.
동일한 명령어 번들에 의해 제어되는 타일 세트를 클러스터(cluster)라 하며, 이는 명령어 메모리와 연결된다. 클러스터에서, 하나의 프로세싱 엘리먼트는 브랜치 유닛이며, 이러한 브랜치 유닛은, 어드레스 레지스터를 소유하며, 클러스터 명령어 메모리로부터의 판독을 위해 다음 명령어의 어드레스를 제공하는 역할을 한다.
클러스터 세트는 프로세서를 구성하며, 각각의 클러스터는 명령어 메모리에 저장된 명령어들의 스레드(thread)를 수행한다. 서로 다른 클러스터에 귀속된 프로세싱 엘리먼트 상에서 수행되는 명령어들은, 마이크로 구조의 간섭을 요구하거나 복합 라우팅 리소스(complex routing resources)를 요구하지 않고도, 동기화될 수 있으며 DCL을 이용하여 데이터를 직접적으로 공유할 수 있다.
통신은 변수 저장소로부터 분리된다. DCL은 임시적 결과물로 제한되는 저장소를 제공함으로써, 지속 변수(long-living variables)가 프로세싱 엘리먼트에 구현된 로컬 메모리를 이용하여 저장된다.
본 발명의 효과는 다음과 같습니다.
통신이 명시적으로 특정화되고, 동기화 수단을 제공하며, 데이터를 관리하도록 하기 때문에, 상술된 프로세서는, 다른 병렬식 프로세서와 비교하여, 크게 간소화된 마이크로 구조를 갖는다. 실제로, 복합 바이패스 회로(complex bypass circuit), 다중 포트 레지스터 파일(multiported register file), 데이터 업데이트를 수행하기 위한 파이프라인 또는 심지어 다른 병렬식 프로세서에서와 같은 복합 라우팅 리소스를 가질 필요가 없다. 따라서, 이러한 프로세서는 구현에 있어서의 복잡성이 감소되고, 높은 확장성(scalability) 및 전력 효율을 갖는 한편, 명령어 레벨 병렬성을 활용하여 명령어들의 수행을 동기화시킨다.
본 발명의 상술 및 다른 특징, 형태 및 장점들은 후술되는 발명의 설명 및 청구범위를 참조하여 보다 잘 이해될 수 있을 것이다.
도 1은 각기 2개의 타일을 갖는 2개의 클러스터를 구비하는 프로세서의 실시예를 나타내는 도면이다.
도 2는 각기 하나의 타일을 갖는 4개의 클러스터로 구성되는 프로세서의 실시예를 나타내는 도면으로, 상기 타일들은 점대점 통신 링크로 이루어진 DCL에 의해 연결된다.
도 3은 매우 단순하고 제한된 DCL의 실시예를 나타내는 도면으로, (a)에서는 FIFO와 와이어로 구성되고, (b)는 제어 신호를 갖는 통상적인 2-레지스터 FIFO 구현을 나타내며, (c) 단순한 DCL 실시예를 표현하는 기호를 나타낸다.
도 4는 4가지 명령어들을 갖는 타일 실시예를 나타내는 도면으로, 피연산자는 DCL 입력부로부터 획득되고, 결과는 하나 이상의 DCL 출력부로 전송된다.
도 5는 산술 명령어(arithmetic instruction)의 실시예를 나타낸다.
도 6은 클러스터의 일부로서 3개의 다른 타일(T2, T3 및 T4)과 연결된 2개의 로컬 DCLs을 구비하는 프로세서 타일의 실시예(T1)를 나타낸다.
도 7은 DCL이 데이터 처리를 위한 파이프라인 레지스터를 대체하는 실시예를 나타낸다.
도 8은 계산 이후 동일 싸이클에서 통신을 허용하는 실시예의 타일들 사이에 매우 짧은 DCL를 갖는 클러스터 실시예를 나타내는 평면도로서, 송출 및 인입 DCLs(outgoing and incoming DCLs)은 다른 클러스터와 통신하며, 이러한 통신은 와이어 지연으로 인해 더욱 느려진다.
도 9는 네트워크(b) 및 DCL(c)에 의한 프로그램 프래그먼트(fragment)(a)의 데이터 구별의 예를 나타내는 도면이다.
도 10은 타일로 구성되는 클러스터의 실시예를 나타내는 도면이다.
도 11은 클러스터의 타일들에서 로컬 버퍼로 EB를 페치(fetch)하는 제1레벨(1)과, 각각의 타일에서 명령어들을 순차적으로 수행하는 제2레벨(2)을 나타내는 도면이다.
도 12는 상기 2개의 수행 레벨을 구현하는 전체적인 수행 파이프라인을 나타내는 도면이다.
도 13은 클러스터 타일에서 SEB 코드 세그먼트의 독립적인 수행을 위한 수행 슬롯을 나타내는 도면이다.
도 14는 즉시 주소(immediate address)를 이용하는 각 명령어에 이웃한 전용 브랜치 필드(dedicated branch field)를 구비하는 로컬 브랜치(local branch)를 나타내는 도면이다.
도 15는 4개의 타일을 위한 SEB를 가지는 EB 코드 레이아웃의 예를 나타내는 도면으로, (a)는 SEB 내용을 나타내고, (b) 및 (c)는 동일한 블럭의 2개 저장소를 나타내며, 여기서, (b)에는 4-명령어 너비로 구성되고, (c)는 2-명령어 너비로 구성되며, 이를 통해 양쪽 어레이가 동일한 EB를 저장한다.
도 16은 EB 브랜치 예를 나타내는 도면으로, 하나의 타일에서 단 하나의 EB 브랜치 명령어가 수행되고, 다른 타일들은 새로운 EB를 기다린다.
도 17은 이중 SEB 버퍼를 나타내는 도면으로, 현재의 SEB가 수행되는 동안, 수행될 영순위의 EB에 대한 정적 예측(static prediction)에 근거하여 새로운 EB가 미리 페치된다(1).
본 발명은 수행 모델을 갖는 프로세서에 관한 것이다. 상기 프로세서는 명령어를 수행하는 프로세싱 엘리먼트, 데이터 통신 링크 및 명령어 메모리를 포함한다.
상기 프로세서의 실시예에 대한 일반적인 도면이 도 1에 도시되어 있다. 상기 프로세서는 클러스터들로 구성되며, 하나의 클러스터는 하나 또는 여러개의 타일(1)과, 명령어 메모리(2) 및 각 타일에 대한 명령어 번들(bundle)을 저장하는 레지스터(3)를 포함한다. 긴 명령어 번들은 명령어 메모리(4)로부터 즉시 페치(fetched)되고, 기록을 위해, 자신의 타일로 분할된다.
타일에는 여러개의 프로세싱 엘리먼트(5)가 그룹을 형성한다. 각각의 프로세싱 엘리먼트는 그 타일의 명령어 번들로부터 자신의 명령어를 수행한다. 상기 프로세싱 엘리먼트들 간의 데이터 통신 및 타일들 간의 데이터 통신은 데이터 통신링크(DCL)(6)에 의해 이루어진다. 이를 위해, 명령어들은, 레지스터 파일 및 공유된 레지스터 인덱스 없이, 피연산자로서 DCL 내에서 데이터를 직접 판독 및 기록한다.
데이터 통신 링크(DCL)
DCL은 데이터 저장 능력을 제공할 수 있는 점대점 통신 링크이다. DCL은 하나의 기록 포트와 하나의 판독 포트를 갖는다. 더욱 상세히 말하면, 상기 DCL은 판독 포트가 데이터 판독을 위해 접근할 수 있는지를 나타내며, 이는 그 내부에 실제적으로 데이터가 있다는 것을 의미한다. 이는 또한 기록 포트가 데이터 기록을 위해 접근할 수 있는지를 나타내며, 이는 그 내부에 기록할 수 있다는 것을 의미한다. 상기 판독 포트로부터의 데이터 판독은 기록 포트에서의 데이터 기록 순서에 따라 미리 규정된 순서로 실행된다. 가장 단순한 버젼에 있어서, 데이터는 기록 포트에 기록된 순서와 동일한 순서로 판독된다.
데이터의 기록 및 판독 외에도, DCL은 저장된 데이터의 명시적 관리를 가능하게 하는 부가적인 작업을 제공한다. 이러한 작업은: 데이터 소비가 없는 판독, 데이터 교체가 이루어지는 강제 기록 및 모든 저장된 데이터를 삭제하는 링크 저장 플러쉬(link storage flush)이다.
따라서, DCL의 출력부로부터 데이터가 판독되면, 그 데이터는 DCL로부터 제거되거나 또는 그렇지 않을 수 있다. 후자의 경우, 상기 데이터는, FIFO 시맨틱(FIFO-like semantic)에서의 경우와 같은 복사 작업 수행을 요구하지 않고도, 출력부로부터 직접적으로 재사용될 수 있다.
강제 기록은 저장된 데이터가 판독되었는지의 여부와 관계없이 상기 저장된 데이터를 겹쳐 쓸 수 있도록 한다. 예를 들어, 끼어들기(interruption)를 처리하는 루틴(routines)에 유용하다. 같은 방식으로, 데이터 링크 플러쉬는 소프트웨어 예외(software exception)로부터 회복되도록 한다. 실제로, 예외는 그 자체로 무작위이기 때문에, 이러한 상황이 발생되는 경우, 그 내부에 데이터로서 주어진 DCL이 있는지 여부를 정확히 알 수는 없다. 플러쉬 작업은 아마도 손상되거나 또는 의미없는 계산 상태를 검토하여 규정된 상태로 돌아가도록 한다. 간편한 FIFO를 사용하는 경우, 리셋(reset) 없이 규정되지 않은 상태로부터 규정된 상태로 돌아가는 것은 불가능하다. 실제로, 미지의 비어있는 FIFO 상에서의 판독 작업은 명령어 수행을 정지시켜 계산 작업의 차단을 초래한다. 마지막으로, 테스트 명령어는, 데이터가 DCL을 통해 전송되었는와, 예를 들어 I/O 프로세싱 루틴을 촉발시키는데 사용될 수 있는지 여부를 시험하도록 한다.
유효성 정보는 DCL을 이용하여 동기화를 실현하도록 한다. 실제로, 명령어가 DCL의 입력부에 데이터를 기록해야만 하는 경우, 그 포트가 이용 가능할 때까지 기다려야 한다. 따라서, 명령어의 수행은 DCL 판독 포트로부터의 다른 명령에 의해 데이터 소모와 동기화된다. 이와는 반대로, 데이터가 판독 포트로부터의 명령에 의해 사용되는 경우, DCL에 데이터를 기록하기 위해 다른 명령에 대한 유효성 및 가능성을 기다려야 한다.
데이터의 관리 작업은 데이터의 명시적인 소비를 허용하거나 또는 허용하지 않기 때문에, 상기 DCL내에 저당된 데이터의 명시적 관리를 수행하도록 한다. 이는 복사 작업 명령을 내리거나, 또는 로컬 또는 공유 레지스터에 데이터를 복사할 필요 없이 데이터를 여러 번 사용할 수 있게 한다. 많은 비용이 소요되는 복사 작업을 방지하는 다른 명시적인 데이터 관리작업은, 하기에서 설명되는 바와 같이, 명령어에 대해 타일의 다중 출력 DCL에 데이터 결과를 기록하도록 하는 능력이 있다.
타일(tiles)
타일들은 입력 DCL(8)의 동일한 판독 포트 세트를 공유하는 프로세싱 엘리먼트들로 구성된다. 이들은 또한 출력 DCL(9)의 동일한 기록 포트 세트를 공유한다. 이러한 DCL은 프로세싱 엘리먼트들 간의 유일한 통신 수단이다. 이들은 또한 프로세싱 엘리먼트들의 계산 결과를 위한 임시 저장소를 제공한다. 타일의 출력 세트로부터의 하나 또는 여러개의 DCL들은 로컬 데이터 저장소(7)를 제공하는 동일한 타일에 연결된다. 다음 명령에서 재사용되어야 하는 결과를 생성하는 타일 내의 프로세싱 엘리먼트는 로컬 DCL에 그 결과들을 기록하며, 다음 명령이 수행되는 동안 이를 재사용할 수 있다. 다른 DCL은 동일한 클러스터(10)에 귀속된 타일들 또는 다른 클러스터(11)에 귀속된 타일들에 연결된다. 이 모든 경우에 있어서, DCL은 프로세싱 엘리먼트들 간의 직접적인 통신을 허용하며, 이에 따라 타일들이 다른 클러스터에 귀속된 경우라 하더라도, 연속되는 명령어들 간의 통신을 허용한다.
명령어 피연산자 및 수행 (Instruction operands and execution)
본 발명의 특징은 프로세싱 엘리먼트에서 수행되는 명령어들이 그들의 피연산자를 상기 타일 입력부에 연결된 DCL 판독 포트에서만 취한다는 것이다. 더욱이, 상기 명령어들은 타일 출력부에 연결된 하나 이상의 DCL 기록 포트에 그들의 결과를 기록한다. 이를 위해, 명령어는 데이터를 받기 위해 로컬 인입 세트(local incoming set)의 DCL 인덱스를 특정화한다. 상기 명령어 내의 추가 정보는 데이터가 DCL로부터 제거되어야 하는지 또는 다음 사용을 위해 유지되어야 하는지를 지정한다. 또한 상기 명령어는 결과 데이터를 기록하기 위해 송출 세트(outgoing set) 내의 하나 또는 여러개의 DCL을 특정화한다.
명령어들이 점대점 통신 링크를 특정화하기 때문에, 프로세싱 엘리먼트들 간의 데이터 통신은 명시적으로 이루어지며 분명하게 결정된다. 통신은 마이크로 구조(micro architecture)에 의해 해석 및 분석될 필요는 없다. 또한, DCLs은 동기 수단을 제공하기 때문에, 명령어들은, 비록 그들이 다른 타일 상에서 수행된다 할지라도, 단지 명시적 통신을 사용함으로써 이들 간의 명령어 수행을 동기화할 수 있다. 일단 DCL이 명령어에 의해 사용되면, 상기 DCL의 반대측에 있는 명령어가 무엇을 판독할지 또는 어떤 데이터를 기록하였는지를 알 수 있다. 또한, DCLs은 데이터를 명시적으로 관리하도록 하기 때문에, 명령어들은 타일의 DCL 내에 저장된 데이터를 완벽히 제어하며, 데이터를 여러 번 사용하기 위해 복사할 필요도 없다.
명령어의 데이터가 명령어에 의해 특정화된 입력 DCL 내에서 사용 가능하고, 또한 명령어에 의해 특정화된 목적지 DCL이 기록을 위해 사용 가능하면, 명령어들이 수행된다. 동일한 명령어 번들에 귀속된 모든 명령어들이 동시에 수행될 필요는 없으며, DCL이 데이터 통신을 위해 사용되기 때문에, 독립적인 명령어들을 동일한 번들 내에 보관할 수도 있다. 명령어들은 차례로 수행되며, 결정된 DCL을 통해 전송 및 수신된 그들의 피연산자를 기다린다. 이러한 방식은 긴 명령어 워드가 즉시 수행되는 VLIW에서와는 전혀 다른 접근방식으로, 이용할 수 있는 병렬성이 충분하지 않을 경우, VLIW에서 일반적으로 사용하는 빈 명령어 슬롯의 사용을 크게 줄이는 장점을 갖는다. 이는 빈 메모리 어세스로 인한 소비 전력과 프로그램 사이즈를 감소시키게 된다.
동일한 명령어 번들에 의해 제어되는 타일 세트는 클러스터(12)라고 하며, 이는 명령어 메모리와 연결된다. 클러스터에서, 하나의 프로세싱 엘리먼트는 브랜치 유닛이며, 이러한 브랜치 유닛은, 어드레스 레지스터(address register)를 소유하며, 클러스터 명령어 메모리로부터의 판독을 위해 다음 명령어 번들의 어드레스를 제공하는 역할을 한다.
일단 명령어 번들 내의 모든 명령어들이 그들의 수행을 막 완료한 경우, 다음 번들은 클러스터의 각 타일의 명령어 번들 레지스터에 페치 및 래치된다(fetched and latched). 더욱이, 동일한 타일 상에서 수행된 동일 번들은 피연산자로서 동일한 DCL을 공유할 수 있다. 이를 위해, 타일 프로세싱 엘리먼트 상에서의 명령어 수행은 명령어에서 미리 규정된 순서에 따라 수행된다. 상기 타일 프로세싱 엘리먼트가 동일한 DCL 세트를 공유하기 때문에, 이러한 우선 순위는 동일한 번들에 귀속된 명령어들에 의해 사용되는 DCL에 대한 접근 순서(access sequence)를 특정화하도록 한다. 만약 2개의 명령어가 동일한 DCL 포트에 접근하면, 우선 순위는 먼저 접근한 명령어에게 주어지므로써, 충돌을 피하게 된다.
명령어들은 통신을 특정화하지만, 폰 노이만(von Neumann) VLIW 구조의 레지스터들 같이 메모리 위치를 공유하지는 않는다. DCL은 명령어들 사이에서 생성 및 사용되는 임시 데이터를 저장하는데 이용된다. 일단 명령어가 데이터를 생성하면, 이러한 데이터는 마이크로 구조의 개입 없이 다른 명령에 의해 즉시 사용될 수 있으며, 이는 바로 다음 싸이클에서 사용될 수 있음을 의미한다. 따라서, DCL은 대부분 단기 변수(short-living variables)를 위해 사용된다. 장기 변수(long-living variables)는 2가지 방식으로 묶일 수 있다. 첫 번째는 DCL의 출력 포트에 상기 데이터를 들어오게 하는 것으로, 이는 연속적인 재사용에 매우 유용한다. 다른 방식에서는, 일부 프로세싱 엘리먼트가 변수를 저장하기 위해 사용되는 소형의 로컬 저장 어레이로 사용된다. 변수들은 전용 명령어에 의해 상기 어레이에 저장 및 복원되어야 한다. 다시 말하지만, 이는 레지스터 장치에서와 같은 레지스터 인덱스 및 마이크로 구조에 의해 자동적으로 처리되지 않는다. 그럼에도 불구하고, 이러한 방식에 있어서의 장점은 통신이 변수 저장소로부터 분리된다는 것이다.
DCL의 통신 세트는 타일에 로컬(local)되지만 다른 타일들에 대한 접근을 제공하기 때문에, 본 발명에 제공된 구조는 확장 가능하다. 에플리케이션이 더 많은 장기 변수를 필요로 하는 경우, 전체 구조의 효율 및 속도를 저하하지 않으면서 로컬 저장소의 크기만을 증가시킬 수 있다. 공유 레지스터 장치(shared register machines)에서는 이와는 다르며, 상기 공유 레지스터 장치에서는, 특히 다중 포트로 구성되는 경우, 중앙 레지스터 파일의 크기가 잘 조절되지 않는다.
통신이 명시적으로 특정화되고 동기화 수단을 제공하며 데이터를 관리하도록 함으로써, 상술된 프로세서는, 다른 병렬식 프로세서와 비교하여, 크게 단순화된 마이크로 구조를 갖는다. 실제로, 복합 바이패스 회로(complex bypass circuit), 다중 포트 레지스터 파일(multiported register file), 데이터 업데이트를 수행하기 위한 파이프라인 또는 심지어 다른 병렬식 프로세서에서와 같은 복합 라우팅 리소스를 가질 필요가 없다. 따라서, 이러한 프로세서는 구현에 있어서의 복잡성이 감소되고, 높은 확장성(scalability) 및 전력 효율을 갖는 한편, 명령어 레벨 병렬성을 활용하여 명령어들의 수행을 동기화시킨다.
양호한 실시예의 설명
고효율의 in-order RISC 프로세서 코어는 명령어들 간에 데이터를 전달하기 위해 레지스터 파일을 사용한다. In-order 병렬식 RISC 코어는 수행 유닛들 간의 중앙 데이터 풀(central data pool)로서 중앙 레지스터 파일을 사용한다. 레지스터 파일은 병렬식 플랫폼(parallel platforms)의 확장성을 구현 및 제한하기가 복잡하다. 더욱이, 레지스터 기반 데이터 통신은, 파이프라인식 구현에 있어서 올바른 수행상태를 유지하기 위해, 부가적인 마이크로 구조의 지원을 필요로 하며, 이는 병렬식 VLIW 프로세서가 전력 오우버헤드(power overhead) 및 주파수 제한을 발생시키는 복합 바이패스 네트워크에 의해 더욱 제한되도록 한다. 이러한 결점은 명령어 레벨 병렬성을 활용할 수 있는 in-roder VLIW 코어의 전력 효율을 저하시킴으로써, 동종 멀티코어 플랫폼에서의 사용을 제한하게 된다.
여기에 제공된 라이트플로우(LiteFlow) 프로세서 모델은 본 발명의 일 실시예로서, 고효율의 병렬식 프로세서가 파인 그레인 ILP(fine-grain ILP)를 활용할 수 있도록 하며, 복합 바이패스 네트워크를 갖는 중앙 레지스터 파일을 사용하지는 않는다. 그 대신에, 명령에들에 의해 특정화된 명시적인 데이터 통신과 함께 수행 유닛들 간의 단방향 점대점 통신 링크(direct point-to-point communication links)를 사용한다. 또한, 빠르고 효율적인 인터 코어 통신 수단을 제공함으로써, 고효율의 동종 멀티코어 플랫폼을 위한 적절한 해결책을 제공한다.
상기 라이트플로우 실시예는 타일 기반 구조 모델(tile-based architecture model)이다. 라이트플로우 프로세서는 독립된 타일 세트를 그룹화한 클러스터들로 구성된다. 각각의 타일은 데이터플로우형 방식(dataflow-like way)으로 명령어들을 실행함으로써 수행 유닛(execution unit)을 제어한다. 계산 타일들과 클러스터들 사이와 그들 내부에서의 모든 데이터 통신은 명시적으로 이루어지며, 데이터 통신 링크용 DCL로서 후술되는 단방향 점대점 방식의 데이터플로우형 링크 (direct point-to-point dataflow-like links)를 사용한다. DCL의 매우 단순한 실시예로 소형의 동기 FIFO를 사용할 수 있다. DCL은 레지스터 인덱스 또는 태그를 사용하지 않고 명령어들 간에 데이터를 전달하는데 사용된다. DCL과 관련된 제어작업은 클러스터들 사이의 다른 타일들 또는 스레드(threads)에서 명령어들 간의 수행 동기화를 위해 이용된다. 프로세서 타일에서의 이러한 로컬 수행 제어는 동기화 및 제어 신호를 위해 사용되는 긴 와이어의 사용을 방지한다. 계산 작업은 DCL만을 사용하며, VLIW 프로세서의 중앙 레지스터 파일과 같은 마이크로 구조에 의해 유지되는 중앙 공유 데이터 풀(central shared data pool)을 사용하지 않는다. DCL들은 거래적 통신 프리미티브(transactional communication primitives)를 구현함으로써 자동적으로 데이터를 처리하기 때문에, 이들은 확장 가능하며 지연 (latency)에 민감하지 않으며, 큰 병력식 플랫폼을 위한 적절한 통신 수단을 형성한다.
라이트플로우 프로세서가 도2에 도시되어 있으며, 이러한 라이트플로우는 하나의 타일을 그룹화한 4개의 클러스터로 구성되며, 그 각각은 전용 명령어와 데이터 캐시(caches) 또는 스크래치 패드(scratch pads)를 사용한다. 이웃하는 클러스터들은 점대점 DCL에 의해 단단히 결합된다. 이러한 단단한 연결은 매우 빠르게 이루어지며, 여러 개의 클러스터에 걸쳐 단일 스레드를 효율적으로 수행할 수 있도록 하는 제어 정보를 전파한다. 도 2에서, 캐시 메모리는 도시되지 않은 전용 메모리 네트워크를 사용하는 L2 캐시로서 도시된다.
본 실시예에 있어서, 각각의 클러스터는 점대점 DCL들로 구성되는 로컬 네트워크에 의해 연결되는 단일 타일로 이루어지며, 데이터 및 명령어 캐시 또는 스크래치 패트와 연결된다. 데이터 캐시는 구현에 따른 메모리 작업을 수행함으로써 여러개의 타일이 접근할 수 있도록 한다. 본 실시예의 타일은 하나 이상의 수행 유닛(EU)과, 장기 데이터를 유지하기 위한 로컬 메모리(LMEM)을 갖는다. 본 실시예에 있어서, 각각의 클러스터는 클러스터 상에서 수행되는 코드의 SEB-BUFF 유지 블록이라고 하는 로컬 명령어 메모리를 갖는다. 본 실시예의 각 클러스터가 하나의 타일을 갖기 때문에, 여기서 각각의 타일은 브랜치(branches)를 갖는 코드의 순차 스레드(sequential thread)를 수행한다.
클러스터와 연결된 타일 세트를 그룹화함으로써, 본 실시예의 프로세서는 타일당 단 하나의 명령어 슬롯을 갖는 라이트 데이터플로우형 수행 엔진(light dataflow-like execution engine)으로서 도시된다. 이러한 데이터플로우형은 테이터 또는 리소스의 유효성에 의해 촉발되는 수행을 의미한다. 상기 엔진은 타일 내의 순차 스레드로부터의 명령어를 수행하며, 명령어들은 정적으로 계회된 순차 플로우로부터 선택된다. 상기 명령어들은 자신들의 모든 피연산자가 상기 엔진에서 이용 가능할 때 최종적으로 수행된다. 상기 데이터플로우형 엔진 자체는 명령어 슬롯들 간에 익명의 데이터 토큰(unnamed data tokens)을 전달하는 고정식 점대점 DCL 링크들로 구성된다. 상기 수행 엔진의 명령어 윈도우는 매우 작으며, 클러스터내의 다수의 타일들에 대응한다. 이러한 소형의 윈도우 크기는 데이터플로우형 엔진이 높은 전력 효율과 낮은 복잡성(complexity)을 갖도록 하고, 또한 내용 접근 명령어 큐 또는 테이블(content accessed instruction queues or tables)에 대한 부담이 없는 상태로 데이터플로우형 수행 엔진을 구현하도록 한다.
본 실시예에 있어서의 명령어 번들은 병렬식으로 수행될 수 있는 여러 개의 명령들을 그룹화한다. 명령어들 간의 통신은 DCL에 의해 이루어지며, 이러한 명령어들의 수행은 목적지 DCL과 데이터의 유효성에 의해 촉발된다. 이러한 수행은 CTRL-REG라고 하는 클러서터 레지스트에 로딩된 명령어 번들에 의해 지시된다. 타일은 4가지 형태의 명령어들을 병렬식으로 수행할 수 있으며, 이들은 다음과 같다:
● 산술적 메인 메모리
● 이동 작업에 의한 데이터 교체
● 로컬 메모리 어세스
● 명령어 버퍼(instruction buffer)에서의 브랜치 작업.
브랜치를 제외한, 동일 명령어의 복수 인스턴스(instances)가 본 실시예의 구현에 따라 타일 내에 존재할 수 있다.
상기 라이트플로우 모델의 실시예는, 프로세서 내에서의 대부분의 데이터 통신이 여전히 명령어 중심적인 컴파일러(compiler)에 대해 명시적이고 가시적이도록 하는 특징이 있다. 이는 상기 데이터 통신이 여전히 연산과 같은 데이터 변환 작업 또는 계산을 진행하는 메모리 작업이라는 것을 의미한다. 통신은 피연산자의 선택에 의해 자동으로 이루어지며, 명령어 수행의 부작용으로 간주될 수 있다. 올바른 상태를 유지하기 위해 복합 마이크로 구조와 함께 태그를 사용하거나 또는 레지스터에 의해 변수에 이름을 정하는 대신에, 데이터는 정적으로 규정된 생산자/소비자 쌍(producer/consumer pairs)으로부터 명시적으로 취해지거나 또는 상기 쌍으로 전달된다. 이러한 방식은, 예를 들어, 이웃하는 클러스터들의 이웃하는 타일들 또는 커널들(kernels)내에 생산자/소비자 쌍을 위치시킴으로써, 데이터 통신을 컴파일러 레벨로 최적화하도록 하며, 이는 그것을 실제로 사용하는 타일 또는 작업으로의 데이터 전파(data broadcast)를 최소화하도록 한다. 작업들 간의 이러한 명시적이고 최적화된 데이터 통신은 중앙 데이터 풀을 사용하는 것보다 덜 복잡하고 전력 굶주림(power hungry)이 덜하다. 실제로, 전용 마이크로 구조에 의해 유지된 중앙 레지스터 파일은 데이터가 불필요한 전력을 소비하는 모든 파이프라인 단계를 통해 이동하는 것이 필요하다.
클러스터들 간의 통신은 클러스터들 내에서 처리되는 방식과 동일하게 DCL에 의해 처리된다. 도 2에 있어서, 좌우 클러스터들로부터의 2개의 DCL은 타일(3)과 타일(4)에서 각각 종료된다. 이들은 로컬 DCL로서 명령어들에 의해 사용된다. 통신 DCL은 컴파일러에 의해 명확히 가시적이기 때문에, 이웃하는 클러스터들 간의 이러한 제한된 연결은 여러 개의 클러스터에 걸진 스레드를 포괄하기에 충분하며, 최악의 경우 완전히 연결된 크로스바(worst case full-connected crossbar)는 인덱스 레지스터를 필요로하지 않는다. 더욱이, 수행 동기화는 인터 클러스터(inter-cluster) DCL에 의해 처리된다. 이러한 모든 것은 DCL 기반 인터 클러스터 통신을 확장 가능하게 한다.
라이트프로우 프로세서 내에서의 통신에 관한 실시예들은 DCL이라고 하는 점대점 링크에 의해 처리되며, 이들은 명령어들 간의 데이터 통신을 위해 사용된다. 이러한 통신은 타일 내부, 다른 타일들 사이 또는 클러스터들 간에 로컬 방식으로 이루어질 수 있다.
저하된 기능성을 갖는 단순하고 기본적인 DCL의 실시예가 와이어 및 FIFO에 의해 구현될 수 있다. DCL에 대한 이러한 실시예와 관련하여, 많은 데이터 관리 기능이 지원되지 않거나, 또는 FIFO의 둘레 또는 타일 내에 구현될 필요가 없다. 이러한 단순한 실시예와 관련하여, FIFO의 크기는 매우 짧다. 이격된 타일들 간의 파이프라이닝(pipelining)을 위해 보다 큰 FIFO가 사용된다. 도 3(a)는 와이어와 FIFO로 구성되는 단순한 DCL의 실시예를 나타내며, 도 3(b)는 통상적으로 구현된 2-레지스터 FIFO를 나타낸다. 상기 DCL은 주로 2개의 레지스터와, 멀티프렉서(multiplexer) 및 레지스터 콘텐트의 상태를 관리하는 제어기로 구성된다. 단순한 통신 레지스터와 비교하여, 이러한 제한된 DCL 실시예의 최상 경로(critical path)는 FIFO 멀티프렉서에 의해 증가된다.
상기 단순한 DCL의 실시예는 FIFO의 제어 신호를 사용하여 이루어진다. 기록 신호(write signal)는 FIFO 내에 새로운 데이터가 도입되도록 하며, 판독 신호(read signal)은 선입선출의 방식으로 데이터를 제거한다. 풀 및 엠프티(full and empty)의 2가지 부가적인 신호는 FIFO의 상태에 관한 정보를 제공한다. 풀 액티브(full active)는 FIFO에 비어있는 레지스터가 없으며, 미확인 행동을 초래하지 않고 기록되지 않을 수도 있다는 것을 의미한다. 엠프티 액티브(empty active)는 그 출력부에서 분명하게 판독되지 않은 무의미한 데이터를 갖는다. Fig. 3(c)는 이러한 단순한 DCL 실시예를 나타내는 기호를 도시한다.
FIFO 기반 DCL의 사용은 타일 내에서 데이터 유효성에 의해 촉발되는 데이터플로우의 수행을 허용한다. 실제로, FIFO는 일방향으로의 데이터 전송을 수행할 수 있으며, 또한 두 방향으로 제어 정보를 전송할 수도 있다. FIFO가 비어있지 않을 경우, FIFO 말단의 소비자는 엠프티 신호가 리셋될 때 발생하는 계산을 계속 진행할 수 있을지 여부를 알게 된다. 따라서, FIFO의 입력부에는, 단지 데이터를 기록함으로써 그 출력부의 소비자를 촉발시킬 수 있는 생산자로부터의 제어 정보가 전송된다. 반대로, FIFO 출력부의 생산자는, 만재되지 않은 FIFO에 결과를 기록할 수 있는 경우에 한하여, 풀(full) 신호가 리셋될 때 발생하는 계산을 계속 진행할 수 있다. 만약 FIFO가 만재되어 생산자가 계산을 진행할 수 없다면, 기다려야 한다. 여기서, 만재된 FIFO로부터의 데이터를 제거함으로써 생산자의 수행을 촉발시킬 수 있는 제어 정보가 FIFO 출력부의 소비자로부터 전송되어, 생산자로 하여금 계산을 진행하여 그 결과를 기록하도록 한다.
상기 FIFO가 하나 이상의 레지스터를 갖는 경우, 제어를 위한 최상 경로가 입력측 및 출력측 사이에서 분리될 수 있다. 실제로, 만재되지 않은 FIFO는, 그 출력측이 판독될지 여부와 관계없이, 항상 기록될 수 있으며, 비어있지 않은 FIFO는, 그 입력부가 기록될지 여부와 관계없이, 그 출력부에서 항상 유효 데이터를 갖는다. 일반적인 파이프라인 단계는 이러한 분리 메카니즘을 제공하지 않으며, 단계들 간의 제어 신호는 단계들의 경계가 겹치게 함으로써 단계들을 가로지르는 긴 제어 경로를 초래하게 된다. 이러한 결점은 RISC 파이프라인 프로세서에서 문제가 많은 최상 경로를 유발하는 파이프라인 인터록킹(pipeline interlocking)이라 불리운다.
명령어 수행을 명시적으로 제어하는 DCL은 항상 타일에 로컬(local)된다. 이는, 데이터가 항상 명령어에 의해 DCL에 명시적으로 기록되며 다른 명령어에 의해 판독된다는 것을 의미하며, 그 특성은 DCL이 자동으로 데이터를 처리한다는 것이다. 장소가 남아 있는 경우, 데이터는 DCL에 명시적으로 기록되지만, 그 말단에서는 또한 명시적으로 제거된다. 레지스터는, 그 값이 의미 없는 경우라 할지라도, 항상 기록 및 판독될 수 있으며. 중앙 제어기는 그 상태를 인지 및 관리하여야 한다. 라이트프로우 프로세서의 실시예에 있어서, 전체적인 제어는 DCL과 타일의 로컬 명령어 제어 사이에 분배된다. DCL은 데이터를 지연에 둔감한 거래 방식으로 처리하며, 이는 큰 병렬식 플랫폼에 유리하다.
여기서, 상기 DCL 실시예는 제한된 임시 저장 능력을 갖는 통신 리소스(communication resources)에 관한 것이다. 이러한 통신 리소스는 데이터 순서를 유지시키며, 데이터가 DCL내에 기록된 순서는 후에 판독되는 순서와 동일하다. 생산자가 DCL 입력부에서의 기록을 지속하는 동안, DCL 출력부에서 데이터가 판독되지 않으면, 기록 작업은 FIFO가 만재된 이후에 차단된다. 데이터는, 그 전용 링크를 명시적으로 선택함으로써, 이를 통해 특정 타일로 전송된다. 따라서, 레지스터 인덱스(index) 또는 태그(tag) 또는 데이터나 목적지 포트를 구별하기 위한 어드레스를 사용하지 않는다.
명령어 번들은 타일에서의 작업 수행을 지시한다. 모든 명령어는 DCL을 통해 데이터를 명시적으로 전송하며, 데이터 통신은 타일 내부 또는 타일들 사이에 로컬될 수 있다. 이러한 명시적 통신은 명령어들에 의해 특정화된다. 모든 명령어는 DCL로부터 그들의 피연산자를 취하며, 그 결과를 DCL 내에 명시적으로 기록한다. 도 4는 4개의 명령어 타입, 브랜치, 산술, 이동 및 로컬 메모리를 갖는 타일의 실시예를 나타낸다. 이들은 모두 입력 DCL로부터 입력 데이터를 수신하고, 그 결과를 하나 이상의 DCL을 통해 전송한다. 본 실시예에서, 생성된 결과를 재사용 또는 국부적으로 저장하기 위해, 적어도 하나의 DCL이 동일한 타일의 출력부로부터 그 입력부를 향해 폐회로를 형성한다.
DCL 입력부로부터 피연산자를 취하고 DCL 출력부로 결과를 전송할 때, 라이트플로우 실시예에서의 피연산자 및 결과의 처리는 프로그램된 피연산자의 계산과 선택적인 결과의 전파라는 2가지 특이성을 갖는다. 입력 DCL로부터의 데이터가 작업에 사용될 때, 반드시 데이터가 소비되지는 않으며, 이는, 데이터가 사용된 이후 DCL FIFO의 실시예로부터 자동으로 판독되지 않는다는 것을 의미한다. 대신에, 사용된 DCL FIFO 소스를 위해, 명령어는 데이터가 판독되어야 하는 지의 여부를 특정화하며, 이는 복사 작업에 대한 요청 없이 여러 번에 걸쳐 사용하기 위해 DCL 말단에 데이터를 유지시키도록 한다. 결과의 전파와 관련하여, 명령어는 결과가 전송되어야하는 모든 DCL을 명시적으로 특정화한다. 그런 다음, 결과 데이터는 특정화되지 않을 것은 제외한 상기 DCL을 통해서만 전파된다. 따라서, 모든 연결된 목적지 DCL이 아닌 사용된 DCL에서만 스위칭 작동(switching activity)이 존재한다. 회로의 게이팅(gating)은 긴 입구 와이어를 갖는 DCL에서의 스위칭을 방지한다. 명령어에 의해 지시된 선택적 목적지 브로드캐스팅(selective desitnation broadcasting)은 오직 유용한 통신을 위해서만 전력을 소비하도록 한다. 이는 레지스터 파일 기반 구조에서의 최악 조건의 바이패스 네트워크 브로드캐스팅(worst case bypass network broadcasting)과는 완전히 다르다.
선택적 소스 소비(optional source consumption) 및 개별적인 목적지 선택 (individual destination selection)을 구현하는 명령어 실시예의 예가 도 5에 도시되어 있다. 이는 2개의 피연산자가 소요되며 결과를 생성하는 통상적인 산술적 작업이다. 실행을 위한 오피코드 필드 코딩 작업(opcode field coding operation)은 피연산자로서 사용하기 위해 입력 DCL을 선택하는 2개의 소스 필드(src 및 src2)가 따른다. 이러한 2개의 소스와 관련하여, 데이터 피연산자가 DCL로부터 판독되어야 하는지 또는 앞으로의 재사용을 위해 남겨질 수 있는지의 여부를 나타내는 2개의 리드 비트(r1 및 r2)가 존재한다. 마지막으로, N개의 출력부를 위한 사이즈 N의 비트 필드(d1...dN)로서 코딩된 목적지 필드는 각각의 출력 DCL에 대해 결과를 전송할지 여부를 특정화한다. 8개의 입력 DCL, 8개의 출력 DCL 및 8개의 비트 오피코드를 갖는 타일에 대해, 소스 필드는 3비트로, 목적지 필드는 8비트로 코딩되어, 24비트의 산술적 작업으로 이어진다.
라이트플로우 프로세서의 실시예에서 통신이 명시적으로 이루어진다 할지라도, 데이터 변환을 지시하는 명령어는 여전히 계산작업을 진행한다. 통신은 DCL로부터 피연산자를 취하고 이러부터 결과를 전달하는 부수적인 효과로서 주 임무는 아니다. 따라서, 대부분의 통신 및 데이터 이동은 계산 작업을 따라 이루어지며, 전용 통신 프로세서 또는 이종 리소를 필요로 하지는 않는다.
본 실시예의 프로세서 타일은 피연산자 버스 및 결과 버스로 이루어지는 2개의 버스 주변에 구성된다. 피연산자 버스는 작업 입력 포트를 갖는 인입 DCLs 말단부(incoming DCLs extreities)를 연결시킨다. 여기서는 비록 버스라 불리지만, 프로세싱 유닛과 DCLs 간의 제어 전송(control transfer)으로 인해 더욱 복잡해 진다. 각각의 작업은 자신의 피연산자를 취하며, 상기 버스를 통해 결과를 전송한다. 본 실시예에서는 이러한 버스가 간편한 멀티프렉서로 구현된다. 또한, 제어는, 명령어, 입력 데이터의 유효성 및 출력 리소스의 준비에 근거한 타일 레벨로 관리된다. 피연산자의 선택 및 결과의 전파는 계산 작업과는 달리 동일한 싸이클로 실행된다. 대부분의 정수형 산술 작업(integer arithmetic operations)과 이동 및 로컬 메모리 작업은 하나의 싸이클로 수행된다. 더욱 복잡한 작업에 대해서는 수행 유닛이 파이프라인될 수 있다. 메인 메모리 스페이스 어세스(main memory space accesses)는 일반적인 산술 작업과 같이 기능 유닛에 의해 수행되는 로드 스토어 명령어(load store instructions)에 의해 이루어진다. 따라서, 전용 기능 유닛은 DCL에 의해 연결되지 않은 캐시 또는 스크래치 패드 메모리 어레이와 접속하는데 이용된다.
본 실시예에 있어서, 수행 유닛에서의 내부 파이프라인의 사용은, 명령어들이 동일한 목적지 DCL로 동시에 결과를 송부하지 않는 한, 뒤따르는 명령어들의 실행을 차단하지 않는다. 실제로, 실행 유닛 파이프라인 또는 다른 리소스에서 수행되는 복수의 작업이 있는 경우, 타일 제어기는, 명령어들의 목적지 및 명령어의 순서에 의해 규정되며 각각의 DCL에서의 목적지 브로드캐스팅을 보존한다.
상기 라이트플로우 프로세서의 타일 실시예가 도 6에 도시되어 있다. 타일은 T1을 명명되며, 동일 클러스터의 다른 타일(T2, T3, T4)와 연결된다. 상기 타일은 5개의 입력 PCL과 5개의 출력 PCL을 갖는다. 3개의 입력부 및 출력부는 클러스터 내의 다른 타일들과의 통신에 사용되고, 나머지 2의 입력부 및 출력부는 로컬 루핑(local looping) DCL이다. 상기 로컬 DCL은 동일 타일에서 데이터를 재사용하거나 또는 로컬 메모리로부터 데이터를 어세스하는데 필요하다. 상기 도시된 타일은 수행 유닛(EU)과, 2개의 버스 사이에서 수직 화살표에 의해 기호화된 이동 유닛 및 로컬 메모리(LMEM)을 갖는다. 또한, 도면에 도시되지는 않았지만 다음 챕터에서 상세히 설명되는 로컬 브랜치(local branch)와 로컬 명령어도 존재한다. 본 예에서는 각각의 작업 타입에 대해 하나의 인스턴스(instance)가 존재하지만, 타일 내에서 각각의 작업에 대해 여러 개의 인스턴스가 존재할 수도 있다. 예를 들어, 2개의 수행 유닛과 2개의 이동 작업을 가질 수 있으며, 심지어 수행 유닛이 없는 상태로 이동 유닛 및 로컬 메모리만을 가질 수도 있다.
콘디셔널 브랜치(conditional branches)는 그 결과를 결정하기 위해 플래그(flags)를 필요로 한다. 이를 위해, 본 실시예에서는, 데이터 DCL에 의해 연결되는 방식과 같은 방식으로, 1-비트의 전용 플래그 DCL이 타일들 사이에 연결되어 있다. 이러한 플래그 DCL은 도면을 보다 명확히 하고자 도시되지 않았다. 플래그 DCL은 클러스터의 모든 타일이 동일 스레드(thread)를 병렬식으로 수행하도록 한다. 상기 스레드는, 하나의 타일에서 계산되지만 모든 클러스터로 전송되는 결과를 가지고 브랜치 또는 콘디셔널 브랜치에 의해 쉽게 제어될 수 있다.
계산에 의해 생성되어 사용되는 데이터를 위한 파이프라인 레지스터는 DCL에 의해 구현된다. 프로세싱 엘리먼트에 로컬되는 기능 유닛에 내장형(embedded)으로 될 수 있는 것들을 제외하곤, 데이터 처리를 위한 다른 파이프라인 레지스터는 없다. 타일이 자신 또는 다른 타일에 의해 사용되는 결과를 생성하는 경우, 그 결과는 계산 싸이클의 말미에 파이프라인 레지스터를 대신하는 DCL에 저장된다. 도 7에는 2개의 타일들(T1 및 T2)이 도시되어 있으며, DCL은 상기 타일들 사이의 것만이 도시된다. 또한 상기 타일들은 도 6에서와 동일하다.
T1의 수행 유닛은 자신과 T2에 의해 사용될 결과를 생성한다. 따라서, 결과 데이터는 계산 싸이클의 말미에 T1내의 하나의 루프 DCL과 상기 타일들(T1 및 T2) 사이의 DCL을 통해 전송되며, 도면에서는 홀드 라인(hold line)으로 도시된다. 상기 싸이클의 말미에, 상기 데이터는 DCL에 래칭(latched)되며, 바로 다음 싸이클에 상기 2개의 타일에서 이용 가능하게 된다. 복수의 목적지 능력(multiple desitnation capability)은 대부분의 데이터플로우 구조에서와 같은 전용 복사 작업을 이용하지 않고도 데이터 복사를 가능하게 한다.
DCL의 실시예에서, 데이터 통신 경로가 긴 와이어 지연(long wire latency)로 인해 좀더 파이프라인(pipelined)되어야 한다면, 추가되는 파이프라인 단계를 구현하는 FIFO가 사용되며, 이는 이웃하는 클러스터들 간에 통신하는 DCL의 경우에 해당된다. 실제로, 내부 클러스터 통신은 계산 작업과는 달리 동일한 싸이클로 수행되도록 최적화되는 한편, 클러스터 경계부를 가로지르는 DCL은 실시예에 따른 와이어 길이로 인해 데이터 전송을 위해 하나의 완전한 싸이클을 취한다. 도 8에 도시된 바와 같이, 서로에 대해 매우 인접하게 종료되는 DCLs을 갖는 클러스터 타일들을 플로어플래닝(floorplanning) 함으로써 내부 클러스터의 통신 지연을 매우 짧게 이루게 된다. 서브마이크론 기술에서 이용 가능한 복수의 라우팅 레벨로 인해, 도면에 도시된 DCL 길이는 짧아질 수 있으며, 이에 따라 통신 지연을 최상 경로의 비교적 작은 일부로 줄일 수 있다. 도 8에 도시된 바와 같이, 4개의 인터 클러스터 DCLs은 와이어 지연으로 인해 더욱 길고 느려진다.
본 실시예에 있어서, 각각의 클러스터는 글로벌 제어기(global controller)를 사용하지 않고 자신의 코드를 독립적으로 수행한다. 그럼에도 불구하고, 이들은 일반적인 RISC 장치에서와 같이 매 싸이클 마다 명령어를 수행하지는 않는다. 수행은 데이터플로우형 방식으로 이루어지며, 입력 데이터의 유효성과 출력 DCL의 판독에 의해 동기화되며, 이에 의해 명령어들은 대기상태에 들어갈 수 있다. 이러한 데이터플로우형 수행은 단순한 DCL에 내장되는 FIFO에 의해 향상된 데이터플로우형 작동에 의해 가능하게 된다. 생산자는 FIFO를 통해 데이터를 전송함으로써 소비자의 수행작업을 촉발시킬 수 있으며, 소비자는 전체 FIFO로부터 데이터를 제거함으로써 생산자의 수행작업을 촉발시킬 수 있다.
타일에서 수행되는 명령어 번들(bundle)의 일부로서의 명령어들은 그들의 DCL 상태에 따라 독립적으로 수행될 수 있다. 모든 피연산자가 유효하고 모든 목적지가 사용될 수 있는 경우에 작업이 수행될 수 있다. 상기 피연산자가 취해진 모든 입력 DCL이 비어있지 않은 경우 모든 피연산자는 유효하다. 결과가 기록되어야 하는 모든 출력 DCL이 만재되지 않았다면 모든 목적지가 사용될 수 있다. 다중 싸이클 또는 파이프라인된 작업에 위해, 첫 번째 수행 싸이클은 피연산자가 유효해야 하지만, 마지막 수행 싸이클은 단지 준비될 목적지만을 필요로 한다. 여러 개의 작업이 수행중인 경우, 타일 제어기는 목적지 DCL의 기록 순서를 유지한다. 주어진 DCL의 기록 순서는 명령어의 순서에 의해 규정된다.
명령어가 타일내에 페치(fetched)되어 있는 경우, 그 작업들은 동기화되며, 이는, 일단 작업의 모든 DCL이 준비되면, 작업이 수행될 수 있다는 것을 의미한다. 단 하나의 예외는 브랜치 작업들로, 이들은 항상 작업 번들의 마지막 작업으로서 수행된다. 실제로, 브랜치 작업 이후의 싸이클이 수행되면, 새로운 명령어가 타일 제어 레지스터에 겹쳐 기록되며, 이전의 모든 작업들은 수행되었거나 또는 적어도 수행을 시작해야한다. 명령어의 수행은 데이터의 유효성에 따라 여러 싸이클이 소요될 수도 있으며, 모든 데이터 및 출력 DCL이 준비된 상태라면, 일 싸이클로 수행된다.
타일 상에서의 명령어 번들의 명령어 부분은 동기적으로 수행될 수 있으나, 또한 동일한 입력 및 출력 DCL을 공유할 수도 있다. 2개의 작업이 동일한 입력 DCL 및 그에 따른 동일한 데이터를 사용할 수도 있으며, 또한 그들의 결과를 브로드캐스팅하기 위한 동일한 목적지 DCL을 사용할 수도 있다. 어떠한 작업으로 인해 아직 수행되지 않은 다른 작업에 의해 사용되는 데이터가 소비되는 것을 피하며, 공유된 목적지를 위하여, 리소스의 사용이 상충하는 경우 작업 수행은 미리 규정된 순서에 따른다. 일반적으로, 이러한 순서는 명령어 내에 코딩된다. 그럼에도 불구하고, 본 실시예에 있어서, 이러한 순서가 하드웨어에 하드코딩(hardcorded)되지만, 또한 구성 레지스터에 의해 구성될 수도 있다. 본 실시예에서의 이러한 순서는, 먼저 로컬 메모리 어세스, 다음으로, 이동, 산술, 메인 메모리 작업 및 마지막으로 브랜치이다. 이러한 종류의 수행에서, 작업들은 다른 싸이클에 수행되며, 전체 명령어 번들은 완료되기까지 여러 싸이클이 소요된다.
데이터플로우형 동기화를 사용하는 독립적인 타일 수행은 데이터의 종속관계에 따라 동적으로 스케줄링(scheduled)되며, 동적 수행(dynamic execution)의 지연에 대처할 수 있다. 코드는, RISC 구조에서와 같이 스케줄링되는 대신에 타일 상에 놓여 라우팅(routed)되어야 하는 데이터플로우 그래프에 가깝다. 동적 스케줄링의 장점은, 코드가 높(nops)과 함께 패딩(padded)될 필요가 없으며, 또한 소프트웨어 파이프라인된 루프(software-pipelined loops)와 같이 프롤로그(prologues)와 에필로그 (epilogues)를 이용할 필요가 없다는 것이다. 따라서, 이러한 동적 스케줄링은 동종 멀티코어 플랫폼상에 분배된 것과 같은 많은 병렬식 에플리케이션(large parallel applications)에 유용하다.
데이터플로우형 수행은 데드록(deadlocks)과 마주칠 수 있다. 이러한 데이록은, 클러스터를 예기치 못한 긴 대기 상태에 놓이게 하는 매우 높은 지연 I/O 또는 코드에서의 에러에 의해 발생될 수 있다. 코드 에러는, 모든 변수들인 사용되지 전에 규정 및 초기화될 필요가 있는 프로그램의 올바른 순차 목적지로부터 코드를 컴파일링(compiling)함으로써 완화될 수 있다. 그럼에도 불구하고, 코드내에 여전히 데드록 에러(deadlock error)가 존재한다면, 캐시 미스(cache misses)와 같은 긴 지연작업 없이 클러스터의 모든 타일이 대기중이라는 것을 쉽게 감지하게 된다. 따라서, 상기 데드록은 그 발생 이후의 다음 싸이클에서 감지되어 끼어들기(interruption)를 지시하는데 이용될 수 있다. 상기 코드의 에러는 대부분 데드록을 발생시킨다는 점을 주목해야 한다. 이는, 세그먼테이션 오류(segmentation fault)가 수행을 중단시킬 때까지 프로세서가 오랜 시간 동안 작동하여 메모리 내용을 변질시킬 수 있는 순차 레지스터 장치에서와 같은 장치 상태의 변질을 회피할 는 장점이 있다.
예기치 못한 긴 지연 데이터플로우 I/Os는 프로세서로 하여금 정확히 가늠할 수 없는 시간 동안 기다리게 함으로써 계산 작업이 차단된다. 이러한 문제는, 특정 DCL이 준비된 데이터를 가지는지 여부를 시험하는 test_dfl 명령어에 의해 완화된다. 이에 의해, 루프(loop)는, 데이터가 처리될 수 있는지 여부를 체크하기 위해 예기치 못한 I/O를 주기적으로 폴링(poll)할 수 있다. 상기 test_dfl 명령어는, 조건부로 I/O 프로세싱 서브루틴(subroutine)으로 브랜치(branch)하는데 사용될 수 있는 플래그를 발생시킨다.
병렬식 수행 클러스터 상에서의 공간 계산(spatial computation)은 전체 프로세서의 크러스터 위치에 좌우되는 2진수(binaries)를 필요로하는 특성을 갖는다. 주소 재배치 능력(address relocaton capability)과 더불어, 공간적 대상 코드(spatial object code)는 클러스터들 간의 계산작업을 이동시킬 수 있도록 하기 위해 공간 재배치 능력을 필요로 한다. 코드의 이식성(portability)은 포괄적인 디코드(decode) 단계 및 동적 공간 재배치 능력에 의해 가능하게 될 수 있다.
라이트플로우 프로세서에서의 코드 수행은 병렬식이다. 이러한 병렬성은 명령어 번들의 명령어들 사이, 클러스터 타일 상의 명령어들 사이 및 클러스터들 사이에 발생한다. 점대점 데이터플로우 링크는 인덱스에 의하 랜덤 레지스터 어세스를 사용하는 대신에 명시적인 통신과 함께 이용된다. 장기 변수(long-living variable)는 소형의 로컬 메모리에 유지된다. DCL은 데이터를 자동으로 처리하고 모든 단부는 작업에 의해 무작위로 어세스(accessed)될 수 없기 때문에, DCL는 레지스터와는 기본적으로 다르다. DCLs은 로컬되며, 그 대부분은 2개의 다른 타일에 연결된다. DCL FIFO 레지스터는 계산을 위한 파이프라인 레지스터로서 사용된다. 이에 의해, DCL은 대부분의 작업들을 함께 연결시켜, 하나의 작업에 의해 1싸이클 동안 계산된 데이터가 바로 다음 싸이클에서 다른 작업에 사용될 수 있다. 본 실시예에서, DCL에 의한 작업들 간의 통신은 스칼라 RISC 파이프라인 및 VLIW를 위한 바이패스 네트워크와는 달리 동일한 장소에서 이루어지게 되는 것을 볼 수 있다. 차이점으로는, (i) 데이터가 자동으로 처리된다는 점과, (ii) 이들이 수행의 동기화에 사용된다는 점과, (iii) 동적 레지스터의 태그 비교가 없다는 점과, (iv) 데이터가 선택된 점대점 링크를 통해 이동한다는 점과, 마지막으로 (v) 이들이 나중에 레지스터 파일에 답신을 하지 않는다는 점이다. 풀 바이패스 네트워크 브로드캐시트(full bypass network broadcast), 중앙 레지스터 파일 및 그 전용 파이프라인 단계는 많은 전력을 소비하는 것으로 알려져 있으며, 중앙 레지스터 파일을 사용하는 내장형 플랫폼의 전력 효율을 제한한다.
DCL 점대점 네트워크는, 독립적인 수행 타일들 사이에서 데이터가 교환되더라도, 태그 또는 레지스터를 사용하지 않고 데이터를 구별할 수 있게 한다. 타일은 도착 DCL과 DCL 데이터 시퀀시의 순서를 선택함으로써 다른 타일로부터의 데이터를 구별한다. 따라서, 컴파일러 모든 사용되는 타일들을 망라하는 글로벌 수행 내영을 정확히 알고 있어야 한다. 일 예가 도 9에 도시되어 있다.
3개의 타일에서 수행된 작은 프로그램 프래그먼트(program fragment)가 도 9(a)에 도시되어 있다. 타일 1은 데이터 A 및 B를 생성하여 타일 2에 전송하며, 타일 3은 데이터 D를 생성하여 타일 2로 보낸다. 도 9(b)는, NoC의 경우에서와 같이 각각에 타일에서 단일 입구 포트를 갖는 표준 버스 또는 네트워크에 의해 구현된 타일들 사이의 통신 네트워크를 나타내며, 도 9(c)는 네트워크의 점대점 DCL 구현을 도시한다. 타일 1 및 3은 별도의 2개 메모리로부터 데이터 A 및 D를 로딩함으로써 그들의 수행을 시작한다. 캐시 미스(cache miss)의 이슈(issue)뿐만 아니라 독립적으로 코드를 수행하는 2개 타일들로 인해, 데이터 A는 데이터 D이전에, 또는 D가 A이전에 전송될 수 있으며, 정확한 타임 슬롯(time slot)은 데이터에 좌우되며 이에 따라 동적으로 결정된다. 도 9(b)에서와 같이 타일이 독립적으로 제어되는 상태에서 표준 버스 또는 NoC 솔루션(solution)을 사용할 경우, 타일 2로부터 A 또는 D 중에서 어느 것이 먼저 도착하는지를 알 수 있다. 따라서, 데이터 A, B 및 D를 동적으로 구별할 수 있도록 하기 위해, 예를 들어, 로컬 레지스터 위치일 수 있는 인덱스를 구비한 데이터를 태그(tag)하는 것이 필요하다. 도 9(c)에서의 점대점 DCL 네트워크 구현에서, A 및 B는 타일 1로부터 DCL에 도달하는 것이 필요하고, D는 타일 3으로부터 DCL에 도달하는 것이 필요하다. A가 타일 1에서 B 이전에 생성되기 때문에, 타일 1로부터 DCL에 도착 순서는 A에 이어 B가 도착하며, 모든 데이터가 태그를 사용하지 않고 구별될 수 있다.
본 실시예에서는 3가지 타입의 메모리 저장소가 제공된다. 라지 어레이(large arrays)가 스크랩 패드 또는 캐시에 의해 구션된 일반적인 Load/Sotres 작업에 의해 어세스되며, 타일 내의 작은 로컬 메모리는 전용 오퍼레이터 및 DCL 레지스터에 의해 어세스된다. 마지막 2개는 임시 변수를 저장하는데 사용되는 RISC 구조에서 레지스터 파일을 대신하도록 사용된다. 상기 변수는 그 수명에 따라 분류될 수 있다. 매우 짧은 수명의 변수(variables)는 DCL에 단순히 저장되며, 생성된 이후 바로 뒤따르는 작업에 사용될 수 있다. 데이터가 DCL로 부터 자동으로 파괴되지는 않기 때문에, 이들은 여러 번에 걸쳐 사용될 수도 있으며, 여러 개의 작업에 국소적으로 재사용될 수 있다. 다중 출력 DCL에서의 명령어의 브로드캐스트 능력으로 인해, 단일 데이터는 여러 위치에 쉽게 복사될 수 있다. 지속 변수는 그 수명이 지속되는 동안 특정 데이터를 위해 예약되는 DCL 내에 머물 수 있으며, 또한 하나 또는 여러 개 타일의 로컬 메모리에 저장될 수 있다. 일단 어떤 변수가 로컬 메모리에 존재하며, 작업 수행에 사용되기 이전 싸이클에서 판독될 필요가 있다. 따라서, 전용 로컬 메모리 작동은 이전 명령어에서 지시되어야 한다. 클러스터의 전체 데이터 저장소는 로컬 메모리 저장소와 DCL을 포함하며, 이를 통해 모든 것이 무작위로 어세스될 수는 없다.
도 6에 도시된 바와 같이, 8개의 데이터 워드(8 data words)의 로컬 메모리로 가정된 4개의 타일을 갖는 클러스터에는 모두 52개의 데이터 저장소 위치를 갖는 32개의 로컬 메모리 엔트리 및 20개의 DCL이 존재한다. 라이트플로우(LiteFlow) 프로세서 실시예에의 레지스터 사용에 대해 주목해야 할 주요 장점은 데이터플로우 수행이 선천적으로 파이프라인 된다는 것이다. 이는 다중 싸이클 로드와 같은 파이프라인된 긴 지연 작업이 모든 싸이클 마다 수행되도록 하는 한편, 동일한 DCL로 결과를 전송한다. RISC 레지스터 구조에 있어서, 루프 언롤링(loop unrolling)이 사용되어 레지스터 계산작업을 일으키게 된다.
도 10은 본 발명의 다른 실시예를 묘사한다. 본 실시예는 하나의 타일을 갖는 클러스터들로 구성된다. 상기 타일은 타일 제어기 이름 TIC (도 10의 11)에 의해 제어되고, 프로세싱 엘린먼트(도 10의 8)는 로컬 콘트롤 유닛 (CU)(도 10의 5)에 의해 제어되며, 상기 클러스터는 클러스터 제어기 (CLC)(도 10의 12)에 의해 제어된다. 프로세싱 엘리먼트는 프로세싱 엘리먼트 CU의 요청으로 선택 유닛을 통해 피연산자를 취한다. 선택 유닛 및 분배 유닛은 불규칙하며, 이는 모든 DCLs이 모든 프로세싱 엘리먼트 포트에 유효한 것은 아니라는 것을 의미한다. 이러한 특성은 상기 유닛들의 복잡성을 감시시키게 된다. 상기 브랜치 유닛은 프로그램 카운터(program counter)를 유지하며, 명령어 번들 레지스터 (도 10의 18)에 저장하기 위해 다음 명령어 번들의 어드레스(도 10의 15)를 제공한다. 본 실시예에 있어서, 브랜치는 지연될 수 있으며, 정적으로 예측될 수 있다.
본 발명은 또는 새롭고 독창적인 코드 구성에 관된된다. 본 명세서에서 제공된 상기 코드 구성은 본 발명에 따른 타일들을 갖는 클러스터 상에서의 프로그램 운영 또는 프로세싱 엘리먼트 세트를 위한 것이다. 본 명세서에서, 아토믹 명령어(atomic instruction)를 사용하는 대신에, 프로그램이 블록으로 구성되며 2개의 수행 레벨을 갖는다. 첫 번째 레벨을 클러스터에 코드 블록을 로딩한다. 이러한 블록은 각각의 타일을 위한 작고 개별적인 코드 세그먼트(segments)로 구성된다. 두 번째 레벨은 각각의 타일 상에서 각각의 세그먼트를 병렬식으로 수행한다. 상기 첫 번째 레벨은 메인 명령어 메모리 스페이스로부터 수행되는 한편, 두 번째 레벨은 로컬 및 개별적인 어드레스 스페이스를 사용하는 로컬 버퍼(local buffer)로부터 국소적으로 수행된다. 이러한 로컬 어드레스 스페이스는 당면한 타겟 어드레스를 사용함으로써 첫 번째 로컬 브랜치를 허용한다. 일단 일정한 블록이 클러스터에 로딩되었다면, 캐시(cache)로부터의 리로드(reloaded)될 필요 없이 명령어들이 그들의 로컬 메모리로부터 직접 재수행 될 수 있다.
이러한 2개 레벨의 코드 수행은 본 챕터(chapter)의 나머지 부분에 상세히 설명될 3가지 주요 장점을 갖는다. 첫째로, 로컬 명령어 메모리가 루프를 포획하면, 페치(fetch)의 전력 소비가 캐시 어세스보다 훨씬 적은 로컬 메모리 어세스 전력에 의해 지배된다. 둘째로, 로컬 코드의 로컬 브랜치는 재사용되는 루프의 수를 증가시키는 복합 제어 경로를 구현하는 루프를 포획할 수 있도록 한다. 셋째로, 당면한 어드레스를 이용하는 로컬 버퍼에서 콘디션널 브랜치를 수행함으로써, 브랜치로 하여금 매우 제한된 패널티(penalty)를 갖도록 하는 매우 짧은 파이프라인을 허용하며, 이는 중요한 성능 손실을 일으키거나 전력 굶주림 완화 기술을 사용하지 않고 브랜치 인텐시브 코드(branch intensive code)를 수행하도록 한다.
도 11에 도시된 바와 같이, 2가지 수행 레벨이 있다. 첫 번째 레벨에서, 수행 블록(EB)이라 불리는 코드 블록은 메인 명령어 메모리로부터 페치되며, 이들은 서브 수행 블록(SEB)이라 불리는 코드 세그먼트로 구성된다. SEB는 타일 상에서 수행되도록 겨냥된 작은 명령어 세그먼트이다. EB는 상기 메인 명령어 메모리 스페이스로부터 페치되며 그 코드 세그먼트는 클러스터 내의 타일 로컬 버퍼(local buffers)에 분배된다. 두 번째 레벨에서, SEB는 클러스터의 모든 타일 상에서 독립적 병렬 수행된다. 이들의 명령어는 로컬 버퍼로부터 페치되며 타일 수행 파이프라인에서 처리된다.
명령어들이 원자적으로 어드레스 및 수행되는 프로그램을 위한 특별한 어드레스 스패이스는 없다. 또한, EB가 어드레스되는 메인 어드레스 스페이스와, 각각의 SEB에 대해 하나씩 배정되는 다중 로컬 어드레스 스페이스가 존재한다. 2개 레벨의 브랜치가 2개의 수행 레벨과 연관된다. 첫 번째 레벨에서, 브랜치는 EB 간의 수행 플로우를 변경시키며, 타겟 어드레스는 메인 어드레스 스페이스에 표현된다. 두번째 레벨에서, 브랜치는 타일에서 수행된 SEB 내의 수행 플로우를 변경시키도록 하며, 짧은 타겟 어드레스는 로컬 버퍼의 로컬 어드레스 스페이스 내에 표현된다.
2개의 수행 레벨을 구현하는 전체 수행 파이프의 구현이 도 12에 도시되어 있다. 이는 EB 캐시로부터 시작되어 타일 수행 단계에서 종료되는 4개의 단계를 갖는다. 처음 2개의 제1 단계는 EB 수행 레벨에 관한 것이고, 마지막 2개는 SEB 수행 레벨에 관한 것이다. 첫 번째 수행 레벨에서는, 블록이 EB 캐시로부터 페치되며, 그 SEB는 타일 로컬 버퍼에 기록된다. 두번째 수행 레벨에서는, SEB가 클러스터의 각 타일에서 SEB가 독립적으로 수행된다. 도 12에서는 하나의 타일에서 단 하나의 SEB 수행이 제시되어 있다. 다른 타일로의 SEB 분배가 마지막 EB 수행 단계를 떠나는 상태를 나타내는 점선에 의해 표시되어 있다. EB 캐시는 EB 포인터 레지스터(EBP)에 의해 어세스되며, SEB의 명령어들은 SEB 포인터 레지스터(SEBP)에 의해 어세스된다. EB는 파이프라인 의 라인 레지스터(LINE-REG)를 사용하는 캐시로부터 한 줄씩 페치된다.
명령어들은 2개의 스텝(step)으로 디코딩(decoding)되며, EB가 메인 명령어 메모리로부 로딩되어 SEB를 유지하는 로컬 메모리에 기록될 때, 제1 및 메인 디코딩 스텝이 실행된다. 제2 스텝은 명령어가 SEB 버퍼로부터 타일 콘트롤 레지스터로 판독될 때 실행된다. 이러한 2개의 스텝은 도 12에서 잘 알려져 있는 디코드(decode)(1)과 디코드(2)이다. SEB 버퍼에 기록하기 이전에 제1 디코딩 스텝은 대부분의 디코딩 작업을 수행하며, 제2 스텝은 SEB 버퍼에 저장된 명령어들을 단지 확장시킨다. 이러한 제2 스텝은 매우 낮은 복잡성을 갖기 때문에, 전용 파이프라인 단계를 필요로 하지 않고 로컬 버퍼로부터 페치된 명령어들을 즉시 수행하도록 한다. 상기 버퍼내의 압축된 명령어 포맷(format)은 그 사이즈를 적절히 유지시키도록 한다. 이러한 투-스텝(two step) 디코딩 작업은 디코딩 지연과 버퍼 사이즈 사이에서 균형을 이룬다.
SEB는 EB내로 패킹(packed)되며, EB가 수행되는 동안 클러스터 각 타일의 로컬 버퍼에 기록된다. 이들은 프로그램에 의해 수행을 위해 실제 계산작업을 코딩하는 명령어 시퀀스(sequence)로 구성된다. SEB가 수행되는 동안, 명령어들은 SEB 버퍼로부터 페치되어 타일상에서 수행된다. 이러한 투-스텝 디코딩 작업에 의해 전용 디코드 파이프라인 단계가 필요 없게 된다. 더욱이, 타일들이 피연산자를 위한 레지스터 파일을 사용하지 않기 때문에, 레지스터 판독 및 재기록 단계를 필요로 하지 않는다. SEB 수행은 명령어들을 수행하기 위해 단지 2개의 파이프라인 단계를 필요로 하며, 이러한 파이프라인 단계는, 도 12에 도시된 바와 같이, 로컬 명령어 메모리 페치 및 수행과, 로컬 페치/디코드(2)와 수행으로 이루어진다.
SEB는 캐시 메카니즘이 지원되지 않는 스크래치패드(scratchpad)로서 직접 어세스되는 작은 로컬 메모리에 기록된다. 이러한 로컬 메모리는 전용 어드레스 스페이스를 구현한다. 따라서, 상기 SEB 사이즈는 전체 SEB를 유지하도록 충분히 켜야하는 로컬 메모리의 사이즈에 의해 제한된다.
SEB의 수행은 항상 그 첫 번째 명령어에 의해 시작된다. 이 후, 내부 브랜치가 SEB의 어떠한 명령어도 대상으로 삼을 수 있다. SEB 내부에서의 수행 순서는 순차적이다. 이는, 상기 콘드롤 플로우가 브랜치에 의해 방해되지 않는다면, 절대적으로 수행되는 다음 명령어가 다음 어드레스에 위치된 것이라는걸 의미한다. 브랜치가 어떠한 명령어도 대상으로 삼을 수 있기 때문에, 루프 또는 심지어 포대기형 루프(nested loop)는, 명령어 캐시로부터 EB를 반복적으로 리로딩(reload)할 필요 없이, 로컬 SEB 버퍼로부터 반복적으로 수행될 수 있다.
일단 EB가 리로딩되어 그 수행을 시작하면, 모든 SEB가 클러스터의 모든 타일 상에서 병렬적으로 수행된다. SEB 내에서의 수행 순서는 순차적이지만, 다른 SEB에 소속된 명령어들의 수행 순서는 규정되지 않는다. 실제로, 명령의 수행이 그 피연산자의 유효성에 좌우되기 때문에, SEB 내에서의 수행 순서는 코드 세그먼트에서의 그 위치에 의해 보장되지만, 그 실제 수행 타임 슬롯은 그렇지 않다. 명령어의 실제 수행 슬롯은 동적으로 결정되며, 다른 타일로부터 나온 피연산자 의존 특성(operand dependency) 또는 데이터 캐시 미스와 같은 외적 지연에 의해 영향을 받을 수 있다. 도 13은 4개의 타일을 갖는 클러스터에서의 독립적인 SEB 수행의 예를 제공한다.
이러한 예는 FIR 필터 커널(filter kernel)로부터 취해진다. 먼저, 부가물 (addition)에 의해 인덱스 변수를 증가시킨 다음, 마지막으로 이들을 증대시키기 위해 데이터 및 계수를 로딩하며, 그 결과를 누적시킨다. 각각의 SEB는 그들의 제1 어드레스에 위치된 하나의 명령어를 수용한다. 이들은 제1 싸이클 동안 모두 공표되지만, 데이터의 종속 특성으로 인해, 상기 싸이클 동아 모두 수행되지는 않는다. 이들의 실제 수행은 피연산자의 유효성에 의해 촉발되며, 그 수행은 각각의 타일에서 독립적으로 제어된다. 도면의 하부에 위치된 테이블은 각 명령의 수행을 슬롯을 제공하며, 로드 및 MAC 작업에는 2 싸이클이 소요된다. 종속특성에 기인한 데이터 이동은 도면에서 그늘진 화살표로 표시된다. 각각의 타일 및 데이터플로우 수행에서 독립적 수행 제어로 인해, 올바른 수행을 정적으로 계획하기 위한 높(nops)으로 코드 세그먼트를 패딩(pad)하는 것을 필요로 하지 않는 것에 주목해야 한다. 이는 또한 소프트웨어 파이프라인 커널(software piplined kernels)에서 프롤로그(prologue) 및 에필로그(epilogue) 부분에 대한 필요성을 제거하며, 프로그램 명령어 수를 감소시킨다.
SEB의 수행은 항상 그 첫 번째 명령어에 의해 시작된다. 이 후, 내부 브랜치는 자유이며 어떠한 명령어도 대상으로 삼을 수 있다. 브랜치 명령어는 코드 내에서 단독으로 수행되거나, 또는 VLIW 코드에서와 같으며 여전히 단일 타일을 위한 작업 번들의 일부 일 수 있다. 후자의 경우, 그 수행은 명령어의 다른 작업 부분과 동기화되거나 또는 그렇지 않을 수 있다. 동기화되지 않은 경우, 명령의 모든 작업은 즉시 수용되지 않지만, 만약 브랜지 작업이 있다면, 이는 항상 마지막으로 수용된다. 이는 새로운 것을 페치함으로써 불완전하게 완료된 작업의 재기록을 피하는 것이 요구된다.
로컬 명령어 메모리는 로컬 및 전용 어드레스 스페이스를 구현하며, 이러한 어드레스 스페이스는 제한된 사이즈를 가지며 통상적으로 256개의 명령어 보다 적거나 또는 심지어 훨씬 적다. 1바이트 보다 적은 소형 어드레스의 사용으로 인해, 브랜치 타겟 어드레스(branch target addresses)는 즉시값(immediate values)으로서 코드에 직접 제공된다. 실제로, 이렇게 작은 어드레스는, 32 비트의 어드레스 스페이스에서의 경우와 같이, 현재의 다음 어드레스로의 변위를 더함으로써 관련되거나 계산될 필요가 없다.
도 14는 로컬 파이프라인에서의 SEB 브랜치 지원의 구현을 나타낸다. 전용 브랜치 필드는 각각의 명령어를 구비한다. 브랜치 오피코드(branch opcode)와 함께 콘디셔널 브랜치를 위한 즉시 타겟 어드레스(immediate target address)를 수용한다. 로컬 페치 단계의 초기에, 상기 로컬 제어기는 브랜치 오피코드 필드에 좌우되는 멀티프렉서에 의해 현재 명령어의 즉시 어드레스 필드와 다음 SEP 포인터(SEBP) 사이에서 선택한다.
즉시값을 사용하는 이러한 로컬 브랜치는 2가지 장점을 갖는다. 그 첫째는 소비전력에 있으며, 각각의 수행된 명령어를 위한 32비트의 부가물과 각각의 테이큰 브랜치(taken branch)를 위한 다른 별도의 부가물을 요구하는 32비트의 풀 프로그램 카운터(full program counter)를 유지할 필요가 없으며, 브랜치를 위한 부가물도 요구하지 않는다. 두 번째 장점은 지연(latency)이다. 브랜치 타겟 어드레스 계산을 위한 전용 파이프라인 단계를 사용할 필요가 없으며, 이는, 심지어 콘디셔널 브랜치의 경우에도, 지연 없이 즉시 유효한 브랜치를 따른 다음 명령어를 형성한다. 실제로, 도 14에 도시된 바와 같이, 다음 순차 어드레스 또는 브랜치 타겟 어드레스는 로컬 메모리 페치 단계 동안 선택된다. 따라서, 브랜치 명령이 수행될 때 브랜치 콘디션 플래그(branch condition flag)가 알려진다면, 상기 브랜치를 수행하기 위한 패널티는 없다. 브랜치가 수행되는 동안 상기 콘디션 플래그가 계산되어야 한다면, 저가의 정적 예측(low-cost static prediction)에 근거하여 어림짐작(speculation)할 수 있다. 이러한 어림짐작은 페치 단계 동안에만 일어나기 때문에, 수행 단계에서 잘못된 값이 계산되어, 잘못된 어림짐작에 대처하기 위해 복잡한 상태회복 메커니즘을 가질 필요는 없다.
브랜치 필드는 상대적으로 짧으며, 플래그 콘디션 소스(source) 상의 정보, 브랜치 오피코드 및 즉시 타겟 어드레스를 코딩하기 위해 16비트보다 작게 설정되며, 브랜치 작업이 하나의 긴 명령어로서 코딩된 작업 번들내의 산술적 또는 메모리 작업과 함께 패킹되기 때문에, 이러한 제한된 사이즈는 흥미롭다. 패킹된 브랜치 작업은 타이트 루프 커널(tight loop kernels)을 수행할 때 매우 유용하다. 실제로, 브랜치 작업은 커널 작업과 함께 수행되기 때문에, 전용 타입 슬롯을 필요로 하지 않는다. 따라서, 브랜치를 수행하는 것은 제로의 수행지연 오우버헤드(zero executio latency overhead)를 갖는다. 이는, 정적 예측과 함께, 루프 언롤링(unrolling)에 대한 필요성을 없애며, EB 캐시 점유 및 밴드폭을 감소시킨다.
효과적으로 타이트 루프를 수행하기 위해서는 여러 개의 클러스터들에 걸쳐 이어질 수 있는 타일 세트 상에 커널을 대응시키는 것을 필요로 한다. 커널이 대응될 때, 타일당 명령어 수는 감소되며 공간적 계산의 경우 그 수가 하나로 될 수 있다. 이러한 상태에서, 각각의 타일은 단일 명령어를 반복적으로 수행한다. 이전에 설명한 바와 같이, 제로 지연 오우버헤드의 브랜치 수행으로 인해 타일 내에서 단일 명령어 루프로 될 수 있다.
명령어가 SEB 버퍼로부터 페치되기 전에, 타일의 제어 레지스터(CTRL-REG) 내에 이미 존재하고 있는지가 체크된다. 만약 존재하고 있다면, 상기 버퍼는 어세스되지 않으며, 타일 제어 레지스터가 클럭 게이트(clock gated)된다. 따라서, 단일 명령어가 반복적으로 수행될 때의 공간적 계산에는 명령어 파이프라인으로부터동적 소비 전력(dynamic power consumption)이 제로이고, 명령어는 제어 레지스터로부터 직접 재사용된다.
결과적으로, SEB 제안 내의 로컬 브랜치는 지연 및 전력 효율에 있어서의 개선을 크게 이룬다. 실제로, 로컬 브랜치 수행 패널티는 그 방향이 수행전에 알려져 있으면 제로 싸이클이고, 그 방향을 계산해야 하는 경우에는 원(one) 싸이클이다. 후자의 경우, 어림 짐착은 이러한 지연을 숨길 수 있으며, 이는 페치 단계에서만 일어난다. 더욱이, 명령어와 병렬식으로 이루어지는 로컬 브랜치 수행은 브랜치 명령어 자체를 위해 사용된 제로 싸이클을 갖게 된다. 따라서, 매우 작은 커널에서 브랜치 이슈 슬롯(branch issue slot)의 문제를 완벽하게 완화시키며, 언롤링 또는 루프 ILP 변환을 사용할 필요가 없다.
EB는 브랜치를 갖는 수행 플로우를 따라 연속적으로 수행된다. 이러한 EB 수행은 순차적이지 않으며, 이는, 수행할 다음 EB가 다음 어드레스에 위치된 것이 아니라는 것을 함축적으로 의미한다. 현재의 EB가 완료되는 경우, 수행할 다음의 EB는 블록 브랜치의 수행에 의해 명시적으로 결정되어야 한다.
EB는 타일들로 구성된 클러스터 상에서 수행되며, EB의 수행은 프로그램 수행 스레드(thread)에 대응한다. 이러한 수행 모델은, 멀티코어 프로세서가 복수의 제어 스레드를 수행할 때와 같은 방식으로, 멀티-스레딩(multi-threading)을 사용하는 복수의 클러스터 상에서 단일 EB/SEB 기반 프로그램을 수행하도록 한다. 여기서, 각 스레드는 일련의 EB를 수행한다.
EB는 헤더(header)와 여러 개의 SEB 코드 세그먼트로 이루어진다. 상기 헤더는 그 사이즈, 사용된 타일 및 명령어 포맷(format)과 같은 디코딩 정보를 제공한다. 또한, 아래에 설명되는 바와 같이, 다음 블럭의 정적 예측에 관련된 정보가 포함될 수 있다. EB는 클러스터를 위한 SEB 세그먼트를 수용하여 2차원적 코드로 만든다. 일차원은 타일 인덱스에 관한 것이고, 2차원은 SEB 내의 순차적인 명령어 순서에 관한 것이다. 이러한 2차원 코드는 2가지의 구현 결점을 갖는다. 첫째는 캐시 라인 조직이 일부 타일이 사용되지 않을 수도 있는 방식으로 가변되는 클러스터 사이즈를 맞추지 못할 수 있다. 또한, 캐시는 다른 클러스터들에 의해 공유될 수도 있다. 캐시와 타일들 간의 코드 정렬(code alignment)는 덜 수행된 부분에서의 코드 압축(code compaction)을 위한 콤팩트한 명령어 포맷을 사용함으로써 변할 수 있다. 두 번째 결점은, SEB가 같은 EB내에서 매우 다른 사이즈를 가질 수 있다는 점이다. 이러한 이슈로 인해, EB 코드 레이아웃은 고정된 캐시의 구현에 전적으로 좌우되지 않는다. 또한, 엠프티 명령어의 제한된 사용과 함께 다양한 사이즈의 SEB를 나타내는데 유연하게 대처할 수 있다.
상기 EB 코드 레이아웃은 메인 명령어 메모리 스페이스 내의 SEB 명령어의 일차원적 시퀀스로 이루어진다. 명령어들은 상기 EB 내의 관련 어드레스에 의해 순서가 정해진다. 각각의 명령어는, EB가 클러스터 상에 로딩될 때 관련 어드레스와 함께 독립적인 SEB 세그먼트를 구성하도록 하는 SEB 인덱스에 의해 프리픽스(prefix)된다. 이러한 스텝 동안, 도 12에 도시된 제1 EB 디코딩 단계는 그 헤더, 순서 및 프리픽스 인덱스 정보에 근거하여 SEB 명령어들을 각각의 타일로 발송한다. EB 코드 레이아웃의 예가 도 15에 제공된다.
EB 콘텐트가 도 15(a)에 제공되며, 이는 4개의 타일로 구성되는 클러스터용 SEB를 수용한다. 허나, 그 SEB가 반드시 동일한 명령어 수를 갖는 것은 아니다. 그 논리적 콘텐트(logical content)는 도 15(b)에 도시된 SEB 명령어 시퀀스로 구성된다. 하위 어드레스(least significant address)는 라인 내에 있고, 상위 어드레스(most significant address)는 라인 인덱스와 함께 증가하며, 이는, 아토믹(atomic) 명령어가 캐시 인덱스 스페이스에 어드레스되는 것과 같은 방식으로, 각 SEB 명령어에 상대 위치(relative poisition)를 제공한다. 2개의 명령어가 동일한 라인에 속하는 동일한 타일을 겨냥하는 경우, 그 라인의 첫 번째 명령어가 첫 번째로 로딩되고, 두 번째 명령어는 다음 싸이클때까지 기다린다. 이러한 예에서, 도 15(b)의 세번째 라인의 타일(1)과 함께 프리픽스된 2개의 명령어들은 제1 insn (1.2)가 제2 insn(1.3) 보다 선행되도록 순서가 정해진다.
물리적 캐시(cache) 구조의 독립성이 도 15(b) 및 (c)에 도시되어 있으며, 여기에는 동일한 EB가 2개의 캐시 구현물 내에 저장되어 있다. 도 15(b)에는, 캐시 라인이 4개의 명령어 너비로 구성되고, 도 15(c)에는, 캐시 라인이 단지 2개의 명령어 너비로 구성된다. 타일 프리픽스(prefix)를 이용한 제1 디코드 단계에서의 명령어 발송은 타일 얼라인먼트를 유지할 필요 없이 EB 내에 SEB 명령어를 패킹하도록 하며, 그에 따라 코드를 패딩하기 위해 엠프티 명령어(empty instructions)를 사용하도록 한다. 도 15(b) 및 (c)에는 단 하나의 엠프티 명령어가 매우 다른 사이즈를 갖는 도 15(a)의 SEB를 통해 삽입되어야하는 것을 도시하고 있다. 평범하게 정렬된 구현물에서는 14의 유효 명령어에 대해 10개 엠프티 명령어를 필요로 하며, 이에 따라 사용되지 않는 엔트리(entries)가 42%에 이른다.
EB가 수행되는 동안, 도 12에 도시된 LINE-REG 레지스터를 사용하여 EB 캐시로부터 SEB 버퍼로 블록들이 한줄씩 로딩된다. 라인으로 구성된 이러한 블록 레이아웃(block layout)은, 제1 명령어 라인이 EB의 초기에 로딩되었을 때, SEB 수행을 이미 시작하도록 허용한다. 명령어들이 타일들에 대응하여 라인으로 구성되어 있지 않더라도, 디코더는, 각 명령어의 타일 인덱스 프리픽스에 근거하여, 명령어들을 각 타일로 발송한다. 타일 인텍스 프리픽스는 가요적(flexible)이며, 컴파일러가 캐시 사이즈 및 예상 수행 슬롯(probable execution slots)에 근거하여 EB 내에 명령어들을 위치시키도록 한다.
2개의 수행 레벨과 함께 2개의 브랜치 레벨(branch levels)이 있다. 상기 SEB 레벨은 오직 SEB 내에서만 명령어들 간의 브랜치를 허용하는 반면, EB 레벨 에서는 브랜치가 EB들 간에 실행된다. EB 브랜치 명령은 정상적인 명령어 같이 수행되며 SEB의 일부이다. EB가 전체 클러스터용 코드를 제공하기 때문에, EB 브랜치가 일어나는 경우, 클러스터의 모든 타일은 새로운 SEB로 브랜치해야 한다. 각 타일에서의 로컬 제어로 인해, 전용 제어 명령어가 클러스터의 각 타일에서 수행되어야 한다. 그럼에도 불구하고, 타일 내의 모든 브랜치 명령어는 서로 동일하지 않다. 단 하나의 EB 브랜치 명령어가 클러스터의 단 하나의 타일에서 수행되며, 다른 타일들은 EB가 수행되는 동안 로딩되는 다음 SEB를 기다린다. 이러한 SEB에 대한 기다림은 예약된 어드레스를 겨냥하는 로컬 브랜치에 의해 구현되며, 이는, 타일이 수행을 위해 로딩되는 다음 SEB 명령어를 기다린다는 것을 의미한다. 이러한 EB 브랜치의 예가 도 16에 도시되어 있다.
3개의 EB가 그들의 SEB와 함께 도시되어 있다. 본 도면에서, 명령어 프리픽스(prefix)는 블록 브랜치와 관련된 브랜치 필드 콘텐트(content)를 나타낸다. 콘디셔널 브랜치(conditional branch)는 CB로 표시되고, 다른 타일에서 지시된 블록 브랜치에 대한 기다림은 W로 표시된다. 본 실시예에서, isns 1.1과 함께 로컬 콘디션 브랜치(CB)를 수행함으로써 EB 브랜치의 수행이 시작된다. 만약 이것이 취해진다면, 상기 EB 브랜치 명령어 (EB-BR2)가 수행되며, 그렇지 않다면, 뒤따르는 명령어(EB-BR1)가 수행된다. EB-BR1은 EB3를 겨냥하는 한편, EB-BR2은 EB2를 겨냥한다. 이러한 브랜치 결과와 관계없이, 타일(2, 3 및 4)은 새로운 SEB에 대한 대기(wait), 즉 W 브랜치 명령어를 수행함으로써 새로운 SEB를 기다리게 된다. 새로운 SEB에 대한 기다림은 현재 SEB가 완료될 때 수행된다. EB2와 EB3는 언콘디셔널 블록 브랜치(unconditional block branch)(EB-BR)의 수행과 함께 종료된다. 새로운 SEB에 대한 대기, 즉 W는 다음과 같은 2가지 기능을 갖는다는 것에 주목해야 한다: (i) 로컬 SEB 버퍼 메모리(buffer memory)가 수행되지 않은 명령어를 파괴하지 않고 새로운 SEB에 의해 안전하게 겹쳐 쓰이는 것을 허용하는 기능과, (ii) 적어도 첫 번째 명령어가 준비되었을 때 새로운 SEB로 수행을 시작하도록 하는 기능이다.
EB가 캐시(cache) 내에 있으며, 모든 타일에서의 수행이 완료되었을 때, EB 브랜치를 위한 패널티(penalty)는 4 싸이클이다. 첫 번째 싸이클은 EB 제어기에 새로운 어드레스를 제공하는 브랜치 명령어를 수행하기 위한 것이고, 두 번째 싸아클은 EB 캐시로부터 제1 블록 라인을 페치(fetch)하기 위한 것이며, 세 번째 싸이클은 로컬 SEB 버퍼(buffers)에 이를 기록하기 위한 것이고, 마지막으로 네 번째 싸이클은 이러한 명령어를 타일의 타일 제어 레지스터(register)에 국부적으로 페치 및 기록하기 위한 것이다. 그런 다음, 상기 새로운 EB로부터의 첫 번째 명령어가 뒤따르는 다음 싸이클을 수행하기 위해 준비된다. 타일이 준비되면 로컬 SEB 버퍼를 바이패싱(bypassing)함으로써 이러한 브랜치 패널티(penalty)를 3 싸이클로 줄일 수 있으며, 명령어들을 타일 제어 레지스터로 직접 디코딩 및 발송할 수 있다. 이것이 이루어지면, 로컬 브랜치에 의해 첨부할 수 있는 미래의 수행을 위해 로컬 SEB 버퍼에 명령어의 복사가 기록된다.
EB간의 브랜칭(branching) 작업은 EB 브랜치 명령어 수행에서 새로운 SEB 수행에 이르기까지 적어도 3클럭 싸이클이 소요된다. 이러한 지연을 완화시키기 위하여, 상기 로컬 SEB 버퍼는 두개의 SEB를 수용하도록 구성된다. 도 17에 도시된 바와 같이, 상기 로컬 SEB 버퍼는 두개의 SEB, 즉 SEB 0 및 SEB 1을 수용한다. SEB가 수행되는 동안 (1), 새로운 SEB가 버퍼의 제2부분에 위치될 수 있다 (2). 따라서, 새로운 EB는 이전 SEB 바로 이후에 로딩(loaded)되도록 시작될 수 있다. 이것의 장점은, 현재의 SEB가 완료되면, 그 수행 및 새로운 SEB가 준비되며, 이는 패널티 없이 즉시 수행될 수 있다는 것이다. 도면에서 S로 명명된 상태 비트(state bit)는 상기 버퍼의 두 부분을 위한 로컬 어드레스의 최상위 비트(highest order bit)를 제공하며, 이는 상기 버퍼의 두 부분 사이에서 스위치되는 EB 브랜치와 함께 토글(toggled)된다.
현재 EB가 완료되지 않은 상태에서 새로운 EB를 미리 페치(prefetch)하기 위해서는, 상기 EB 수행이 순차적이지 않으며, EB 브랜치 명령어가 아직 수행되지 않았기 때문에, 새로운 어드레스를 제공하는 것이 필요하다. 이러한 어드레스는 수행될 다음 블록으로서 현재 EB의 헤더에 제공된다. 이는 뒤따르는 블록 브런치에 대한 정적 예측에 대응한다. 뒤따르는 다음의 EB 어드레스가 이미 버퍼 내에 있는 2개의 EB 중의 하나와 매치(match)되면, EB 캐시로부터 다시 로딩되지 않으며, 대신에 버퍼로부터 직접 재사용된다. 이러한 블록의 재사용은 일정하게 로딩되는 블록에 대한 패널티를 발생시키지 않고 상기 버퍼의 2 부분을 있는 루프 커널(loop kernel)을 반복적으로 수행하도록 하거나, 또는 SEB 수행을 위해 상기 버퍼의 절반만을 사용하도록 한다. 따라서, 이러한 SEB 버퍼의 2 부분은 온전히 사용될 수 있다.
수행이 예정된 블록의 다음 EB 어드레스는 컴파일 타임(compile-time)에 현재 블록의 헤더에 기록된다. 따라서, 컴파일러는 그 어드레스가 헤더 내에 이미 존재하고 있다는 것을 알고 있기 때문에, 이러한 블록을 겨냥하고 있는 EB 브랜치 명령어는 이러한 어드레스를 다시 제공할 필요가 없다. 이에 따라, 상기 EB 브랜치 명령어들은 예약된 로컬 타겟 어드레스를 겨냥하고 있는 로컬 브랜치 명령어로서 단순하게 구현된다. 이러한 로컬 브랜치 명령어가 수행될 때, 이는, 이미 버퍼 에서 다음으로 예측된 블록 어드레스를 대상으로 삼는 블록 브랜치로 이해된다. 더욱이, 이는 상기 버퍼의 다른 부분의 첫 번째 명령에 대한 로컬 브랜치 명령어로서 수행될 수 있다. 따라서, 정적인 다음 블록의 예측(static next block prediction)이 올바르고, 적어도 첫 번째 다음 SEB 명령어가 프리페치(prefetched)되었거나, 또는 상기 버퍼에서 유효하다면, 블록 브랜치 패널티는 제로 싸이클인 로컬 브랜치 패널티와 동일하다.
비록 본 발명이 양호한 특정 버젼을 참조하여 상세히 설명되었지만, 다른 버젼들도 가능하다. 따라서, 첨부된 청구범위의 정신 및 범주는 이러한 양호한 버젼의 설명에 한정되지 않는다.
독자(reader)의 관심이 본 명세서와 함께 제출되었으며 본 명세서와 함께 대중에 공개된 모든 논문 및 문헌들로 향하며, 이러한 모든 논문 및 문헌의 내용이 여기에 참조로 병합되어 있다. (첨부된 특허청구 범위, 요악서 및 도면을 포함하는) 본 명세서에 기술된 모든 특징은, 분명하게 달리 언급되지 않는 한, 동일, 균등 또는 유사한 목적을 수행하는 다른 특징에 의해 대체될 수도 있다. 또한, 분명하게 달리 언급되지 않는 한, 기술된 각각의 특징은 일련의 균등 또는 유사한 특징들의 일 예이다.
참조문헌
21. 에이. 제라야(A. Jerraya) 및 더블유. 울프(W. Wolf), "멀티플로세서 시스템 온 칩스(Multiprocessor System-on-Chips)". 엘세비어(Elsevier)사, 2004.
31. 비. 보가드(B. Bougard), 드 슈터(De Sutter), 디. 베르케스트(D. Verkest), 반 데어 피르(Van der Perre) 및 알. 로위레인스(R. Lauwereins), "소프트웨어 기반 라디오 베이스밴드 프로세싱을 위한 콜스-그레인 어레이 가속기(A Coarse-Grained Array Accelerator for Software-Defined Radio Baseband Processing)", 마이크로(Micro), IEEE, 28권, 31-50페이지, 2008년 7-8월.
32. 에이취. 싱(H. Singh), 엠. 에이취. 리(M. H. Lee), 지. 루(G. Lu), 에프. 쿠르다히(H. Kurdahi), 엔. 바게르짜데(N. Bagherzadh) 및 이. 케이브즈 필호(E. Chaves Filho), "몰포시스: 데이터 병렬 및 계산 집중적 어플리케이션을 위한 집적 재구성 시스템(MorphoSys: an integrated reconfigurable system for data-parallel and computation-intensive application)", 컴퓨터스(Computers), IEEE 저널(IEEE Transactions on), 49권, 465-481페이지, 2000년 5월.
33. 브이. 바움가르트(V. Baumgarte), 지. 엘러스(G. Ehlers), 에프. 메이(F. May), 에이. 엔. 엠. 보르바흐(Vorbach) 및 엠. 바인하르트(M. Weinhardt), "FACT XPP- 자체-재구성 가능한 데이터 프로세싱 구조(self-reconfigurable data processing architecture)", 슈퍼컴퓨팅 저널(The Journal of Supercomputing), 26권, 167-184페이지, 2003년 9월.
34. 피. 헤이스터스(P. Heysters), 지. 슈미트(G. Smit), 이. 몰렌캄프(ㄸ. Molenkamp) 및 지. 로베르다(G. Rauwerda), "Montium 콜스 그레인식 재구성 가능한 프로세싱 타일의 유연성(Flexibility of the Montium Coarse-Grained Reconfigurable Processing Tile)", 내장형 시스템(embedded system)에 관한 4차 프로그레스 심포지움, 뉴바겐, 네델란드, 102-108페이지, 2003년.
35. 엠. 버트(M. Butts), "대량 병렬 프로세서 어레이에서 통신을 통한 동기화(Synchronization through Communication in a Massively Parallel Processor Array)", 마이크로, IEEE, 27권, 32-40페이지, 2007년, 9-10월.
37. 엠. 테일러(M. Taylor), 제이. 킴(J. Kim), 제이. 밀러(J. Miller), 디. 벤쯔라프(D. Wentzlaff), 에프. 고드라트(F. Ghodrat), 비. 그린발트(B. Greenwald), 에이취. 호프만(H. Hoff-man), 피. 존슨(P. Johnson), 제이. 더블유. 리(J.W. Lee), 더블유. 리(W. Lee), 에이. 마(A. Ma), 에이. 사라프(A. Saraf), 엠. 세네스키(M. Seneski), 엔. 슈니드만(N. Shnidman), 브이. 스트럼펜(V. Strumpen), 엠. 프랜크(M. Frank), 에스. 아마라싱(S. Amarasinghe) 및 에이. 아가르발(A. Agarwal), "로 마이크로프로세서: 소프트웨어 회로 및 범용 프로그램을 위한 계산 패브릭(The Raw microprocessor: a computational fabric for software circuits and general-purpose programs)", 마이크로, IEEE, 22권, 25-35페이지, 2002년, 3/4월.
60. 에프. 파스리차(S. Pasricha) 및 엔. 듀트(N. Dutt), "온-칩 통신 구조: 시스템 온 칩 상호접속(On-chip communication architectures: system on chip interconnect)", 모간 카우프만(Morgan Kaufmann), 2008년.
61. 엘. 베니니(L. Benini) 및 지. 디. 미셀(G. D. Micheli), "네트워크 온 칩스: 기술 및 도구(Networks on Chips: technology and tools)", 모간 카우프만(Morgan Kaufmann), 2006년.
64. 엠. 테일러(M. Taylor), 제이. 프소타(J. Psota), 에이. 사라프(A. Saraf), 엔. 슈니드만(N. Shnidman), 브이. 스트럼펜(V. Strumpen), 엠. 프랭크(M. Frank), 에스. 아마라싱(S. Amarasinghe), 에이. 아가르발(A. Agarwal), 더블유. 리(W. Lee), 제이. 밀러(J. Miller), 디. 베쯔라프(D. Wentzlaff), 아이. 브라트(I. Bratt), 비. 그린발트(B. Greenwald), 에이취. 호프만(H. Hoffmann), 피. 존슨(P. Jhonson) 및 제이. 킴(J. Kim), "로 마이크로프로세서의 평가: ILP 및 스트림을 위한 노출-와이어-지연 구조(Evaluation of the Raw microprocessor: an exposed-wire-delay architecture for ILP and streams)", 컴퓨터 구조, 2004년. 31차 연례 국제 심포지움, 2-13페이지, 2004년 6월.
66. 엠. 버츠(M. Butts), 에이. 엠. 존스(A. M. Jones) 및 피. 왓슨(P. Wasson), "재구성 가능한 컴퓨팅을 위한 구조적 목적 프로그램 모델, 구조, 칩 및 공구(A structural object programming model, architecture, chip and tools for reconfigurable computing)", 필드-프로그램 가능한 커스텀 계산 장치, 연례 IEEE 심포지움, 0권, 55-64페이지, 2007년.
67. 디. 키슬러(D. Kissler), 에프. 하니그(F. Hannig), 에이. 쿠프리야노프 (A. Kupriyanov) 및 제이. 타이크(J. Teich), "A dynamically reconfigurable weakly programmable processor array architecture template", 재구성 가능한 통신 중심 시스템-온-칩스에 대한 국제 워크샵(RecoSoC), 31-37페이지, 2006년.
71. 알. 바즈바(R. Bajawa), 엠. 히라키(M. Hiraki), 에이취. 코지마(H. Kojima), 디 고르니(D. Gorny), 케이. 니타(K. Nitta), 에이. 슈리드하르(A. Shridhar), 케이. 세키(K. Seki) 및 케이. 사사키(K. Sasaki), "신호 프로세싱을 위한 프로세서에서의 전력 감소를 위한 명령어 버퍼링(Instruction buffering to reduce power in processors for signal processing)", 초고밀도 집적 회로 시스템(Very Large Scale Integration Systems), IEEE 저널, 5권, 417-424페이지, 1997년 12월.
72. 엠. 자야팔라(M. Jayapala), 에프. 바래트(F. Barat), 티. 밴더 아(T. Vander Aa), 에프. 캐토어(F. Catthoor), 에이취 코포랄(H. Corporaal) 및 지. 데코닌크(G. Deconinck), "저 에너지 VLIW 임베디스 프로세서를 위한 클러스터된 루프 버퍼 구조(Clustered loop buffer organization for low energy VLIW embedded processors)", 컴퓨터스, IEEE 저널, 54권, 672-683페이지, 2005년 1월.
73. 디. 브이. 아(D. V. Aa), 엠. 자야팔라(M. Jayapala), 에이취 코포랄(H. Corporaal), 에프. 캐토어(F. Catthoor) 및 지. 데코닌크(G. Deconinck), "명령어 메모리 에너지에 대한 ILP 개선 코드 변환의 임팩트(Impact of ILP-improving Code Transformations on Instruction Nemory Energy)", 컴플라이어 및 구조 간의 상호작용에 대한 11차 워크숍(in Proc. of 11th Workshop on Interaction between Compilers and Architectures)(INTERACT-11), 443-448페이지, 2007년.
78. 제이. 데니스(J. Dennis) 및 디. 미서너스(D. Misnunas), "기본 데이터 프로세서를 위한 예비 구조(Apreliminary architecture for a basic data-ow processor)", ACM SIGARCH 컴퓨터 구조 뉴스, 3권, 126-132페이지, 1974년.
79. 지. 파파도폴로스(G. Papadopoulos) 및 디. 컬러(D. Culler), "몬순: 명시적 토큰-스토어 구조(Monsoon: an explicit token-store architecture)", 컴퓨터 구조에 대한 17차 연례 국제 심포지움(in Proceedings of the 17th annual international symposium on Computer Architecture), ACM 뉴욕(New York), 뉴욕, 미국, 1990년.
80. 에이. 데이비스(A. Davis), "DDM1의 구조 및 시스템 방법: 재귀적으로 구성된 데이터 구동 장치(The architecture and system method of DDM1: A recursively structured Data Driven Machine)", 컴퓨터 구조에 대한 5번째 연례 국제 심포지움(in Proceedings of 5th annual international symposium on Computer architecture), 210-215페이지, ACM 뉴욕, 뉴욕, 미국, 1978.
81. 엠. 키쉬, (M. Kishi), 에이취. 야스하라(H. Yasuhara) 및 와이. 카와무라(Y. Jawamura), "Dddp-분배된 데이터 구동 프로세서(Dddp-a distributed data driven processor)", 컴퓨터 구조에 대한 10번째 연례 국제 심포지움(in Proceedings of 10th annual international symposium on Computer architecture), 236-242페이지, ACM 뉴욕, 뉴욕, 미국, 1983.
82. 엠. 아마미야(M. Amamiya), 엠. 타케스에(M. Takesue), 알. 하세가와(R. Hasegawa) 및 에이취. 미카미(H. Mikami), "DFM: the data ow machine highly parallel symbol manipulation", 익스플로링 기술에 관한 1987년도 폴 조인트 컴퓨터 콘퍼런스: 오늘과 내일(in Proceedings of the 1987 Fall Joint Computer Conference on Exploring technology: today and tomorrow), 602-611 페이지, IEE computer Society Press Los Alamitos, 캘리포니아, 미국, 1987.
83. 와이. 패트(Y. Patt), 더블유. 휴(W. Hwu) 및 엠. 쉐바나우(M. Shebanow), "HPS, 새로운 마이크로구조: 이유 및 소개(a new microarchitecture: rationale and introduction)", 마이크로프로그래밍에 관한 18차 연례 워크숍(in Proceedings of the 18th annual workshop on Microprogramming), 103-108페이지, ACM 뉴욕, 뉴욕, 미국, 1985년.
84. 와이. 패트(Y. Patt), 에스. 멜빈(S. Melvin), 더블유. 휴(W. Hwu) 및 엠. 쉐바나우(M. Shebanow), "HPS에 관한 중요 이슈, 고성능 마이크로구조(Critical issue regarding HPS, a high performance microarchitecture)", 마이크로프로그래밍에 관한 18차 연례 워크숍(in Proceedings of the 18th annual workshop on Microprogramming), 109-116페이지, ACM 뉴욕, 뉴욕, 미국, 1985년.
85. 에스. 바이스(S. Weiss) 및 제이. 스미스(J. Smith), "파이프라인된 수퍼컴퓨터를 위한 명령어 발급 논리(Instruction issue logic for pipelined supercomputers)", ACM SIGARCH 컴퓨터 구조 뉴스, 12권, 110-118페이지, 1984년.
86. 제이. 스미스(J. Smith) 및 지. 소히(G. Sohi), "수퍼스칼러 프로세서의 구조(The microarchitecture of superscalar processors)", Proceedings of the IEEE, 83권, No, 2, 1609-1624페이지, 1995년.
87. 알. 토마스로(R. Tomasulo), "복수의 산술적 유닛을 이용하기 위한 알고리즘(An e#cient algorithm for exploiting mulitple arithmetic units)", 연구개발에 관한 IBM 저널(IBM Journal of research and Development), 11권, no. 1, 25-33페이지, 1967년.
88. 알. 케슬러(R. Kessler) 등, "알파 21264 마이크로프로세서(The alpha 21264 microprocessor)", IEEE micro, 19권, no.2, 24-36페이지, 1999년.
89. 에스, 펄링(S. McFarling), "컴파이닝 브랜치 예측기(Combining branch predictors)", tech. rep., 테크니컬 리포트 TN-36, 디지털 웨스턴 연구소(Digital Western Research Laboratory), 1993.
90. 제이. 스미스(J. Smith) 및 에이. 플레즈쿤(A. Pleszkun), "파이프라인된 프로세서에서 정밀한 인터럽트 구현(Implementing precise interrupts in pipelined processors)", 컴퓨터에 관한 IEEE 저널(IEEE Transactions on Computers), 37권, no. 5, 562-573페이지, 1988년.
91. 에스. 스완슨(S. Swanson), 케이. 미켈슨(K. Michelson), 에이. 쉬베린 (A. Scherin) 및 엠. 오스킨(M. Oskin) "웨이브스칼라(WaveScalar)", 마이크로구조에 관한 36차 국제 심포지움(in Proceedings of the 36th International Symposium on Microarchitecture), 싸이트시어(Citeseer), 2003년.
92. 에스. 스완슨(S. Swanson), 에이. 쉬베린 (A. Scherin), 엠. 메르칼디 (M. Mercaldi), 에이. 피터슨(A. petersen), 에이. 풋남(A. Putnam), 케이. 미켈슨(K. Michelson), 엠. 오스킨(M. Oskin) 및 에스. 에거스(S. Eggers), "웨이브스칼러 구조(The wavescalar architecture)", 컴퓨터 시스템에 관한 ACM 트랜섹션 (ACM Transactions on Computer System), 25권, no. 2, 4페이지, 2007년.
93. 케이. 카비(K. Kavi), 알. 조지(R. Giorgi) 및 제이. 아룰(J. Arul), "스케줄드 데이터 ow: 수행 패러다임, 구조 및 성능 평가(Scheduled data ow: execution paradigm, architecture, and performance evaluation)", 컴퓨터에 관한 IEEE 트랜섹션(IEEE Transactions on Computers), 834-846페이지, 2001년.
94. 케이. 산카라린감(K. Sankaralingam), 알. 나가라얀(R. Nagarajan), 에이취. 리우(H. Liu), 씨. 킴(C. Kim), 제이. 휴(J. Huh), 디. 버거(D. Burger), 에스. 케클러(S. Keckler) 및 씨. 무어(C. Moore), "Exploiting ILP, TLP, and DLP with the polymorphous TRIPS architecture", 컴퓨터 구조에 관한 30차 연례 국제 심포지움(in Proceedings of the 30th annual international symposium on Computer architecture, 433페이지, AC<, 2003년
95. 엠. 홈우드(M. Homewood), 디. 메이(D. May), 디. 쉐퍼드(D. Shepherd) 및 알. 쉐퍼드(R. Shepherd), "The IMS T 800 transputer", IEEE micro, 7권, no. 5, 10-26페이지, 1987년.
96. 에이. 둘러(A. Duller), 지. 패너서(G. Panesar) 및 디. 타우너(D. Towner), "병렬 프로세싱-피코칩 방식(Parallel Processing-the picoChip way)", 통신 프로세싱 구조(Communicating Processing Architectures), 125-138페이지, 2003년.
97. 제트. 유(Z. Yu), 엠. 뮤센(M. Meeuwsen), 알. 애퍼슨(R. Apperson), 오. 사타리(O. Sattari), 엠. 라이(M. Lai), 제이. 웹(J. Webb), 이. 워크(E. Work), 디. 트루옹(D. Truong), 티. 모세닌(T. Mohsenin) 및 비. 바스(B. Baas), "AsAP: 단순 프로세서의 비동기 어레이(An asynchronous array of simple processors)", 고체 상태 회로의 IEEE 저널(IEEE Journal of Solid State Circuits), 43권, no. 3, 695페이지, 2008년.
98. 엠. 버트(M. Butts), 비. 버드롱(B. Budlong), 피. 왓슨(P. Wasson) 및 이. 화이트(E. White), "대량 병렬식 프로세서 어레이에 관한 재구성 가능한 워크 파암스(Reconfigurable Work Farms on a Massively Parallel Processor Array)", in Field-Programmable Custom Computing machines, 2008년. FCCM '08. 16차 국제 심포지움, 206-215페이지, 2008년 4월.
99. "Tilera."http://www.tilera.com.
100. 씨. 모리쯔(C. Mritz), 디. 예웅(D. Yeung) 및 에이. 아가왈(A. Agarwal), "로 마이크로프로세서를 위한 익스플로어링 최적 코스트-성능 설계(Exploring optimal cost-performance designs for Raw microprocessors)", in FPGAs for Custom Computing Machines, 1998년. Proceedings. IEEE Symposium on, 12-27페이지, 1998년 4월.
101. 에이취. 코포럴(H. Corporaal) 및 에이취. 무들러(H. Mulder), "MOVE: 고성능 프로세서 설계를 위한 프레임워크(A framework for high-performance processor design)", 수퍼컴퓨팅에 과한 1991 ACM/IEEE 콘퍼런스(in Proceedings of the 1991 ACM/IEEE conference on Supercomputing), 692-701페이지, ACM 뉴욕, 뉴욕, 미국, 1991년.
102. 에이취. 코포럴(H. Corporaal) 및 엠. 아놀드(M. Arnold), "Using tarnsport triggered architectures for embedded processor).
103. 제이. 라이텐(J. Leijten), 제이. 반 미어베르겐(J. van Meerbergen), 에이. 타이머(A. Timmer) 및 제이. 제스(J. Jess), "PROPHID: 고성능 DSP용 데이터구동 멀티프로세서 구조(a datadriven multi-processor architecture for high-performance DSP)", 설계 및 테스트에 관한 1997년 유럽 콘퍼런스(in Proceedings of the 1997 European conference on Design and Test)", IEEE Computer Society Washington, DC, 미국, 1997년.
104. 케이. 구센스(K. Goossens), 제이. 딜리센(J. Dielissen) 및 에이. 라둘리스(A. Radulescu), "Aethereal network on chip: concepts, architectures, and implementations", IEEE Design and Test of Computers, 22권, no. 5, 414-421, 2005년.
105. 더블유, 휴(W. Hwu), 에스. 말케(S. Mahlke), 더블유. 첸(W. Chen), 피. 창(P. Chang), 엔. 발터(N. Warter), 알. 브링만(R. Bringmann), 알. 오울릿트(R. Ouellette), 알. 한크(R. Hank), 티. 키요하라(T. Kiyohara), 지. 합(G. Haab) 등, "수퍼블록: VLIW 및 수퍼스칼러 편집을 위한 효과적인 기술(The superblock: an effective technique for VLIW and superscalar compilation)", 수퍼컴퓨팅 저널(The Journal of Supercomputing), 7권, no. 1, 229-248페이지, 1993년.
1: 타일 2: 명령어 메모리
3: 레지스터 4: 명령어 메모리
5: 프로세싱 엘리먼트 6: 데이터 통신 링크
7: 로컬 데이터 저장소 8: 입력 데이터 통신 링크
9: 출력 데이터 통신 링크 10: 클러스터

Claims (13)

  1. 명령어 번들(bundle)의 단일 스레드로부터의 명령들을 병렬로 수행하도록 하는 프로세서로서,
    하나 이상의 명령어를 포함하는 다수의 명령어 번들을 포함하는 명령어 메모리와;
    데이터를 저장할 수 있으며, 이하 데이터 통신 링크라 불리우는 다수의 점대점 통신 수단; 및,
    이하 프로세싱 엘리먼트라 불리우는 다수의 프로세싱 수단을 포함하고,
    상기 데이터 통신 링크는, 기록 작업을 수행함으로써 데이터가 기록될 수 있으며 기록 작업의 유효성에 관한 정보를 얻을 수 있는 기록 포트와, 판독 작업을 수행함으로써, 상기 기록 포트에서 미리 실행된 기록 작업의 순차와 관련하여 미리 규정된 순서에 따라 데이터가 판독될 수 있고 판독 작업의 유효성에 관한 정보를 얻을 수 있는 판독 포트를 포함하며,
    상기 명령어 번들의 단일 명령어는, 하나 이상의 데이터 통신 링크의 판독 포트들로부터 독점적으로 얻어진 입력 데이터를 처리하고, 또한 상기 수행에 의해 생성된 데이터를 하나 이상의 상기 데이터 통신 링크 기록 포트들에 독점적으로 기록함으로써 수행되고,
    상기 입력 데이터를 제공하는 판독 포트는 명령어 데이터에 근거하여 선택되고,
    결과가 기록되는 상기 기록포트는 명령어 데이터에 근거하여 선택되며,
    상기 데이터 통신 링크에 저장된 데이터는, 명령어 데이터에 근거하여 상기 데이터 통신 링크에 의해 제공된 판독 및 기록 작업을 수행함으로써 명시적으로 관리될 수 있으며,
    상기 명령어 데이터는,
    수행하려는 작업을 규정하는 하나의 필드와,
    각 피연산자당 하나씩인 각 필드는 제1 및 제2의 2진수를 포함하며, 제1의 2진수는 상기 피연산자를 얻기 위하여 상기 명령어를 수행하는 프로세싱 엘리먼트에 의하여 선택될 데이터 통신 링크 판독포트를 규정하고, 제2의 2진수는 판독 작업이 상기 판독포트 상에서 수행되어야 하는지를 나타내는 다수의 필드와,
    다수의 비트를 포함하는 단일 필드로서, 각 비트는 각 프로세서 데이터 통신 링크에 관한 것이며, 각 비트는 작업결과가 상기 데이터 통신 링크의 해당 기록 포트에 기록되어야 하는 것인지를 규정하며,
    상기 프로세싱 엘리먼트에서 수행된 명령어들 간의 데이터 통신은 상기 데이터 통신 링크들을 사용하여 실행되고,
    상기 프로세싱 엘리먼트 상에서의 명령어 수행은 데이터 통신 링크에 의해 제공된 판독 및 기록 작업 유효성 정보에 근거하여 동기화되며,
    상기 프로세싱 엘리먼트들 중의 하나가, 수행해야 할 다음의 상기 명령어 번들의 어드레스를 제공하는 브랜치 유닛으로서 존재하는 것을 특징으로 하는 프로세서.
  2. 제 1 항에 있어서,
    하나 이상의 스레드로부터의 다수의 명령어 번들을 저장하는 하나 이상의 명령어 메모리를 포함하며,
    프로세서는 명령어 번들의 하나 이상의 스레드로부터의 명령들을 병렬로 수행하며,
    각 명령어 메모리에 대하여, 상기 프로세싱 엘리먼트들 중의 하나가, 수행해야 할 다음의 상기 명령어 번들의 어드레스를 제공하는 브랜치 유닛으로서 존재하는 것을 특징으로 하는 프로세서.
  3. 제2항에 있어서,
    상기 프로세싱 엘리먼트는 타일들 내에 그룹화되며,
    상기 데이터 통신 링크의 판독 포트 세트는 타일 입력부에 연결되어, 상기 타일 프로세싱 엘리먼트들 사이에서 공유되고,
    상기 데이터 통신 링크의 기록 포트 세트는 타일 출력부에 연결되어, 상기 타일 프로세싱 엘리먼트들 사이에서 공유되며,
    하나 이상의 상기 데이터 통신 링크는 하나의 타일 출력부에 연결된 기록 포트와, 다른 타일의 입력부에 연결된 판독 포트를 구비하고,
    동일한 타일에서 수행되는 명령들은 상기 수행된 명령어 데이터에서 특정화된 우선순위에 근거하여 미리 규정된 순서를 따르는 것을 특징으로 하는 프로세서.
  4. 제3항에 있어서,
    타일들은 복수 개의 클러스터로 더 그룹화되며, 각 클러스터는,
    한 개의 명령어 메모리와,
    한 개의 브랜치 유닛 프로세싱 엘리먼트를 구비하고,
    상기 클러스터의 명령어 메모리는 클러스터의 브랜치 유닛에 의해 제공된 어드레스에 근거하여 각각의 클러스터 타일에 명령어 번들을 제공하는 것을 특징으로 하는 프로세서.
  5. 제4항에 있어서,
    상기 프로세싱 엘리먼트들의 일부는 프로그램 지속 변수를 저장하도록 하는 저장 수단인 것을 특징으로 하는 프로세서.
  6. 제5항에 있어서,
    데이터 통신 링크는 부가적인 작업을 수행할 수 있으며, 상기 부가적인 작업은,
    상기 통신 링크에 저장된 데이터를 소비하지 않는 데이터 판독 작업과;
    기록 작업이 유효하지 않을지라도, 상기 데이터 통신 링크에서 기록 작업을 강제하는 데이터 기록 작업; 및
    상기 데이터 통신 링크에 저장된 모든 데이터를 삭제하는 플러쉬 작업을 포함하는 것을 특징으로 하는 프로세서.
  7. 제6항에 있어서,
    각각의 프로세싱 엘리먼트는, 명령어 데이터와, 프로세싱 엘리먼트의 입력 데이터 통신 링크의 판독포트 유효성 정보 및, 프로세싱 엘리먼트의 출력 데이터 통신 링크의 기록포트 유효성 정보에 근거하여 제어 신호를 제공하는 하나의 제어 수단을 더 포함하며,
    각각의 타일은, 프로세싱 엘리먼트에서 명령어 수행의 조정을 처리하기 위한 제어 신호를 제공하며, 또한 상기 프로세싱 엘리먼트에서 수행되는 명령어에 대한 마지막 수행 싸이클을 통지하는 제어 신호를 제공하는 하나의 제어 수단을 더 포함하고,
    각각의 클러스터는, 상기 타일 제어 수단에 의해 제공된 제어 신호에 근거하여, 상기 클러스터가 다음 명령어를 수행하도록 한다는 것을 통지하는 제어신호를 제공하는 제어 수단을 더 포함하는 것을 특징으로 하는 프로세서.
  8. 제7항에 있어서,
    모든 제어 수단들은 하나의 단일 제어 수단으로 집중화되는 것을 특징으로 하는 프로세서.
  9. 제7항에 있어서,
    각각의 타일은 하나의 선택 수단 및 하나의 분배 수단을 더 포함하며,
    상기 하나의 선택수단은,
    상기 데이터 통신 링크의 판독 포트에 연결된 하나 또는 여러 개의 입력 포트와,
    프로세싱 엘리먼트의 입력부에 연결된 하나 또는 여러 개의 출력 포트를 포함하며,
    상기 프로세싱 엘리먼트 제어 수단으로부터의 제어 신호에 근거하여, 하나 이상의 상기 데이터 통신 링크 판독 포트의 판독 작업 유효성에 대한 정보가 상기 프로세싱 엘리먼트의 각각의 제어 수단에 제공되며,
    하나 이상의 상기 데이터 통신 링크의 판독 포트로부터의 데이터가, 상기 프로세싱 엘리먼트의 제어 수단으로부터의 제어 신호에 근거하여, 상기 프로세싱 엘리먼트의 각 입력부에 제공되고,
    상기 프로세싱 엘리먼트의 제어 수단으로부터의 제어 신호에 근거하여, 상기 데이터 통신 링크의 판독 포트 상에서 작업이 실행되며,
    하나의 분배 수단은,
    프로세싱 엘리먼트의 출력부와 프로세싱 수단의 제어 수단에 연결된 하나 또는 여러 개의 입력 포트 및,
    상기 데이터 통신 링크의 기록포트에 연결된 하나 또는 여러 개의 출력 포트를 포함하고,
    상기 데이터 통신 링크 기록 포트의 기록 작업 유효성에 대한 정보가 상기 프로세싱 엘리먼트의 각각의 제어 수단에 제공되며,
    상기 프로세싱 엘리먼트의 제어 수단으로부터의 제어 신호에 근거하여, 상기 프로세싱 엘리먼트의 출력부로부터 하나 또는 여러 개의 상기 데이터 통신 링크의 기록 포트로 데이터가 제공되고,
    상기 프로세싱 엘리먼트의 제어 수단으로부터의 제어 신호에 근거하여, 상기 데이터 통신 링크의 기록 포트 상에서 작업이 실행되는 것을 특징으로 하는 프로세서.
  10. 제9항에 있어서,
    각각의 타일은 복수의 선택 수단을 더 포함하고, 각각의 타일 프로세싱 엘리먼트 입력부는 하나 또는 여러 개의 그룹으로 구획되며, 상기 개별적인 선택 수단이 각각의 그룹에 제공되고, 타일 데이터 통신 링크의 모든 판독 포트의 하나의 서브세트만이 상기 선택 수단 입력부에 연결되며,
    각각의 타일은 데이터 통신 링크의 기록 포트들이 여러 개의 그룹으로 구획되어 있는 복수의 분배 수단을 더 포함하고, 상기 개별적인 분배 수단의 하나가 각각의 그룹에 제공되며, 프로세싱 엘리먼트 출력부의 하나의 서브세트만이 상기 분배 수단 입력부에 연결되는 것을 특징으로 하는 프로세서.
  11. 제7항에 있어서,
    상기 명령어 메모리는 가져온(fetched) 명령어 번들의 유효성을 알리는 신호를 상기 클러스터의 제어 수단에 제공하는 것을 특징으로 하는 프로세서.
  12. 제4항의 프로세서에서 프로그램을 수행하도록 하는 방법으로서,
    a) 각 클러스터 명령어 메모리로부터의 명령어 번들을 판독하는 단계와;
    b) 상기 프로세싱 엘리먼트에 데이터를 제공하는 명령어들에 의해 특정화된 데이터 통신 링크들이 판독 작업들에 대해 모두 유효하고, 명령어들에 의해 특정화되어 상기 프로세싱 엘리먼트에 의해 산출된 데이터를 수용하는 데이터 통신 링크들이 기록 작업들을 위하여 모두 유효한 경우, 프로세싱 엘리먼트들에서 명령어들이 수행되는 단계와;
    c) 상기 명령어들에 의해 특정화(specified)된 대로 데이터가 분배되는 데이터 통신 링크에서 기록 작업을 수행하는 단계와;
    d) 상기 명령어들에 의해 특정화된 대로 기능 유닛으로 데이터가 제공되는 데이터 통신 링크에서 판독 작업을 수행하는 단계와;
    e) 상기 브랜치 유닛으로 다음 명령어 번들을 가져오기(fetch) 위해 어드레스를 산출하는 단계; 및
    e) 현재 번들로부터의 모든 명령어가 수행되었을 때, 다음 명령어 번들을 가져와 줄 것(fetch)을 요구하는 단계
    를 포함하는 것을 특징으로 하는 방법.
  13. 제12항에 있어서,
    상기 명령어 수행 단계는, 타일 내의 우선 순위가 높은 다른 모든 명령어들이 먼저 수행된 경우에 한해 상기 타일에서 수행되는 명령어들이 수행되도록 하는 확인절차(verification)를 거쳐서 각각의 타일 내에서의 명령어 수행을 하도록 제한하는 단계를 더 포함하는 것을 특징으로 하는, 프로세서에서 프로그램을 수행하도록 하는 방법.
KR1020127022959A 2010-02-01 2011-01-31 고효율의 내장형 동종 멀티코어 플랫폼용 타일 기반 프로세서 구조 모델 KR101713815B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GBGB1001621.0A GB201001621D0 (en) 2010-02-01 2010-02-01 A tile-based processor architecture model for high efficiency embedded homogenous multicore platforms
GB1001621.0 2010-02-01
PCT/EP2011/051297 WO2011092323A1 (en) 2010-02-01 2011-01-31 A tile-based processor architecture model for high efficiency embedded homogneous multicore platforms

Publications (2)

Publication Number Publication Date
KR20120140653A KR20120140653A (ko) 2012-12-31
KR101713815B1 true KR101713815B1 (ko) 2017-03-09

Family

ID=42084294

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020127022959A KR101713815B1 (ko) 2010-02-01 2011-01-31 고효율의 내장형 동종 멀티코어 플랫폼용 타일 기반 프로세서 구조 모델

Country Status (8)

Country Link
US (1) US9275002B2 (ko)
EP (1) EP2531929B1 (ko)
JP (1) JP5762440B2 (ko)
KR (1) KR101713815B1 (ko)
CN (1) CN102782672B (ko)
CA (1) CA2788263C (ko)
GB (1) GB201001621D0 (ko)
WO (1) WO2011092323A1 (ko)

Families Citing this family (121)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10698859B2 (en) 2009-09-18 2020-06-30 The Board Of Regents Of The University Of Texas System Data multicasting with router replication and target instruction identification in a distributed multi-core processing architecture
WO2011159309A1 (en) 2010-06-18 2011-12-22 The Board Of Regents Of The University Of Texas System Combined branch target and predicate prediction
WO2012156995A2 (en) * 2011-05-13 2012-11-22 Melange Systems (P) Limited Fetch less instruction processing (flip) computer architecture for central processing units (cpu)
WO2013100783A1 (en) 2011-12-29 2013-07-04 Intel Corporation Method and system for control signalling in a data path module
JP5876319B2 (ja) * 2012-02-21 2016-03-02 日本電信電話株式会社 サービス提供システム、サービス提供方法、リソースマネージャ、プログラム
US9792252B2 (en) 2013-05-31 2017-10-17 Microsoft Technology Licensing, Llc Incorporating a spatial array into one or more programmable processor cores
US9720880B2 (en) * 2013-09-06 2017-08-01 Huawei Technologies Co., Ltd. System and method for an asynchronous processor with assisted token
US10331583B2 (en) 2013-09-26 2019-06-25 Intel Corporation Executing distributed memory operations using processing elements connected by distributed channels
KR102174335B1 (ko) * 2013-11-01 2020-11-04 삼성전자주식회사 재구성 가능 프로세서, 재구성 가능 프로세서의 구성 메모리의 사용을 최적화하는 방법 및 장치
KR102197071B1 (ko) * 2014-02-04 2020-12-30 삼성전자 주식회사 재구성 가능 프로세서, 재구성 가능 프로세서의 구성 메모리의 사용을 최적화하는 방법 및 장치
KR102204282B1 (ko) * 2013-11-25 2021-01-18 삼성전자주식회사 다수의 기능 유닛을 가지는 프로세서를 위한 루프 스케쥴링 방법
CN104750659B (zh) * 2013-12-26 2018-07-20 中国科学院电子学研究所 一种基于自动布线互连网络的粗粒度可重构阵列电路
US20160246602A1 (en) * 2015-02-19 2016-08-25 Arizona Board Of Regents On Behalf Of Arizona State University Path selection based acceleration of conditionals in coarse grain reconfigurable arrays (cgras)
US9513832B2 (en) 2015-03-25 2016-12-06 International Business Machines Corporation Accessing global data from accelerator devices
US11755484B2 (en) 2015-06-26 2023-09-12 Microsoft Technology Licensing, Llc Instruction block allocation
US10409606B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Verifying branch targets
US10346168B2 (en) 2015-06-26 2019-07-09 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
US9940136B2 (en) 2015-06-26 2018-04-10 Microsoft Technology Licensing, Llc Reuse of decoded instructions
US10175988B2 (en) 2015-06-26 2019-01-08 Microsoft Technology Licensing, Llc Explicit instruction scheduler state information for a processor
US10409599B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Decoding information about a group of instructions including a size of the group of instructions
US9952867B2 (en) 2015-06-26 2018-04-24 Microsoft Technology Licensing, Llc Mapping instruction blocks based on block size
US9946548B2 (en) 2015-06-26 2018-04-17 Microsoft Technology Licensing, Llc Age-based management of instruction blocks in a processor instruction window
US10191747B2 (en) 2015-06-26 2019-01-29 Microsoft Technology Licensing, Llc Locking operand values for groups of instructions executed atomically
US9720693B2 (en) 2015-06-26 2017-08-01 Microsoft Technology Licensing, Llc Bulk allocation of instruction blocks to a processor instruction window
US10169044B2 (en) 2015-06-26 2019-01-01 Microsoft Technology Licensing, Llc Processing an encoding format field to interpret header information regarding a group of instructions
US10678544B2 (en) 2015-09-19 2020-06-09 Microsoft Technology Licensing, Llc Initiating instruction block execution using a register access instruction
US10061584B2 (en) 2015-09-19 2018-08-28 Microsoft Technology Licensing, Llc Store nullification in the target field
US10936316B2 (en) 2015-09-19 2021-03-02 Microsoft Technology Licensing, Llc Dense read encoding for dataflow ISA
US10180840B2 (en) 2015-09-19 2019-01-15 Microsoft Technology Licensing, Llc Dynamic generation of null instructions
US10719321B2 (en) 2015-09-19 2020-07-21 Microsoft Technology Licensing, Llc Prefetching instruction blocks
US10452399B2 (en) 2015-09-19 2019-10-22 Microsoft Technology Licensing, Llc Broadcast channel architectures for block-based processors
US10095519B2 (en) 2015-09-19 2018-10-09 Microsoft Technology Licensing, Llc Instruction block address register
US11681531B2 (en) 2015-09-19 2023-06-20 Microsoft Technology Licensing, Llc Generation and use of memory access instruction order encodings
US20170083341A1 (en) * 2015-09-19 2017-03-23 Microsoft Technology Licensing, Llc Segmented instruction block
US11126433B2 (en) 2015-09-19 2021-09-21 Microsoft Technology Licensing, Llc Block-based processor core composition register
US10776115B2 (en) 2015-09-19 2020-09-15 Microsoft Technology Licensing, Llc Debug support for block-based processor
US20170083338A1 (en) * 2015-09-19 2017-03-23 Microsoft Technology Licensing, Llc Prefetching associated with predicated load instructions
US11016770B2 (en) 2015-09-19 2021-05-25 Microsoft Technology Licensing, Llc Distinct system registers for logical processors
US10198263B2 (en) 2015-09-19 2019-02-05 Microsoft Technology Licensing, Llc Write nullification
US10031756B2 (en) 2015-09-19 2018-07-24 Microsoft Technology Licensing, Llc Multi-nullification
US10768936B2 (en) 2015-09-19 2020-09-08 Microsoft Technology Licensing, Llc Block-based processor including topology and control registers to indicate resource sharing and size of logical processor
US10871967B2 (en) 2015-09-19 2020-12-22 Microsoft Technology Licensing, Llc Register read/write ordering
US11977891B2 (en) 2015-09-19 2024-05-07 Microsoft Technology Licensing, Llc Implicit program order
US20170083313A1 (en) * 2015-09-22 2017-03-23 Qualcomm Incorporated CONFIGURING COARSE-GRAINED RECONFIGURABLE ARRAYS (CGRAs) FOR DATAFLOW INSTRUCTION BLOCK EXECUTION IN BLOCK-BASED DATAFLOW INSTRUCTION SET ARCHITECTURES (ISAs)
US11106467B2 (en) 2016-04-28 2021-08-31 Microsoft Technology Licensing, Llc Incremental scheduler for out-of-order block ISA processors
US10402168B2 (en) 2016-10-01 2019-09-03 Intel Corporation Low energy consumption mantissa multiplication for floating point multiply-add operations
US10891254B2 (en) * 2016-10-26 2021-01-12 Intel Corporation Switchable topology processor tile and computing machine
US10496409B2 (en) 2016-11-22 2019-12-03 The Arizona Board Of Regents Method and system for managing control of instruction and process execution in a programmable computing system
US10558575B2 (en) 2016-12-30 2020-02-11 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator
US10572376B2 (en) 2016-12-30 2020-02-25 Intel Corporation Memory ordering in acceleration hardware
US10474375B2 (en) 2016-12-30 2019-11-12 Intel Corporation Runtime address disambiguation in acceleration hardware
US10416999B2 (en) 2016-12-30 2019-09-17 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator
US11531552B2 (en) 2017-02-06 2022-12-20 Microsoft Technology Licensing, Llc Executing multiple programs simultaneously on a processor core
US11113051B2 (en) 2017-04-28 2021-09-07 Tenstorrent Inc. Processing core with metadata actuated conditional graph execution
US10817293B2 (en) 2017-04-28 2020-10-27 Tenstorrent Inc. Processing core with metadata actuated conditional graph execution
US20180341488A1 (en) * 2017-05-26 2018-11-29 Microsoft Technology Licensing, Llc Microprocessor instruction predispatch before block commit
CA3067827A1 (en) 2017-06-22 2018-12-27 Icat Llc High throughput processors
US10467183B2 (en) * 2017-07-01 2019-11-05 Intel Corporation Processors and methods for pipelined runtime services in a spatial array
US10445451B2 (en) 2017-07-01 2019-10-15 Intel Corporation Processors, methods, and systems for a configurable spatial accelerator with performance, correctness, and power reduction features
US10515049B1 (en) 2017-07-01 2019-12-24 Intel Corporation Memory circuits and methods for distributed memory hazard detection and error recovery
US10515046B2 (en) 2017-07-01 2019-12-24 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator
US10469397B2 (en) 2017-07-01 2019-11-05 Intel Corporation Processors and methods with configurable network-based dataflow operator circuits
US10445234B2 (en) 2017-07-01 2019-10-15 Intel Corporation Processors, methods, and systems for a configurable spatial accelerator with transactional and replay features
US10387319B2 (en) 2017-07-01 2019-08-20 Intel Corporation Processors, methods, and systems for a configurable spatial accelerator with memory system performance, power reduction, and atomics support features
CN107562549B (zh) * 2017-08-21 2019-12-03 西安电子科技大学 基于片上总线和共享内存的异构众核asip架构
US11868804B1 (en) 2019-11-18 2024-01-09 Groq, Inc. Processor instruction dispatch configuration
US11114138B2 (en) 2017-09-15 2021-09-07 Groq, Inc. Data structures with multiple read ports
US11360934B1 (en) 2017-09-15 2022-06-14 Groq, Inc. Tensor streaming processor architecture
US11243880B1 (en) 2017-09-15 2022-02-08 Groq, Inc. Processor architecture
US11170307B1 (en) 2017-09-21 2021-11-09 Groq, Inc. Predictive model compiler for generating a statically scheduled binary with known resource constraints
US11086816B2 (en) 2017-09-28 2021-08-10 Intel Corporation Processors, methods, and systems for debugging a configurable spatial accelerator
US10496574B2 (en) 2017-09-28 2019-12-03 Intel Corporation Processors, methods, and systems for a memory fence in a configurable spatial accelerator
US10380063B2 (en) * 2017-09-30 2019-08-13 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator having a sequencer dataflow operator
US10445098B2 (en) 2017-09-30 2019-10-15 Intel Corporation Processors and methods for privileged configuration in a spatial array
US20190101952A1 (en) * 2017-09-30 2019-04-04 Intel Corporation Processors and methods for configurable clock gating in a spatial array
GB2569276B (en) 2017-10-20 2020-10-14 Graphcore Ltd Compiler method
GB2569269B (en) * 2017-10-20 2020-07-15 Graphcore Ltd Synchronization in a multi-tile processing arrangement
GB2569275B (en) 2017-10-20 2020-06-03 Graphcore Ltd Time deterministic exchange
GB2569775B (en) * 2017-10-20 2020-02-26 Graphcore Ltd Synchronization in a multi-tile, multi-chip processing arrangement
GB2569271B (en) 2017-10-20 2020-05-13 Graphcore Ltd Synchronization with a host processor
US10963003B2 (en) 2017-10-20 2021-03-30 Graphcore Limited Synchronization in a multi-tile processing array
GB2569844B (en) 2017-10-20 2021-01-06 Graphcore Ltd Sending data off-chip
GB201717295D0 (en) 2017-10-20 2017-12-06 Graphcore Ltd Synchronization in a multi-tile processing array
CN109697084B (zh) * 2017-10-22 2021-04-09 刘欣 一个用于时分复用流水线处理器的快速访问存储器结构
US10565134B2 (en) 2017-12-30 2020-02-18 Intel Corporation Apparatus, methods, and systems for multicast in a configurable spatial accelerator
US10417175B2 (en) 2017-12-30 2019-09-17 Intel Corporation Apparatus, methods, and systems for memory consistency in a configurable spatial accelerator
US10445250B2 (en) 2017-12-30 2019-10-15 Intel Corporation Apparatus, methods, and systems with a configurable spatial accelerator
US10963379B2 (en) 2018-01-30 2021-03-30 Microsoft Technology Licensing, Llc Coupling wide memory interface to wide write back paths
US10564980B2 (en) 2018-04-03 2020-02-18 Intel Corporation Apparatus, methods, and systems for conditional queues in a configurable spatial accelerator
US11307873B2 (en) 2018-04-03 2022-04-19 Intel Corporation Apparatus, methods, and systems for unstructured data flow in a configurable spatial accelerator with predicate propagation and merging
CN110347632B (zh) * 2018-04-04 2022-05-06 杭州海康机器人技术有限公司 一种通信方法和装置
US10929136B2 (en) * 2018-04-11 2021-02-23 Futurewei Technologies, Inc. Accurate early branch prediction using multiple predictors having different accuracy and latency in high-performance microprocessors
US11200186B2 (en) 2018-06-30 2021-12-14 Intel Corporation Apparatuses, methods, and systems for operations in a configurable spatial accelerator
US10891240B2 (en) 2018-06-30 2021-01-12 Intel Corporation Apparatus, methods, and systems for low latency communication in a configurable spatial accelerator
US10853073B2 (en) 2018-06-30 2020-12-01 Intel Corporation Apparatuses, methods, and systems for conditional operations in a configurable spatial accelerator
US10459866B1 (en) 2018-06-30 2019-10-29 Intel Corporation Apparatuses, methods, and systems for integrated control and data processing in a configurable spatial accelerator
GB2575294B8 (en) 2018-07-04 2022-07-20 Graphcore Ltd Host Proxy On Gateway
US10606797B2 (en) * 2018-07-05 2020-03-31 Mythic, Inc. Systems and methods for implementing an intelligence processing computing architecture
US10824429B2 (en) 2018-09-19 2020-11-03 Microsoft Technology Licensing, Llc Commit logic and precise exceptions in explicit dataflow graph execution architectures
EP4009186A1 (en) * 2018-10-18 2022-06-08 Shanghai Cambricon Information Technology Co., Ltd Network-on-chip data processing method and device
CN111079908B (zh) * 2018-10-18 2024-02-13 上海寒武纪信息科技有限公司 片上网络数据处理方法、存储介质、计算机设备和装置
US11455370B2 (en) 2018-11-19 2022-09-27 Groq, Inc. Flattened input stream generation for convolution with expanded kernel
GB2579412B (en) 2018-11-30 2020-12-23 Graphcore Ltd Gateway pull model
GB2580165B (en) * 2018-12-21 2021-02-24 Graphcore Ltd Data exchange in a computer with predetermined delay
US10678724B1 (en) 2018-12-29 2020-06-09 Intel Corporation Apparatuses, methods, and systems for in-network storage in a configurable spatial accelerator
US10965536B2 (en) 2019-03-30 2021-03-30 Intel Corporation Methods and apparatus to insert buffers in a dataflow graph
US10915471B2 (en) 2019-03-30 2021-02-09 Intel Corporation Apparatuses, methods, and systems for memory interface circuit allocation in a configurable spatial accelerator
US11029927B2 (en) 2019-03-30 2021-06-08 Intel Corporation Methods and apparatus to detect and annotate backedges in a dataflow graph
US10817291B2 (en) 2019-03-30 2020-10-27 Intel Corporation Apparatuses, methods, and systems for swizzle operations in a configurable spatial accelerator
US11037050B2 (en) 2019-06-29 2021-06-15 Intel Corporation Apparatuses, methods, and systems for memory interface circuit arbitration in a configurable spatial accelerator
US11900156B2 (en) * 2019-09-24 2024-02-13 Speedata Ltd. Inter-thread communication in multi-threaded reconfigurable coarse-grain arrays
US11409643B2 (en) 2019-11-06 2022-08-09 Honeywell International Inc Systems and methods for simulating worst-case contention to determine worst-case execution time of applications executed on a processor
EP4066170A4 (en) 2019-11-26 2024-01-17 Groq Inc LOADING OPERANDS AND DELIVERING RESULTS FROM A MULTI-DIMENSIONAL ARRAY USING ONLY ONE SIDE
US11907713B2 (en) 2019-12-28 2024-02-20 Intel Corporation Apparatuses, methods, and systems for fused operations using sign modification in a processing element of a configurable spatial accelerator
CN112463717B (zh) * 2020-11-05 2022-07-22 上海交通大学 一种粗粒度可重构架构下条件分支实现方法
EP4315045A1 (en) * 2021-03-26 2024-02-07 Ascenium, Inc. Parallel processing architecture using speculative encoding
WO2023018477A1 (en) * 2021-08-12 2023-02-16 Ascenium, Inc. Parallel processing architecture using distributed register files
WO2023064230A1 (en) * 2021-10-12 2023-04-20 Ascenium, Inc. Load latency amelioration using bunch buffers
CN114610394B (zh) * 2022-03-14 2023-12-22 海飞科(南京)信息技术有限公司 指令调度的方法、处理电路和电子设备
WO2023198453A1 (en) * 2022-04-12 2023-10-19 Technische Universität Berlin A computer processor
CN116841618B (zh) * 2023-07-04 2024-02-02 上海耀芯电子科技有限公司 Tta处理器的指令压缩方法和系统,解压方法和系统

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080294871A1 (en) * 2004-06-22 2008-11-27 Stmicroelectronics S.R.L. Multidimensional processor architecture

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0782478B2 (ja) * 1987-04-15 1995-09-06 工業技術院長 マルチプロセツサシステム
US5471593A (en) * 1989-12-11 1995-11-28 Branigin; Michael H. Computer processor with an efficient means of executing many instructions simultaneously
JP3384601B2 (ja) * 1994-02-23 2003-03-10 三洋電機株式会社 並列処理計算機
US7315934B2 (en) * 2002-03-06 2008-01-01 Matsushita Electric Industrial Co., Ltd. Data processor and program for processing a data matrix
US7472258B2 (en) * 2003-04-21 2008-12-30 International Business Machines Corporation Dynamically shared group completion table between multiple threads
US20050050305A1 (en) * 2003-08-28 2005-03-03 Kissell Kevin D. Integrated mechanism for suspension and deallocation of computational threads of execution in a processor
US20080235490A1 (en) * 2004-06-18 2008-09-25 Anthony Mark Jones System for configuring a processor array
US8155113B1 (en) * 2004-12-13 2012-04-10 Massachusetts Institute Of Technology Processing data in a parallel processing environment
WO2007056735A2 (en) * 2005-11-07 2007-05-18 Ambric, Inc. System of virtual data channels across clock boundaries in an integrated circuit
US7577820B1 (en) * 2006-04-14 2009-08-18 Tilera Corporation Managing data in a parallel processing environment
US20080244238A1 (en) * 2006-09-01 2008-10-02 Bogdan Mitu Stream processing accelerator
US7552312B2 (en) * 2007-02-09 2009-06-23 International Business Machines Corporation Identifying messaging completion in a parallel computer by checking for change in message received and transmitted count at each node
US7979674B2 (en) * 2007-05-16 2011-07-12 International Business Machines Corporation Re-executing launcher program upon termination of launched programs in MIMD mode booted SIMD partitions
US7814295B2 (en) * 2007-05-18 2010-10-12 International Business Machines Corporation Moving processing operations from one MIMD booted SIMD partition to another to enlarge a SIMD partition
US7831803B2 (en) * 2007-07-19 2010-11-09 International Business Machines Corporation Executing multiple instructions multiple date (‘MIMD’) programs on a single instruction multiple data (‘SIMD’) machine
US7831802B2 (en) * 2007-07-19 2010-11-09 International Business Machines Corporation Executing Multiple Instructions Multiple Data (‘MIMD’) programs on a Single Instruction Multiple Data (‘SIMD’) machine
CN101299199A (zh) * 2008-06-26 2008-11-05 上海交通大学 基于可配置处理器及指令集扩展的异构多核系统
US9003165B2 (en) * 2008-12-09 2015-04-07 Shlomo Selim Rakib Address generation unit using end point patterns to scan multi-dimensional data structures
US8713285B2 (en) * 2008-12-09 2014-04-29 Shlomo Selim Rakib Address generation unit for accessing a multi-dimensional data structure in a desired pattern
US20100281236A1 (en) * 2009-04-30 2010-11-04 Novafora, Inc. Apparatus and method for transferring data within a vector processor
US20100281234A1 (en) * 2009-04-30 2010-11-04 Novafora, Inc. Interleaved multi-threaded vector processor
US9298621B2 (en) * 2011-11-04 2016-03-29 Hewlett Packard Enterprise Development Lp Managing chip multi-processors through virtual domains
US9424191B2 (en) * 2012-06-29 2016-08-23 Intel Corporation Scalable coherence for multi-core processors

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080294871A1 (en) * 2004-06-22 2008-11-27 Stmicroelectronics S.R.L. Multidimensional processor architecture

Also Published As

Publication number Publication date
JP2013529322A (ja) 2013-07-18
JP5762440B2 (ja) 2015-08-12
CA2788263A1 (en) 2011-08-04
CN102782672A (zh) 2012-11-14
CN102782672B (zh) 2015-05-20
US9275002B2 (en) 2016-03-01
WO2011092323A1 (en) 2011-08-04
CA2788263C (en) 2019-03-12
GB201001621D0 (en) 2010-03-17
EP2531929A1 (en) 2012-12-12
US20120303933A1 (en) 2012-11-29
KR20120140653A (ko) 2012-12-31
EP2531929B1 (en) 2020-06-24

Similar Documents

Publication Publication Date Title
KR101713815B1 (ko) 고효율의 내장형 동종 멀티코어 플랫폼용 타일 기반 프로세서 구조 모델
US11900124B2 (en) Memory-network processor with programmable optimizations
US11106467B2 (en) Incremental scheduler for out-of-order block ISA processors
Parashar et al. Triggered instructions: A control paradigm for spatially-programmed architectures
Khawam et al. The reconfigurable instruction cell array
Parashar et al. Efficient spatial processing element control via triggered instructions
US20100122105A1 (en) Reconfigurable instruction cell array
US20060026578A1 (en) Programmable processor architecture hirarchical compilation
Jääskeläinen et al. Code density and energy efficiency of exposed datapath architectures
Krashinsky Vector-thread architecture and implementation
Balfour Efficient embedded computing
Yu et al. Architecture and evaluation of an asynchronous array of simple processors
Nguyen et al. Design and Implementation of a Coarse-grained Dynamically Reconfigurable Multimedia Accelerator
Kavitha et al. Performance Enhancement of MRPSOC for Multimedia Applications
Beck et al. Reconfigurable systems
Chattopadhyay et al. rASIP Design Space
Browne et al. Polymorphous Architectures: A Unified Approach for Extracting Concurrency of Different Granularities

Legal Events

Date Code Title Description
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: 20200204

Year of fee payment: 4