KR20170137061A - 대규모 병렬 실행 가능 객체를 생성하는 방법, 디바이스 및 시스템 - Google Patents

대규모 병렬 실행 가능 객체를 생성하는 방법, 디바이스 및 시스템 Download PDF

Info

Publication number
KR20170137061A
KR20170137061A KR1020177025698A KR20177025698A KR20170137061A KR 20170137061 A KR20170137061 A KR 20170137061A KR 1020177025698 A KR1020177025698 A KR 1020177025698A KR 20177025698 A KR20177025698 A KR 20177025698A KR 20170137061 A KR20170137061 A KR 20170137061A
Authority
KR
South Korea
Prior art keywords
sub
processing
processing elements
tasks
elements
Prior art date
Application number
KR1020177025698A
Other languages
English (en)
Inventor
헨드릭 뒤르코프
토비아스 지엘린스키
할리스 아슬란
파보드 사레미
Original Assignee
하이브리드서버 테크 아이피 게엠베하
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 하이브리드서버 테크 아이피 게엠베하 filed Critical 하이브리드서버 테크 아이피 게엠베하
Publication of KR20170137061A publication Critical patent/KR20170137061A/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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/451Code distribution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/456Parallelism detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/457Communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5038Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Multi Processors (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

본 발명은 하나 이상의 버스들과 다수의 프로세싱 소자들을 구비한 디바이스상에서 실행될 머신 코드를 최적화하는 방법을 제공하는데, 머신 코드는 다수의 서브 작업들을 구비한 디바이스 상에서 작업을 실행하도록 구성되며, 상기 방법은, 적어도 하나의 서브 작업에 대해, 상기 서브 작업을 프로세싱할 수 있는 다수의 프로세싱 소자들로부터 하나 이상의 프로세싱 소자들을 식별하는 단계, 하나 이상의 식별된 프로세싱 소자들과 통신하는 하나 이상의 경로들을 식별하는 단계, 식별된 프로세싱 소자들 및/또는 식별된 경로들 중 하나 이상에 대한 사이클 길이를 예측하는 단계, 식별된 프로세싱 소자들로부터 바람직한 프로세싱 소자를 선택하고/하거나 식별된 경로들로부터 바람직한 경로를 선택하는 단계, 상기 디바이스가 바람직한 경로를 통해 바람직한 프로세싱 소자와 통신하게 하고 바람직한 프로세싱 소자상에서 그 서브 작업을 실행하도록 하는 명령들을 구비한 머신 코드 시퀀스를 생성하는 단계를 구비한다. 본 발명은 디바이스 및 시스템과 관련된다.

Description

대규모 병렬 실행 가능 객체를 생성하는 방법, 디바이스 및 시스템
본 발명은 하나 이상의 버스들과 다수의 프로세싱 소자들을 구비한 디바이스상에서 실행될 머신 코드(machine code)를 최적화하는 방법에 관한 것이다. 또한, 본 발명은 분배 경로를 결정하도록 구성되는 디바이스 및 시스템에 관한 것이다.
오늘날에는 신속하게 전개되는 통신 및 컴퓨팅 기술을 통해 대량의 데이터를 이용할 수 있다. 서로 다른 유형의 프로세싱 작업들을 효율적으로 실행하는데 적합한 고도로 전문화된 프로세싱 소자들이 개발되고 있지만, 그 작업들이 제어 소자에서 적당한 프로세싱 소자로 비효율적으로 운송되기 때문에, 많은 리소스들이 낭비된다.
일부 알려진 하드웨어/소프트웨어 솔루션은 한 방향 또는 다른 방향으로 개선을 제공한다. 그러나, 그들이 상기에서 리스트된 임의의 기준 또는 기준들의 적어도 대부분을 개선하는 것은 아니다. 그러므로, 다수의 프로세싱 소자들에 대한 작업의 프로세싱을 최적화하기 위한 개선된 하드웨어 또는 소프트웨어 솔루션이 여전히 필요하다.
그러므로, 본 발명의 목적은 종래 기술의 상술한 문제점들 중 적어도 일부를 극복하는 방법, 디바이스 및 시스템을 제공하는데 있다.
특히, 본 발명의 장점은 첨부된 독립 청구항들에 의해 달성된다. 또한, 본 발명의 측면, 실시 예들 및 특징들은 첨부된 종속 청구항들 및 상세한 설명에 특정되며, 상기 장점들을 달성하게 한다.
실시 예에 따르면, 본 발명은 머신 코드를 최적화하는 방법과 관련된다. 그 머신 코드는 하나 이상의 버스들 및/또는 다수의 프로세싱 소자들을 구비할 수 있는 디바이스상에서 실행될 수 있다. 머신 코드는 디바이스 상에서 작업을 실행하도록 구성된다. 그 작업은 다수의 서브 작업(subtask)을 구비한다. 그 방법은,
- 서브 작업들 중 적어도 하나의 서브 작업에 대해, 다수의 프로세싱 소자들로부터 그 서브 작업을 프로세싱할 수 있는 하나 이상의 소자들을 식별하는 단계,
- 하나 이상의 식별된 프로세싱 소자들과 통신하는 하나 이상의 경로들을 식별하는 단계,
- 식별된 프로세싱 소자들 및/또는 식별된 경로들 중 하나 이상에 대한 사이클 길이를 예측하는 단계,
- 식별된 프로세싱 소자들로부터 바람직한 프로세싱 소자를 선택하고/하거나 식별된 경로들로부터 바람직한 경로를 선택하는 단계,
- 디바이스가 바람직한 경로를 통해 바람직한 프로세싱 소자와 통신하게 하고 바람직한 프로세싱 소자상에서의 그 서브 작업을 실행하도록 하는 명령들을 구비한 머신 코드 시퀀스를 생성하는 단계를 구비한다.
본 발명은 사이클 길이 예측에 기초하여 서브 작업의 최고속 프로세싱을 이끄는 특정 경로 및 프로세싱 소자가 선택된다는 발상에 기반한다. 그에 따라, 본 발명의 그 방법은 주어진 서브 작업을 프로세싱하는데 이상적으로 적합한 것은 아닌 프로세싱 소자를 이용함에 의해 또는 프로세싱 소자와 통신하는 불필요한 긴 경로를 이용함에 의해 유발되는 리소스의 낭비를 피한다.
본 발명은, 특히, 적어도 2개의 프로세싱 소자들이 서브 작업을 프로세싱할 수 있는 시스템에 구현될 수 있다. 특히, 본 발명은, 서브 작업을 프로세싱하는 적어도 2개의 프로세싱 소자들의 프로세싱 시간들이 서로 다른 경우에 유용하다.
또한, 본 발명은, 특히, 적어도 하나의 프로세싱 소자에 대해, 이 프로세싱 소자와 통신하는 적어도 2개의 경로들이 이용될 수 있는 버스 시스템으로 구현될 수 있다. 특히, 본 발명은, 적어도 2개의 경로에 대한 전달 시간이 서로 다른 경우에 유용하다.
본 발명의 방법은 주어진 서브 작업을 프로세싱하는데 이상적으로 적합한 것이 아닌 프로세싱 소자를 이용함에 의해 또는 프로세싱 소자와 통신하는 불필요한 긴 경로들을 이용함에 의해 유발되는 리소스의 낭비를 피한다.
본 발명은 머신 코드 생성 전 및/또는 동안, 즉, 컴파일링(compiling) 전 및/또는 동안 바람직한 프로세싱 소자 및/또는 경로의 사이클 길이 예측 및 선택이 실행된다는 추가적인 발상에 기반한다.
결과적으로, 그 방법은 컴파일러, 바람직하게는, GNU C 컴파일러(GCC)에 의해 실행될 수 있다. 그러한 컴파일러는 통상적으로 프로그래밍 언어, 즉, 고급 프로그래밍 언어로 작성된 소오스 코드를, 예를 들어, 어셈블리 언어 또는 머신 코드와 같은 저급 언어인 또 다른 컴퓨터 언어로 변환하는 컴퓨터 프로그램 또는 프로그램들의 세트를 구성한다.
바람직하게, 컴파일러는 청구항 제1항에 정의된 머신 코드를 최적화한다. 실행 시간 동안 디바이스상에서 구동할 결과하는 소프트웨어는, 바람직하게, 청구항 제1항에 정의된 방법 및/또는 컴파일러의 제품이다. 컴파일러는, 바람직하게, 작업을 병렬로 프로세싱할 수 있는 다수의 프로세싱 소자들(특히, 이종 프로세서 코어들)의 존재의 견지에서 본 발명에 따른 최적화를 행하는데 적합하다.
또한, 본 발명은, 그 방법이 머신 코드 생성 전 및/또는 동안(즉, 컴파일 전 및/또는 동안)에 실행된다는 장점이 있다. 그에 따라, 그 방법은, 머신 코드의 실행전 또는 적어도 부분적으로 실행전에(즉, 적어도 부분적으로 실행 시간전에) 실행된다.
본 발명의 추가적인 측면에 따르면, 그 방법은, 실행될 머신 코드가 병렬로 실행될 수 있는 임의 작업 또는 서브 작업을 구비하는지를 판정하도록 구성될 수 있다. 그러한 분석 후, 그 머신 코드는 식별된 작업 또는 서브 작업의 병렬화에 의해 최적화될 수 있다. 이러한 병렬화는 청구항 제1항에 정의된 본 발명에 따른 방법의 단계들에 의해 이루어질 수 있다.
본 발명의 추가적인 측면에 따르면, 하나 이상의 프로세싱 소자들을 식별하는 단계(즉, 서브 작업들 중 적어도 하나에 대해, 다수의 프로세싱 소자들로부터 그 서브 작업을 프로세싱할 수 있는 하나 이상의 프로세싱 소자를 식별하는 단계)는,
- 작업을 서브 작업들로 분할하는 서브 단계,
- 서브 작업의 종속성을 논리적으로 식별하는 서브 단계,
- 그 종속성에 기초하여 다수의 프로세싱 소자들로부터 서브 작업을 프로세싱할 수 있는 하나 이상의 프로세싱 소자들을 식별하는 서브 단계를
추가로 포함한다.
바람직하게, 판정된 서브 작업의 논리적 종속성이 없는 경우에, 이들 서브 작업들은 병렬로 프로세싱될 수 있다. 임의 종속성이 판정된 경우에, 이들 종속성들이 (예를 들어, 종속 서브 작업들을 독립 서브 작업들로 전환함에 의해) 제거될 수 있는지가 판정된다. 그 다음, 이들 서브 작업들의 각각에 대하여, 서브 작업들을 프로세싱할 수 있는 하나 이상의 프로세싱 소자들이 식별될 수 있다. 이 방법에 있어서, 이들 서브 작업들의 각각은 또 다른 프로세싱 소자에 의해 병렬로 프로세싱될 수 있다.
따라서, 서로 간에 독립적이 아니라 조건부 관계를 가진 그러한 서브 작업들은 서로 간에 독자적인 병렬 케이스들(single parallel cases)을 구성하는 병렬 서브 작업들로 전환될 수 있다.
종속 서브 작업을 독립 서브 작업으로 전환하는 예시로서, 그 작업에 있어서 임의의 "조건문(if-then-else)" 브렌치(branch)들이 식별되어 케이스-선택 알고리즘(case-select algorithm)으로 전환될 수 있다. 그에 따라, 이들 케이스들은 이제 서로 독립적으로 된 독자적 서브 작업들을 구성할 수 있다. 결과적으로, 그들은 병렬로 프로세싱될 수 있다. 추가로, 이 서브 작업들을 프로세싱할 때, 이들 서브 작업들 중 하나에 포지티브 케이스-히트(positive case-hit)가 있으면, 이들 서브 작업들의 모두는 즉시 종료될 수 있다.
독립 서브 작업들에 대해, 그 서브 작업들을 병렬로 프로세싱할 수 있는 하나 이상의 프로세싱 소자들이 식별될 수 있다. 그러나, 서로 독립적으로 프로세싱될 수 있는 적어도 2 단계들을 각각 구비한 준 독립 서브 작업(semi-independent subtask)이 또한 존재한다. 그러한 준 독립 서브 작업에 대해, 그들의 단계들 중 일부는 병렬로 프로세싱될 수 있다. 예를 들어, 또 다른 단계의 아직 알지 못하는 중간 결과에 뒤이은 반복이 실행될 수 있다.
또한, (예를 들어, 서브 작업의 우선 순위 및/또는 중요도와 같은) 프로그래머(programmer)에 의해 선택된 기준에 기초하여 서브 작업들이 소팅될 수 있다. 이후, 이들 서브 작업들의 각각에 대해, 프로세싱 소자가 식별될 수 있는데, 이러한 식별은 프로세싱 소자들의 현재 부하, 프로세싱 소자들의 각각의 성능 및/또는 프로세싱 소자들의 각각에 대한 운송 비용(costs of transport)(즉, 각 프로세싱 소자와 통신하는 경로의 전달 시간)에 기초할 수 있다.
본 발명의 또 다른 측면에 따르면, 식별된 프로세싱 소자 및/또는 식별된 경로에 대한 사이클 길이(cycle length)는, 특히 각 경로마다, 다른 기준들에 기초하여 예측된다. 이들 기준들은, 바람직한 경로들의 이전 예측들 및 선택에 기초한 브렌치 예측 방법을 포함할 수 있다. 또한, 그 기준들은 BFM(Brute Force Method)을 포함할 수 있는데, 거기에서는 각각의 식별된 경로에 대한 사이클 길이가 평가된다. 그러한 BFM으로, 머신 코드의 최적 실행(즉, 가장 성능 기준에 맞는 실행)을 평가하기 위한 랜덤 데이터를 이용하여 모든 또는 대부분의 이론적으로 가능한 케이스들(즉, 모든 가능한 프로세싱 소자들에 대한 모든 가능한 경로들)이 평가될 수 있다. 이것은, 대량의 데이터가 프로세싱되어야만 할 때 또는 많은 서로 다른 프로세싱 소자들에 대해 많은 사이클들을 필요로 하는 것에 특히 적합할 수 있다.
본 발명의 추가적인 측면에 따르면, 바람직한 프로세싱 소자를 선택하고/하거나 바람직한 경로를 선택하는 단계는 하나 이상의 기준들에 기초한다. 이들 기준들은 서브 작업의 우선 순위를 포함하는데, 적은 서브 작업이 보다 높은 우선 순위를 가질 수 있다. 보다 높은 우선 순위를 가진 서브 작업에 대해, 짧은 사이클 길이를 가진 프로세싱 소자 및/또는 경로가 선택될 수 있다. 따라서, 높은 우선 순위를 가진 서브 작업은 보다 높은 성능을 가지고/가지거나 보다 낮은 운송 비용을 요구하는 이들 프로세싱 소자들에 의해 프로세싱될 수 있다. 그러나, 보다 낮은 우선 순위를 가진 서브 작업들은 보나 낮은 성능을 가지고/가지며 보다 높은 운송 비용을 가진 프로세싱 소자들로 어드레싱될 수 있다.
또한, 바람직한 프로세싱 소자를 선택하고/하거나 바람직한 경로를 선택하는 것은 서브 작업의 종속성에 기초할 수 있는데, 거기에서는 여러 프로세싱 소자들상에서의 독립 서브 작업들이 병렬로 실행될 수 있도록 프로세싱 소자 및/또는 경로가 선택될 수 있다. 따라서, 병렬로 프로세싱될 수 있는 각 서브 작업에 대해, 개별적인 프로세싱 소자를 식별하는 것이 달성될 수 있다. 따라서, 이들 서브 작업들은 병렬로 프로세싱될 수 있다.
본 발명의 주요한 개념은, 서브 작업들 중 적어도 하나의 작업에 대해, 청구항 제1항에 정의된 단계들이 실행된다는 것이다. 따라서, 이러한 적어도 하나의 서브 작업에 대해 청구항 제1항에 정의된 단계들이 머신 코드의 생성(예를 들어, 컴파일링) 전 또는 적어도 그 동안에 실행될 수 있다. 그러나, 바람직한 실시 예에 따르면, 그 작업을 구성하는 적어도 하나의 다른 서브 작업에 대해 머신 코드의 생성 단계 후에 이하의 단계들이 실행된다. 바람직하게,
- 이 서브 작업을 프로세싱할 수 있는 다수의 프로세싱 소자들로부터 하나 이상의 프로세싱 소자들을 식별하는 단계,
- 하나 이상의 식별된 프로세싱 소자들과 통신하는 하나 이상의 경로들을 식별하는 단계,
- 식별된 프로세싱 소자들 및/또는 식별된 경로들 중 하나 이상에 대한 사이클 길이를 예측하는 단계,
- 식별된 프로세싱 소자들로부터 바람직한 프로세싱 소자를 선택하고/하거나 식별된 경로들로부터 바람직한 경로를 선택하는 단계들은, 머신 코드의 실행시(즉, 실행 시간동안)에 실행된다.
결론적으로, 추가적인 서브 작업들에 대해, 병렬화가 가능한데, 머신 코드의 실행 동안(즉, 실행 시간동안)에도 병렬화가 수행될 수 있다. 바람직하게, 그 병렬화는 컴파일링 동안에 모든 서브 작업들에 대해 수행될 수 있다. 그러나, 이것이 불가능한 경우, 남아있는 아직 병렬화되지 않은 서브 작업들은 머신 코드의 생성 후 및/또는 머신 코드 및/또는 작업의 실행 동안에 바람직하게 병렬화될 수 있다.
본 발명의 실시 예에 따르면, 식별된 프로세싱 소자 및/또는 식별된 경로에 대한 사이클 길이는,
- 식별된 경로상의 프로세싱 소자에 명령 및 입력 데이터를 전달하기 위한 예측된 순방향 전달 시간,
- 식별된 경로상의 프로세싱 소자로부터의 출력 데이터를 전달하기 위한 예측된 복귀 전달 시간, 및/또는
- 식별된 프로세싱 소자상에서의 서브 작업을 프로세싱하기 위한 예측된 프로세싱 시간에 기초하여 예측된다.
따라서, 식별된 프로세싱 소자에 대한 사이클 길이는 식별된 프로세싱 소자상에서의 서브 작업을 프로세싱하기 위한 예측된 프로세싱 시간에 기초하여 예측될 수 있다. 식별된 경로에 대한 사이클 길이는 식별된 경로상의 프로세싱 소자로 명령 및 입력 데이터를 전달하기 위한 예측 순방향 전달 시간과 식별된 경로상의 프로세싱 소자로부터의 출력 데이터를 전달하기 위한 예측 복귀 전달 시간에 기초하여 예측될 수 있다.
예측된 순방향 전달 시간 및 예측된 복귀 전달 시간은 전체 입력 데이터가 프로세싱 소자에 도착하는 시간을 구비할 수 있다.
본 발명의 실시 예에 따르면, 예측된 사이클 길이는 예측된 순방향 전달 시간, 예측된 복귀 전달 시간 및 예측된 프로세싱 시간의 합이다.
본 실시 예는, 예측된 사이클 길이가 계산에 특히 빠르고 효과적이다. 일부 실시 예에 있어서, 예측된 순방향 전달 시간, 예측된 복귀 전달 시간 및 예측된 프로세싱 시간의 합은 가중합(weighted sum)일 수 있다. 이것은, 단지 예측된 시간들 중 일부만이 정확하게 계산될 수 있을 경우에 특히 유용할 수 있다. 이 경우, 정확하게 계산된 시간에 보다 높은 가중이 주어질 수 있다.
본 발명의 추가적인 측면에 따르면, 사이클 길이를 예측하는 것은 하나 이상의 버스들의 현재 이용 가능성 및/또는 활용성에 기초할 수 있다. 또한, 사이클 길이를 예측하는 것은, 하나 이상의 식별된 프로세싱 소자들의 현재 이용 가능성 및/또는 활용성에 기초할 수 있다.
버스 및 프로세싱 소자들의 현재 이용 가능성 및/또는 활용성을 고려하면 훨씬 더 정밀한 경로 시간 및 프로세싱 시간의 예측을 할 수 있게 된다.
본 발명의 실시 예에 따르면, 그 방법은,
- 선택된 프로세싱 소자상에서의 서브 작업의 프로세싱을 시작하고,
- 서브 작업의 예측된 잔여 사이클 길이를 획득하기 위해 서브 작업의 예측된 사이클 길이를 갱신하고,
- 예측된 잔여 사이클 길이가 다른 프로세싱 소자에서 서브 작업을 프로세싱하기 위한 예측된 사이클 길이보다 더 길다고 판정되면 선택된 프로세싱 소자상에서의 서브 작업의 프로세싱을 소거하고,
- 상기 다른 프로세싱 소자에 서브 작업을 할당하는 것을 더 구비한다.
서브 작업의 예측된 잔여 사이클 길이를 획득하기 위해 서브 작업의 예측된 사이클 길이를 갱신하는 것은, 서브 작업의 프로세싱이 시작된 이후에만 이용할 수 있게 되는 추가적인 정보가 고려될 수 있다는 장점을 가진다. 예를 들어, 특정 서브 작업의 프로세싱을 이미 시작한 프로세싱 소자가 느려지고 예상대로 된다는 정보를 이용할 수 있게 되는 경우, 이 프로세싱 소자상에서의 서브 작업의 프로세싱을 소거하고 다른 프로세싱 소자로 서브 작업을 맡기도록 결정될 수 있다.
본 발명의 이 실시 예는, 프로세싱이 예측된 것보다 훨씬 더 길게 소요되어, 주어진 프로세싱 소자상에서의 프로세싱이 잘못 예측된 것임을 나타내면, 이 프로세싱 소자상에서의 서브 작업의 프로세싱이 소거될 수 있다는 추가적인 장점이 있다.
본 발명의 다른 실시 예에 있어서, 보다 높은 우선 순위를 가진 서브 작업을 프로세싱하기 위해 선택된 프로세싱 소자가 필요하다고 제어 소자가 판정하면, 그 선택된 프로세싱 소자상에서의 서브 작업의 프로세싱은, 소거될 수 있다. 이것은, 예측된 개연적 장래 서브 작업(predicted likely future subtask)의 경우에 특히 적절할 수 있다.
본 발명의 추가적인 바람직한 실시 예에 있어서, 주어진 프로세싱 소자상에서의 서브 작업들의 프로세싱이 예측된 것보다 더 긴 시간 소요되었다는 정보는 테이블에 저장되고, 유사한 서브 작업을 위한 프로세싱 소자들을 예측할 때 고려된다. 특히, 특정 서브 작업의 프로세싱이 주어진 프로세싱 소자상에서 실패했다면, 이 정보는 테이블에 저장될 수 있다. 특정 유형의 서브 작업의 프로세싱이 주어진 프로세싱 소자상에서 반복적으로 실패한 극단적인 경우, 그 프로세싱 소자가 이용 가능함을 나타낸다 할지라도, 그 프로세싱 소자상에서 유사한 서브 작업이 프로세싱되지 않아야 한다고 결정될 수 있다.
본 발명의 실시 예에 따르면, 그 방법은,
- 서브 작업의 프로세싱을 위한 임계 시간을 판정하고,
- 선택된 프로세싱 소자상에서의 서브 작업의 프로세싱을 시작하고,
- 서브 작업에 대한 실제 프로세싱 시간이 임계 시간보다 더 큰지를 체크하고,
- 실제 프로세싱 시간이 임계 시간보다 더 크면 서브 작업의 프로세싱을 소거하고,
- 다른 프로세싱 소자에 서브 작업을 할당하는 것을 더 구비한다.
본 실시 예는 특정 작업이, 아마도 프로세싱 실패로 인해 예상한 것보다 훨씬 더 길게 소요되고 있는 중이기 때문에 특정 작업의 실행이 소거되어야만 하는 때를 결정하는 간단한 방법을 제공한다.
본 발명의 추가적인 실시 예에 따르면,
- 바람직하게 하나 이상의 버스들과,
- 하나 이상의 제어 소자들과,
- 다수의 프로세싱 소자들을 구비한
디바이스가 제공된다.
제어 소자들 중 적어도 하나는 바람직하게 프로세싱 소자상에서 작업을 병렬로 실행하도록 구성된 머신 코드를 생성한다.
또한, 그 디바이스는 하나 이상의 제 1 프로세싱 소자들을 구비한다. 이러한 제 1 프로세싱 소자들은, 바람직하게, 제어 소자와 동일한 다이(die)상에 배치된다. 이것은, 그들이 제 1 멀티코어 프로세서(multicore processor)(예를 들어, 셀 프로세서)의 각 프로세서 코어일 수 있음을 의미한다. 제 1 프로세싱 소자들과 제어 소자는 예를 들어, 링 버스와 같은 버스에 의해 접속될 수 있다.
또한, 그 디바이스는 하나 이상의 제 2 프로세싱 소자들을 구비한다. 제 2 프로세싱 소자들은, 바람직하게, 제 2 다이 상에 배치된다. 이것은, 그들이 제 2 멀티코어 프로세서(예를 들어, 제 2 셀 프로세서)의 프로세서 코어일 수 있음을 의미한다. 그러나, 하나 이상의 제 2 프로세싱 소자(또는 제 2 멀티코어 프로세서)는 제 1 프로세싱 소자들처럼, 인쇄 회로 보드(PCB)와 같은 동일 보드상에 배치될 수 있다.
제 1 및 제 2 멀티코어 프로세서들은 서로 직접 통신한다. 하나 이상의 제 2 프로세싱 소자들은 (직접적인) 배선(예를 들어, 구리선)에 의해 제어 소자에 접속될 수 있다. 바람직하게, 그 배선은 제 1 및 제 2 프로세싱 소자들이 배치되는 보드상에 배치된다. 따라서, 제어 소자와, 제 1 및 제 2 멀티코어 프로세서들은 이러한 배선을 통해 통신할 수 있다. 따라서, 하나 이상의 제 2 프로세싱 소자들은 버스 또는 버스의 일부를 구성할 수 있는 보드간 접속 또는 지점간 케이블(point to point cable)에 의해 제어 소자에 접속될 수 있다.
또한, 그 디바이스는 하나 이상의 제 3 프로세싱 소자들을 구비한다. 하나 이상의 제 3 프로세싱 소자들은 적어도 하나의 추가적인(제 2) 보드 상에 배치될 수 있다.
추가로, 그 디바이스는 하나 이상의 제 4 프로세싱 소자들을 구비할 수 있다. 하나 이상의 제 4 프로세싱 소자들은 네트워크를 통해 제어 소자에 접속될 수 있다. 또한, 네트워크는 버스 또는 버스의 일부를 구성할 수 있다.
바람직하게, 제 2 및/또는 제 3 프로세싱 소자들은 FPGA(Field Programmable Gate Array)를 통해 제어 소자에 접속된다. 그에 따라, 제 1 및 제 2 멀티코어 프로세서들은 FPGA에 의해 접속될 수 있다. 또한, 추가적인(제 2) 보드상의 제 3 프로세싱 소자들은 제어 소자, 특히, 동일한 FPGA를 통해 제 1 보드에 접속될 수 있다. FPGA는 적어도 하나의 제 3 멀티코어 프로세서와 제 1 멀티코어 프로세서간의 통신을 실현하도록 구성될 수 있다.
본 발명의 추가적인 측면에 따르면, 그 작업은 다수의 서브 작업을 구비한다. 또한, 머신 코드를 생성하는 것은, 바람직하게,
- 적어도 하나의 서브 작업에 대해, 그 서브 작업들을 프로세싱할 수 있는 다수의 프로세싱 소자들로부터 하나 이상의 프로세싱 소자들을 식별하고,
- 하나 이상의 식별된 프로세싱 소자들과 통신하는 하나 이상의 경로들을 식별하고,
- 식별된 프로세싱 소자들 및/또는 식별된 경로들 중 하나 이상에 대한 사이클 길이를 예측하고,
- 식별된 프로세싱 소자들로부터 바람직한 프로세싱 소자를 선택하고/하거나 식별된 경로들로부터 바람직한 경로를 선택하고,
- 디바이스가 바람직한 경로를 통해 바람직한 프로세싱 소자와 통신하게 하고 바람직한 프로세싱 소자상에서의 서브 작업을 실행하게 하는 명령들을 구비한 머신 코드 시퀀스를 생성하는 것에 기초한다.
본 발명의 실시 예에 따르면, 제어 소자들 중 적어도 하나는,
- 프로세싱 소자에 명령 및 입력 데이터를 전달하기 위한 예측된 순방향 전달 시간,
- 프로세싱 소자로부터의 출력 데이터를 전달하기 위한 예측된 복귀 시간, 및/또는
- 프로세싱 소자에서 서브 작업을 프로세싱하기 위한 예측된 프로세싱 시간
에 기초하여 사이클 길이를 예측한다.
본 발명의 실시 예에 따르면, 제어 소자들 중 적어도 하나는,
- 선택된 프로세싱 소자상에서의 서브 작업의 실행을 시작하는 단계,
- 서브 작업의 예측된 잔여 사이클 길이를 획득하기 위해 서브 작업의 예측된 사이클 길이를 갱신하는 단계,
- 예측된 잔여 사이클 길이가 다른 프로세싱 소자에서 서브 작업을 프로세싱하기 위한 예측된 사이클 길이보다 더 크다고 판정되면, 선택된 프로세싱 소자상에서의 서브 작업의 프로세싱을 소거하는 단계, 및
- 상기 다른 프로세싱 소자에 서브 작업을 재 할당하는 단계를 실행한다.
본 발명의 실시 예에 따르면, 디바이스는 다수의 프로세싱 소자들의 현재 이용 가능성 및/또는 활용성에 대한 정보를 구비한 비지 테이블(busy table)을 추가로 구비하며, 제어 소자는 비지 테이블내의 정보를 규칙적으로 갱신한다.
본 발명의 실시 예에 따르면, 하나 이상의 버스들은 하나 이상의 링들을 구비한다. 바람직하게, 제 1 프로세싱 소자들과 제어 소자는, 예를 들어, 링 버스와 같은 버스에 의해 접속된다. 바람직하게, 제 2 프로세싱 소자들은, 예를 들어, 링 버스와 같은 추가적인 버스에 의해 접속된다. 바람직하게, 제 3 프로세싱 소자들은, 예를 들어, 링 버스와 같은 추가적인 버스에 의해 접속된다. 바람직하게, 제 4 프로세싱 소자들은, 예를 들어, 링 버스와 같은 추가적인 버스에 의해 접속된다. 적어도 제 1 및 제 2 프로세싱 소자들의 버스들은 버스 시스템을 형성할 수 있지만, 제 3 및/또는 제 4 프로세싱 소자들의 버스들과 조합해서도 버스 시스템을 형성할 수 있다.
본 발명의 추가적인 실시 예에 따르면, 하나 이상의 버스들은 명령을 운송하는 제 1 버스 세트와 데이터를 운송하는 제 2 버스 세트를 구비할 수 있다. 이것은, 제 1 버스 세트가 명령의 저지연 전송(low-latency transmission)에 최적화될 수 있고, 제 2 버스 세트가 잠재적인 대량 데이터의 높은 대역폭 전송에 최적화될 수 있다는 장점을 가진다. 특히, 제 1 및 제 2 버스 세트는 다른 주파수로 동작할 수 있는데, 예를 들어, 제 1 버스 세트는 고주파로 동작할 수 있는 반면, 제 2 버스 세트는 저주파로 동작할 수 있지만, 사이클당 보다 높은 전송 용량을 제공한다.
본 발명의 추가적인 실시 예에 따르면, 하나 이상의 버스들은 단방향성이면서 서로 반대 방향으로 배향된 2개의 링들을 구비한다.
이 방법에서는 본 발명이 특히 효율적인 방식으로 실행될 수 있는데, 그 이유는, 2개의 서로 다르게 배향된 링 버스들 중 보다 적당한 것이 선택되면 상당한 데이터 운송 시간이 절약될 수 있기 때문이다.
본 발명의 실시 예에 따르면, 하나 이상의 버스는 EIB(Element Interconnect Bus)를 구비한다.
본 발명의 추가적인 실시 예에 따르면, 다수의 프로세싱 소자들 중 적어도 하나는 하나 이상의 버스들에 접속되고, 추가적으로 주 프로세싱 소자(primary processing element)에 대한 직접적인 접속을 구비한다.
본 발명의 실시 예에 따르면, 그 디바이스는 이전에 프로세싱된 서브 작업에 기초하여 장래의 서브 작업을 예측하도록 구성된 예측 모듈을 구비한다.
장래 서브 작업을 예측하는 것은, 서브 작업이 실제 실행되기 전에, 장래 서브 작업에 대해 필요한 데이터가 이미 사전 로딩(preloading)될 수 있다는 장점을 가진다. 예를 들어, 이전 서브 작업이 data1,jpg, data2.jpg 및 data3.jpg의 로딩을 수반했다고 검출되면, 예측 모듈은, 장래 서브 작업이 아마도 존재할 data4.jpg의 로딩을 수반할 것임을 예측하고, 그에 따라, 대응하는 서브 작업이 시작되기 전에, 미리 data4.jpg을 사전 로딩할 수 있다. 바람직한 실시 예에 있어서, 그러한 데이터의 사전 로딩은, 시스템이 저 부하하에 있는 경우, 예를 들어, 제어 소자의 현재 부하가 사전 결정된 값 미만인 경우에만 실행된다.
본 발명의 추가적인 실시 예에 따르면, 디바이스는, 하나 이상의 예측된 장래 서브 작업들의 실행을 시작한 후, 하나 이상의 새로운 서브 작업들이 도착하면, 현재의 서브 작업들의 실행을 위해 하나 이상의 예측된 장래 서브 작업을 소거한다. 예를 들어, 그것은, 예측이 정확하지 않았고, 예측된 장래 서브 작업 대신에 새로운 서브 작업들이 실행되어야 함을 나타낸 것일 수 있다.
본 발명의 추가적인 실시 예에 따르면, 상술한 실시 예들 중 하나에 따른 디바이스를 구비한 서버 시스템(server system)이 제공된다.
이 방법에서는, 바람직하게, 서버 시스템이 본 출원에 리스트된 긍정적인 효과들의 모두를 제공하도록 구성될 수 있다. 또한, 기존의 데이터 센터 인프라구조/구성요소들/모듈들/소자들의 도입 및/또는 이용을 동시에 할 수 있게 된다.
본 발명의 실시 예에 따르면, 그 디바이스는 상기에서 개략적으로 서술되고 이하에서 보다 상세하게 설명할 방법을 실행하고 서로 직접 통신하는 2개의 멀티코어 프로세서들의 세트를 구비할 수 있다. 그러나, 그 디바이스는 본 발명에 따른 방법을 함께 실행하고 FPGA에 의해 접속되는(또한 바람직하게 FPGA를 통해 통신하는) 3개의 그러한 세트를 구비할 수 있다.
본 발명의 추가적인 측면에 따르면, 하나 이상의 버스들, 하나 이상의 제어 소자들 및 다수의 프로세싱 소자들 중 적어도 일부가 동일한 칩 하우징(chip housing) 내부에 배치된다. 이것은, 동일 하우징내에 배치된 구성 요소들과 통신하기 위해 특히 높은 대역폭이 달성될 수 있다는 장점을 가진다. 또한, 이러한 셋-업(set-up)은 대량 생산에 있어서 비용을 절감시킨다.
버스의 일부 소자들은 제어 소자 및 프로세싱 소자로서 작용할 수 있다. 예를 들어, 제 1 제어 소자는, 제 2 제어 소자에 서브 작업을 전송할 수 있으며, 그 다음 제 2 제어 소자는 프로세싱 소자로서 작용한다.
본 발명의 실시 예에 따르면, 하나 이상의 버스들에 대한 액세스는 TDMA(Time Division Multiple Access) 기법을 이용하여 관리된다. 간단한 TDMA 기법에 있어서, 버스의 활성 소자는 고정된 시간씩 증가하도록 변경된다. 이 방법에서는, 어느 소자가 버스를 액세스하도록 허용될 것인지가 미리 판정된다. 본 발명의 문맥에서, 이것은, 하나 이상의 버스들의 장래 이용 가능성에 대한 정밀한 예측이 이루어질 수 있다는 장점을 가진다.
본 발명의 추가적인 실시 예에 따르면, 토큰 통과 기법을 이용하여 하나 이상의 버스들에 대한 액세스가 관리된다. 특히, 제 1 소자가 버스의 액세스를 종료하면, 액세스 토큰은 버스의 제 1 소자에서 다음 소자로 전달될 수 있다. 토큰 통과 기법은 간단한 TDMA 기법보다 더 효율적일 수 있는데, 그 이유는, 유휴 시간 슬롯들(idle time slots)을 피할 수 있기 때문이다. 다른 한편, 장래 버스 이용 가능성의 예측은 보다 복잡해질 수 있다. 이를 위해, 제어 소자는 버스 상에서 실행될 현재 및 장래 서브 작업들의 테이블을 유지할 수 있다. 이에 따라, 장래 버스 이용 가능성의 정확한 예측을 할 수 있고, 하나 이상의 버스들이 보다 효율적으로 이용되도록 프로세싱 소자들 및 전달 경로들을 선택할 수 있다.
본 발명의 추가적인 실시 예에 따르면, 하나 이상의 버스들이 토큰 링으로서 셋 업(set up)된다. 즉, 소정 소자의 이웃들은 이 소자의 물리적 이웃들이다.
본 발명은 하나 이상의 버스들에 대한 액세스를 제어하는 다른 프로토콜들과 함께 이용될 수 있다. 이들은, 예를 들어, 스케줄링 방법(scheduling method) 및 랜덤 액세스 방법(random access method)들과 같은, 정적 및 동적 액세스 제어 기법을 포함할 수 있다.
본 발명은 서로 다른 유형의 토폴로지들, 특히, 선형 버스들, 링 버스들, 브렌치 토폴로지들, 스타 네트워크들 및 트리 토폴로지들과 함께 이용될 수 있다. 일부 실시 예에 있어서, 본 발명의 방법은 완전 접속 메시들(fully connected meshes)과 공조하여 이용될 수 있다.
작업은 하나 이상의 명령 및 데이터를 구비할 수 있다. 서브 작업은 하나의 명령 또는 궁극적으로는 작업을 구성하는 명령들의 그룹을 구비할 수 있다.
서브 작업을 프로세싱할 수 있는 하나 이상의 프로세싱 소자들을 식별하는 것은, 예를 들어, 각 프로세싱 소자에 대해 그것이 어떤 프로세싱 기능들을 가지고 있는지에 대한 정보를 제공하는 룩업 테이블을 이용하여 실행될 수 있다. 예를 들어, GPU(Graphical Processing Unit)를 구비한 주어진 프로세싱 소자에 대해, 테이블은, 이 프로세싱 소자가 특정 그래픽 프로세싱 명령과 관련된 특정 서브 작업을 프로세싱할 수 있다는 정보를 구비할 수 있다.
하나 이상의 식별된 프로세싱 소자들과 통신하는 하나 이상의 경로들을 식별하는 것은, 주어진 프로세싱 소자가 어느 버스들을 통해 이 서브 작업의 프로세싱을 요청하고 있는 제어 소자와 접속되는지를 테이블에서 검색함에 의해 구현될 수 있다. 주어진 프로세싱 소자와 통신하기 위해 단지 하나의 버스만이 이용 가능할지라도, 제어 소자가 프로세싱 소자와 통신하는데 이용할 수 있는 2개의 방향이 존재할 수 있다. 이 경우, 예를 들어, 링 버스상에서 시계 방향 또는 시계 반대 방향으로 프로세싱 소자와 통신하는데 이용할 수 있는 2개의 경로가 있을 수 있다. 또한, 버스는, 주어진 프로세싱 소자와의 통신에 이용할 수 있는 다수의 경로들로 되는 브렌치들을 구비할 수 있다.
식별된 프로세싱 소자들과 식별된 경로들 중 하나 이상에 대한 사이클 경로를 예측하는 것은, 2개의 룩업 테이블들, 즉, 제어 소자들과 프로세싱 소자들간의 서로 다른 경로들에 대한 경로 길이를 저장하는 제 1 룩업 테이블과, 다른 서브 작업들과 다른 프로세싱 소자들에 대한 예상된 프로세싱 시간에 대한 정보를 저장하는 제 2 룩업 테이블을 이용하는 것을 구비한다. 예를 들어, 제 2 룩업 테이블은, 특정 그래픽 프로세싱 명령이 제 1 프로세싱 소자상에서의 프로세싱을 위해서는 10 클럭 사이클들을 필요로 하지만, 제 2 프로세싱 소자상에서의 프로세싱을 위해서는 단지 8 클럭 사이클들만을 필요로 한다는 정보를 구비할 수 있다.
본 발명의 다른 실시 예에 있어서, 서로 다른 프로세싱 소자들상에서의 서로 다른 유형의 서브 작업들에 대한 예상된 프로세싱 시간들에 대한 정보를 구비한 단지 하나의 룩업 테이블이 존재한다. 예를 들어, 그러한 테이블은 특정 프로세싱 소자상의 특정 명령에 대한 예상된 프로세싱 시간을 구비할 수 있으며, 이 명령을 위한 입력 데이터 량에 따라 상기 프로세싱 시간이 어떻게 가변하는지에 대한 추가적인 정보를 구비할 수 있다.
다시 말해, 사이클 길이는, 이하의 정보, 즉, 버스가 어떻게 조직되어 있는지에 대한 지식; 현재 버스 및/또는 프로세싱 소자가 어떤 상태 또는 어느 위치에 있는지에 대한 지식; 어느 정도의 데이터 량을 가진 어느 서브 작업이 프로세싱될 필요가 있는지에 대한 정보; 서브 작업이 이용 가능한 프로세싱 소자들에 걸쳐 이상적으로 분배되어야만 하도록, 주어진 서브 작업이 하나의 벡터에 저장될 수 있는 것보다 많은 데이터 셋(dataset)들을 구비하는지에 대한 정보, 즉, 개별적 프로세싱 소자들 및 프로세싱 단계들에 걸쳐서의 SIMD에 기초하여 예측될 수 있다.
일부 경우에, 그 예측은 정확한 계산에 기초할 수 있다. 다른 경우에, 그 예측은 경험적 접근(heuristics)에 기초할 수 있으며, 단지 참 경로 시간(true path time) 또는 프로세싱 시간의 대략적인 추정일 수 있다.
본 발명의 추가적인 실시 예에 따르면, 컴퓨팅 디바이스에 의해 실행될 때, 컴퓨팅 디바이스가 상기에서 개략적으로 설명하고 이하에서 상세하게 설명할 방법을 실행하도록 하는 프로그램 코드를 구비한 컴퓨터 독출 가능 매체가 제공된다.
추가적인 장점 및 바람직한 실시 예들은 종속 청구항들에 포함되며, 첨부된 도면을 참조하여, 바람직한 실시 예의 아래의 설명으로부터 보다 더 잘 이해할 수 있을 것이다. 이하의 도면에 있어서,
도 1은 본 발명에 따른 개략적인 디바이스를 도시한 도면이다.
도 2는 링 구조를 가진 버스 시스템의 개략적인 도면이다.
도 3a는 본 발명에 따른 2개의 링 버스들을 가진 버스 시스템의 개략적인 도면이다.
도 3b는 본 발명에 따른 버스 시스템의 추가적인 개략적인 도면이다.
도 4는 현재 및 장래 활성 소자들에 표시된 포인터들을 가진 추가적인 버스 시스템의 개략적인 도면이다.
도 5는 추가적인 버스 시스템의 개략적인 도면이다.
도 6은 양 방향으로 동작하는 TDMA 구조를 가진 버스 시스템의 개략적인 도면이다.
도 7은 양 방향으로 동작하고 브렌치들을 가진 TDMA 구조를 가진 버스 시스템의 개략적인 도면이다.
도 7a는 주 브렌치에 글로벌 토큰(global token)을 가진, 도 7의 버스 시스템의 개략적인 도면이다.
도 7b는 부 브렌치에 글로벌 토큰을 가지며, 다른 부 브렌치에 로컬 토큰(local token)을 선택적으로 가진 도 7의 버스 시스템의 개략적인 도면이다.
도 8은 모든 소자들이 아니라 일부 소자들만이 동일 버스들을 공유하는, 양 방향으로 동작하는 TDMA 구조를 가진 버스 시스템의 개략적인 도면이다.
도 9는 링 구조를 가진 추가적인 버스 시스템의 개략적인 도면이다.
도 1은, 버스 시스템을 구비한 본 발명에 따른 디바이스의 개략적인 도면이다. 버스 시스템은 다수의 멀티코어 프로세서들(120, 122, 124, 126, 128, 130, 132, 134, 138, 140, 142)을 구비한다. 이들 프로세서들 중 적어도 하나, 예를 들어, "CPU 1 마스터"로서 표시된 프로세서(120)는 제어 소자(도시되지 않음)를 구비한다. 이 제어 소자는 다수의 추가적인 프로세싱 소자들상에서 실행되도록 구성된 머신 코드를 생성한다. 제어 소자는 멀티코어 프로세서(120)의 하나의 프로세서 코어이다. 결론적으로, 추가적인 프로세서 코어들(도시되지 않음), 예를 들어, 8개의 추가적인 코어들이 본 발명에 따른 프로세싱 소자들을 구성한다. 멀티코어 프로세서(120)의 코어들은 링 버스에 의해 접속된다.
멀티코어 프로세서(120)는 추가적인 멀티코어 프로세서(122)와 동일한 PCB 보드상에 배치된다. 멀티코어 프로세서들(120,122)은 서로 직접 통신한다. 그렇게 하기 위해, 그들은 프로세서들(120,122)과 동일한 PCB(140) 보드상에 배치된 구리 배선에 의해 접속된다.
프로세서들(120,122)은 각각 페브릭(Fabric, 110)에 접속된다. 페브릭(110)은 바람직하게 PCB(140)와 이격된 PCB상에 배치된 FPGA를 구비한다. FPGA와 프로세서들(120,122)간의 접속은 XIO 링크이다. 그러한 XIO 링크는 패킷 기반의 고성능 컴퓨터 버스일 수 있다. 바람직하게, 본 발명에 따른 방법을 지원하도록 구성된 (예를 들어, 본 발명에 따른 병렬화를 지원하는) 특정 프로토콜이 XIO상에서 실행중이다. XIO 링크는 직렬화된 범용 입력들/출력들(General-Purpose Inputs/Outputs; GPIO들)을 구비한다. FPGA는 이 GPIO들을 역직렬화하도록 구성된다. 따라서, FPGA는 직렬화기/역직렬화기(SerDes) 기능을 가진다. 직렬화기/역직렬화기(SerDes) 기능은 제한된 입력/출력을 보상하기 위해 고속 통신에 이용되는 한쌍의 기능 블럭들을 구비할 수 있다. 이 블럭들은 각 방향에 있어서 직렬 데이터 및 병렬 인터페이스들간에 데이터를 전환할 수 있다. SerDes는 바람직하게 I/O 핀들과 상호 접속들의 개수를 최소화하기 위해, 단일/차동 라인(single/differential line)을 통해 데이터 전송을 제공한다.
프로세서들(120,122)과 페브릭(110)간의 접속(150)은 하나 이상의 구리 케이블을 구비한다. 또한, 통상적으로, 접속(150)에, 즉, 프로세서들이 배치된 PCB와 페브릭(110) 사이에, 추가적인 PCB 접속기 소자(도시되지 않음)가 배열된다. PCB 접속기 소자는 프로세서들(120,122)의 접속들(즉, 케이블들)을 조합하는 기능을 가진다.
프로세서들(120,122)은 MPPA(Massively Parallel Processor Array)를 형성한다. 본 발명에 따른 방법은, 이 MPPA에 대해 적용된다. 따라서, MPPA는 본 발명에 따른 디바이스(즉, 버스 시스템)를 구성한다. 2개의 프로세서들(120,122)을 구비한 버스 시스템은 도 3a에 도시된 것에 대응할 수 있다.
상술한 MPPA는, 페브릭(110)을 통해, 멀티코어 프로세서들(124,126,128 및 130)을 구비한 추가적인 둘 이상의 MPPA에 추가로 접속된다. 프로세서들(124,126,128 및 130)의 각각은 프로세서들(120,122)의 문맥에서 상술한 바와 같이 XIO 링크에 의해 FPGA에 접속된다.
MPPA들의 각각은 예를 들어 서로 독립적으로 본 발명에 따른 방법을 실행할 수 있다. 그러나, 본 발명에 따른 방법은 3개의 MPPA들의 조합상에서 통합된 방식으로 실행된다. 따라서, MPPA들의 조합은, 또한, 본 발명에 따른 디바이스(즉, 버스 시스템)를 구성할 수 있다. 이 경우, 멀티코어 프로세서(120)는 마스터 CPU일 수 있다. 즉, 그것은 본 발명에 따른 제어 소자인 하나의 코어를 구비한다.
프로세서들(120 내지 130)은 셀 프로세서들일 수 있다. 물론, MPPA의 그러한 조합이 다른 프로세서들을 구비할 수도 있다. 따라서, 본 발명에 따른 머신 코드를 최적화할 때, 프로세들간의 다른 접속들에 기인한 다른 운송 비용 및/또는 다른 프로세서들 및 각각의 다른 프로세서 코어들(즉, 프로세싱 소자들)의 다른 성능이 고려될 수 있다.
또한, MPPA의 조합은, 예를 들어, 40Gbit의 광학 섬유와 같은, 네트워크(120)를 통해, 예를 들어, 페브릭(160)과 같은 추가적인 페브릭들에 접속된다. 이 페브릭들은, 다시, 상술한 것들에 대응하는, 추가적인 MPPA들에 접속된다. 그러나, 서로 다른 MPPA들 또는 컴퓨팅 엔티티들은 네트워크(120)를 통해 접속될 수 있다. 본 발명에 따른 방법은, 네트워크 레버(network lever), 네트워크에 접속된 모든 MPPA들의 조합상에서 통일된 방식으로 실행된다. 도 1에 도시된 소자들의 전체 엔티티가, 바람직하게 블레이드 시스템(blade system)을 형성한다.
도 2에는 링 토폴로지를 가진 버스 시스템(210)의 개략적인 도면이 도시된다. 도 1의 멀티코어 프로세서들(120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142)은 그러한 버스 시스템을 각각 구비할 수 있다. 버스 시스템(210)은 반 시계 방향으로 명령 및 데이터를 운송하는 제 1 링 버스(212)와, 시계 방향으로 명령 및 데이터를 운송하는 제 2 버스(214)를 구비한다. 버스들(212,214)에는, 제어 소자로서 작용하는 프로세싱 코더(220)가 부착된다. 또한, 여러 기능성들의 다수의 소자들(222-234)이 버스들(212,214)에 접속된다. 그 소자들(222-234)은 RAM(Random Access Memory, 222), 플래시 메모리(224), 대량 저장 제어기(226), 네트워크 인터페이스 제어기(228), I2C 버스(230), 주변 부품 상호 접속 고속 버스(Peripheral Component Interconnect Express bus; PCIe)(232) 및 추가적인 잡다 디바이스들(miscellaneous device)(234)을 구비한다.
링 버스(212,214)는 시간 편이 방식(time-shifted manner) 방식으로 동작하는 접속된 소자들간의 직접 접속으로서 셋 업된다. 도 2의 시스템의 경우, 소자들(220-234)은 두 버스들(212,214)에 접속된다. 그러나, 버스들 간의 직접 접속은 없다. 유사하게, 도 5 및 도 9에 도시된 시스템들은 버스들간에 임의 직접 접속들을 구비하지 않는다. 본 발명의 다른 실시 예에 있어서, 버스들은 직접 접속을 구비할 수 있다.
계속하여, 접속된 소자들은 기록 동작을 할 수 있다. 즉, 활성 상태는 하나의 소자에서 다른 소자로 전달되며, 판독 또는 기록 동작들은 제시간에 주어진 포인트에서 활성인 소자에 의해서만 실행될 수 있다. 일부 실시 예들에 있어서, 둘 이상의 서브 작업이 한 클럭 사이클에서 운송될 수 있다. 또한, 둘 이상의 데이터셋이 하나의 서브 작업에 부착될 수 있다(SIMD). 버스 링들의 개수, 접속된 소자들의 개수, 포인터의 시작 위치 및 방향에 의거하여, 둘 이상의 링들이 제 시간에 하나의 포인트에 있는 동일 소자를 어드레싱할 수 있다. 이 경우, 추가적인 명령 및 데이터를 받아들이는 FIFO 버퍼가 제공될 수 있다. 도 2에는, FIFO 버퍼(235)가 다른 잡다 소자(miscellaneous element, 234)에 대해서만 도시되지만, 유사한 방식으로 FIFO 버퍼들은 모든 프로세싱 소자들에 대해 제공될 수 있다.
도 3a에는 2개의 링(312,314)을 구비한 버스 시스템(310)의 개략적인 도면이 도시된다. 링들의 각각은, 예를 들어, 셀 프로세서와 같은 멀티코어 프로세서에 의해 제공된다. 버스 시스템(312)을 구비한 멀티코어 프로세서는 본 발명에 따른 제어 소자를 포함한다. 본 실시 예에 있어서, 2개의 링들(312,314)은 FIFO 버퍼(320)를 통해 접속된다. 따라서, 각자의 링들(312,314)을 구비한 멀티코어 프로세서들은 서로 직접 통신할 수 있다. 대안적으로, 2개의 링(312,314)은 FPGA(320)를 통해 접속되고, 이 FPGA를 통해 간접적으로 통신할 수 있다. 버스 시스템(310)은 본 발명에 따른 방법을 실행할 수 있다.
도 3b에는 4개의 링 버스들(312,314,352,354)을 구비한 버스 시스템의 개략적인 도면이 도시된다. 따라서, 버스 시스템(340)은 도 3a에 도시된 바와 같이 버스 시스템(310)을 구비한다. 각 링 버스(312,314,352 및 354)는 예를 들어 셀 프로세서와 같은 멀티코어 프로세서를 구성한다. 예를 들어, I2C(Inter-Integrated Circuits), NIC(Network Interface Controllers), RAM들(Random Access Memories), 예를 들어, FIFO(First In First Out) 버퍼와 같은 버퍼들, 저장부와 같은 다수의 서로 다른 소자들이 링 버스들에 접속될 수 있다. 링 버스들의 소자들(예를 들어, RAM들, 저장부, NIC들, I2C 등)은 단지 예시적인 것이며, 링 버스에 접속되고 멀티코어 프로세서들을 구성하는, 보다 많거나, 보다 적거나 또는 서로 다른 소자들이 존재할 수 있다.
버스 시스템(340)은, 각각이 프로세서들(312,314)(도 3a에 도시됨)의 세트와 프로세서들(352,354)의 세트와 같은 2개의 멀티코어 프로세서들을 구비한 2개의 세트를 구비한다. 한 세트의 프로세서들은, 각각의 FIFO 버퍼(312,362)를 통해, 상술한 바와 같이 서로 직접 통신한다. 그 세트들은 FPGA(361)에 의해 접속된다(또한, 바람직하게는 FPGA(361)를 통해 통신한다). 그렇게 하기 위해 각 프로세서는 각 XIO 링크(363,364,365 및 366)에 의해 FPGA(361)에 접속된다. 그러나, 각 링크(363,364,365 및 366)는 다수의 XIO 링크들을, 바람직하게는 병렬로 구비한다. 프로세서들의 각각과 각 XIO 링크(363,364,365 및 366)간의 인터페이스는 프로세서들의 FIFO 버퍼들에 의해 제공된다.
예를 들어, 프로세서(312)와 같이, 프로세서들 중 하나는 본 발명에 따른 제어 소자를 구비할 수 있다. 2 세트들 모두, 즉, 4 프로세서들(312,314,362,364)은 본 발명에 따른 방법을 실행할 수 있다. 다시 말해, 본 발명에 따른 방법을 실행할 때, 4개의 프로세서들(312,314,362,364)을 구성하는 각 프로세싱 소자(즉, 프로세서 코어)는 병렬로 이용될 수 있다.
그러나, 버스 시스템(340)은 제 3 세트(도시되지 않음)를 구비하는 것이 바람직하며, 제 3 세트는 도 3b에 도시되고 상술한 제 1 세트 및 제 2 세트에 대응한다. 따라서, 3개의 세트들 모두, 즉, 3개의 세트들을 구성하는 6개의 프로세서들은 본 발명에 따른 방법을 실행할 수 있다. 물론, 동일한 방식으로, 4개, 5개, 6개, 심지어 그 이상의 세트들이 함께 접속될 수 있으며, 또한 각 세트는 본 발명에 따른 방법을 함께 실행하기 위해 3 이상의 프로세서들을 구비할 수 있다.
FPGA(361)는 적어도 하나의 송수신기 및/또는 네트워크 인터페이스(367)를 제공할 수 있는 GPIO(General Purpose Input/Output)를 구비한다. 인터페이스(367)는 SFP(Small Form-Factor Pluggable), 또는 QSFP(Quad Small Form-factor Pluggable) 또는 QSFP+와 같은 개선된 SFP(SFP+), 또는 다수의 언키드(unkeyed) 8P8C 모듈러 접속기(예를 들어, RJ45)일 수 있다. 인터페이스(367)는 개선된 SFP(SFP+) 및 언키드 8P8C 모듈러 접속기(예를 들어, RJ45)의 조합을 구비할 수 있다. 대안적으로, FPGA는 상술한 바와 같이 네트워크 인터페이스를 구비한 적어도 하나의 추가적인 FPGA(도시되지 않음)에 접속될 수 있다.
도 4에는 링 버스(412)의 개략적인 도면이 도시되는데, 거기에서는, 현재 활성 소자에 대한 포인터가 P0으로 표시되고, 다음 활성 소자들에 대한 포인터가 P1 내지 P7로 표시된다. 본 실시 예에 있어서, 제어 소자로서 작용하는 프로세싱 코어(420), RAM(422), 플래시 메모리(424), 저장부(426), NIC(428), I2C 버스(430), PCIe(432) 및 다른 소자들(434)은 링 버스(412)에 접속되고, 다른 소자들(434)은 FIFO 버퍼(435)를 통해 링 버스(412)에 접속된다. 링 버스(412)는 시계 방향으로 데이터를 운송하도록 구성되며, 포인터는 시계 방향으로 링을 통과한다. 도시된 예시에서, 소자들은 한 클럭 사이클의 거리만큼 이격된다. 다른 실시 예들은, 길이가 동일하거나 동일하지 않은, 서로 다른 시간씩 증가하면서 포인터 위치가 링을 통과하는 것을 제공한다. 포인터의 포워딩(forwarding)은, 예를 들어, 서로 다른 소자들에 할당되는 정적 우선 순위에 기초하여 결정될 수 있다.
도 5에는 본 발명에 따른 추가적인 버스 시스템(510)의 개략적인 도면이 도시된다.
본 발명의 동작은 이하의 예시로 설명될 것이다. 주 프로세싱 소자(520a)가 제어 소자로서 작용하고 부 프로세싱 소자들(536-550)들 중 하나상에서 프로세싱될 서브 작업을 전송한다고 가정하다. 종래 기술의 프로세싱 방법에 따르면, 룩업 테이블들 중 하나에 저장된 이전 성공 결과에 기초하여, 제 1 링(512)을 이용하여 부 프로세싱 소자(540)에 서브 작업이 전송되는데, 이는 14 클럭 사이클들이 요구된다. 4 클럭 사이클들을 요구하는, 부 프로세싱 소자(540)에서의 프로세싱 후, 제 1 링(512)상의 주 프로세싱 소자(520a)에 출력 데이터가 복귀되는데, 여기에 또 다른 3 클럭 사이클들이 소요된다. 활성 슬롯이 주 프로세싱 소자(520a)에 복귀되기 전에 그것은 추가적인 13 클럭 사이클들을 소요한다. 이에 따라 총 사이클 시간은 14 + 4 + 13 + 3 = 34 클럭 사이클들이다. 본 발명에 따르면, 이상적으로, 셋-업에 의해 링(514)이 링(512)에 대해 정확한 매칭 오프셋(matching offset)을 가지기 때문에 임의 버스 대기 시간없이, 서브 작업이 제 2 링(514)을 통해 부 프로세싱 소자(540)로 전송되고, 제 1 링(512)을 통해 주 프로세싱 소자(520a)로 복귀된다면, 예측된 사이클 시간은 단지 3 + 4 + 0 + 3 = 10클럭 사이클이라고 판정될 수 있다. 본 예시에서, 본 발명에 따른 방법은 종래 기술의 방식에 따른 사이클 시간의 1/3 미만으로 사이클 시간을 감소시킨다.
n개의 접속된 소자들은 n개의 서로 다른 포인터 위치들에 대응한다.
도 6에는 본 발명에 따른 추가적인 버스 시스템(610)의 개략적인 도면이 도시된다. 버스 시스템(610)은 선형 토폴로지와 시 분할 다중 액세스 기법을 이용하여 2개의 양방향 버스들(612,614)로 셋-업된다. 도 6에는 2개의 선형 버스들(612,614)에 접속된 3개의 소자들(620,622,640)이 도시된다. 일반적으로, 2 버스들에는 n개의 그러한 소자들이 접속된다. 이들 소자들 중 여러개는 제어 소자들로서 작용하고, 다른 소자들은 제어 소자들에 의해 제어되는 프로세싱 소자들로서 작용한다. 제어 및 프로세싱 소자들에 추가하여, 예를 들어, RAM 제어기와 같은 다른 소자들이 버스들(612,614)에 또한 접속될 수 있다.
대안적으로, 버스 시스템(610)은 토큰이 한 스테이션에서 다음 스테이션으로 전달되는 토큰 통과 기법을 이용하여 셋 업될 수 있으며, 거기에서는 버스에 접속된 소자들의 버스 인터페이스의 어드레스들에 기초하여 다음 스테이션이 정의된다.
본 발명의 추가적인 실시 예에 있어서, 포인터는 임의 다른 접속된 소자에/로부터 데이터를 전송 또는 수신하기 위해 접속된 제어 소자에 의해 푸시(push) 또는 풀링(pulling)될 수 있다.
도 7에는 브렌치(713)를 통해 접속되는 3개의 선형 부분(712a,712b,712c)을 구비한 비-배타적 버스 시스템(710)의 개략적인 도면이 도시된다.
버스 시스템(710)에 접속된 것은, 버스 시스템(710)의 제 1 선형 부분(712a)에 접속된 2개의 제어 소자들(720a,720b)과 RAM(722), 제 2 선형 부분(712b)에 접속된 2개의 프로세싱 소자들(730,732), 제 3 선형 부분(712c)에 접속된 2개의 프로세싱 소자들(740,742)이다. 도 7에 도시된 제 2 및 제 3 선형 부분들(712b, 712c)에 추가하여, 제 1 선형 부분(712a)에 접속되는 임의 개수의 추가적인 선형 부분들이 존재할 수 있다. 이들 추가적인 선형 부분들은 동일한 개수의 접속된 소자들을 구비할 수 있다.
예를 들어, RAM 부품(722)은 총 3개의 물리적 이웃들, 즉, 제어 소자(720b), 제 2 부분(712b)의 프로세싱 소자(730) 및 제 3 부분(712c)의 프로세싱 소자(740)를 가진다. 그러므로, 이 버스 시스템(710)에 대한 액세스는 접속된 소자들의 어드레스들에 기초하여 이웃 관계가 정의되는 토큰 통과 기법으로 관리되어야 한다. 선형 부분들(712b,712c)은 동시에 활성화될 수 있음을 알아야 한다. 하나의 선형 부분내에 활성 슬롯을 할당하기 위해 임시(temporary) 또는 제 2 레벨 토큰들이 이용된다. 선형 부분들의 현재 상태 및 예측된 장래 이용 가능성에 대한 지식은 사이클 예측 방법에 의해 및 서브 작업들이 어느 프로세싱 소자에 할당되는지의 결정에 의해 이용될 수 있다.
바람직한 실시 예에 있어서, 버스(712a, b,c)당 2 이상의 토큰을 이용하기 위해, 주 브렌치 부분과, 다수의 부 브렌치 부분들이 존재한다. 이것은 도 7a 및 도 7b에 도시되는데, 거기에서는 제 1 선형 부분(712a)이 주 브렌치를 형성하고, 제 2 및 제 3 선형 부분(712b, 712c)이 부 브렌치 부분을 형성한다.
분쟁을 피하기 위해, 항상 가로 우선 순위들(traversing priorities)을 가진 하나의 글로벌 토큰(750)만이 존재할 수 있다. 도 7a 및 도 7b에서, 글로벌 토큰(750)은 큰 별로서 표시되고 로컬 토큰(752)은 작은 별로서 표시된다. 글로벌 토큰(750)이 도 7a에 도시된 바와 같이 주 브렌치 부분상에 존재할 경우, 어떠한 부 브렌치 부분상에도 임의 로컬 토큰들이 존재할 수 없다. 그러나, 도 7b에 도시된 바와 같이, 글로벌 토큰(750)이 부 브렌치 부분들 중 하나 상에 존재하면, 그들의 개별적인 부 브렌치 부분들을 떠날 수 없는 로컬 토큰들(752)이 다른 부 브렌치 부분들의 모두 또는 일부에 존재할 수 있다.
도 8에는 2개의 양 방향 버스들(812,814)을 구비한 비-배타적 버스 시스템(810)의 개략적인 도면이 도시된다. 제 1 제어 소자(820a), 제 2 제어 소자(820b) 및 RAM(822)은 제 1 버스(812)와 제 2 버스(814)의 모두에 접속된다. 다수개인 n개의 프로세싱 소자들(840,842)은 단지 제 1 버스(812)에만 접속된다. 이러한 셋-업은 n회 반복될 수 있으며, 그에 따라, 버스 시스템에 전체 m*n개의 프로세싱 소자들이 접속될 수 있다. 도 8에 도시된 셋-업은, 예를 들어, 제어 소자들(820a,820b)과 RAM(822)간의 통신이 제 1 버스(812) 및 제 2 버스(814)를 통해 이루어질 수 있다는 장점을 가진다. 이에 따라, RAM 보다 액세스 횟수가 적은 프로세싱 소자들(830,832,840,842)과 통신하기 위한 대역폭에 비해, 전체 대역폭이 2배 높아지게 된다. 이러한 방식에 있어서, 그 아키텍처는 전형적인 부하 시나리오에 적합하다. 다른 장점은 둘 이상의 SPE와의 통신이 동시에 이루어질 수 있다는 것이다.
버스들(812,814)에 대한 액세스는 간단한 시 분할 다중 액세스 기법으로 구현될 수 있다. 대안적으로, 예를 들어, 토큰 통과 기법 또는 그 둘의 조합이 이용될 수 있다.
상술한 실시 예들과 관련하여, 상기 실시 예들은 서로 조합될 수 있음을 알아야 한다. 또한, 도면에 도시된 버스 시스템은 도면에 도시되지 않은 추가적인 소자들 및 추가적인 버스들을 구비할 수 있음을 알 것이다. 특히, 도 7에 도시된 브렌치들은 선형 부분들과 링 버스들을 접속시킬 수 있다. 또한, 브리지를 통해 접속되거나 적어도 하나의 소자를 공유하는 서로 다른 버스들은 서로 다른 액세스 기법을 이용할 수 있다.
도 9에는 링 버스들(912,214)과, 그들에 접속된 프로세싱 코어(920)와 RAM(922)을 구비한 비-배타적 버스 시스템(910)의 개략적인 도면이 도시된다. 또한, 프로세싱 코어(920) 및 RAM(922)은 직접 접속(921)을 통해 접속된다. 추가적인 소자들은, 도 9에 도시되지는 않았지만, 링 버스들(912,914)에 접속될 수 있다.
본 발명의 다른 실시 예에 있어서, 도 1 및 도 9에 도시된 링 버스들은, 제 1 소자가 버스의 액세스를 종료하면 활성 시간 슬롯이 제 1 소자에서 다음 소자로 전달되는 액세스 프로토콜로 구현될 수 있다. 이것은, 소자가 버스의 액세스를 종료하였을 때 토큰을 다음 소자에게 전달하는, 예를 들어, 토큰 링 액세스 기법으로서 구현될 수 있다.

Claims (25)

  1. 하나 이상의 버스들(212, 214, 312, 314, 412, 512, 514, 612, 614, 712a, 712b, 712c, 812, 814)과 다수의 프로세싱 소자들(122-134, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842)을 구비한 디바이스상에서 실행될 머신 코드를 최적화하는 방법으로서,
    상기 머신 코드는 다수의 서브 작업들을 구비한 디바이스 상의 작업을 실행하도록 구성되며,
    상기 방법은,
    - 적어도 하나의 서브 작업에 대해, 상기 서브 작업을 프로세싱할 수 있는 다수의 프로세싱 소자들로부터 하나 이상의 프로세싱 소자들(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842)을 식별하는 단계,
    - 하나 이상의 식별된 프로세싱 소자들(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842)과 통신하는 하나 이상의 경로들을 식별하는 단계,
    - 식별된 프로세싱 소자들(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842) 및/또는 식별된 경로들 중 하나 이상에 대한 사이클 길이를 예측하는 단계,
    - 식별된 프로세싱 소자들(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842)로부터 바람직한 프로세싱 소자를 선택하고/하거나 식별된 경로들로부터 바람직한 경로를 선택하는 단계, 및
    - 상기 디바이스가 바람직한 경로를 통해 바람직한 프로세싱 소자와 통신하게 하고 바람직한 프로세싱 소자상에서 그 서브 작업을 실행하도록 하는 명령들을 구비한 머신 코드 시퀀스를 생성하는 단계를 구비하는
    머신 코드 최적화 방법.
  2. 제 1 항에 있어서,
    하나 이상의 프로세싱 소자들(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842)을 식별하는 단계는,
    - 상기 작업을 서브 작업들로 분할하고,
    - 상기 서브 작업들의 논리적 종속성을 식별하고,
    - 상기 종속성에 기초하여 다수의 프로세싱 소자들로부터 상기 서브 작업들을 프로세싱할 수 있는 하나 이상의 프로세싱 소자들(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842)을 식별하는 것을 포함하는
    머신 코드 최적화 방법.
  3. 제 2 항에 있어서,
    독립 서브 작업들에 대해, 상기 서브 작업들을 병렬로 프로세싱할 수 있는, 대응하는 개수의 프로세싱 소자들이 식별되는
    머신 코드 최적화 방법.
  4. 제 2 항 또는 제 3 항에 있어서,
    서로 간에 조건부 관계를 가진 서브 작업들은 서로 간에 독자적인 병렬 케이스들(single parallel cases)을 구성하는 병렬 서브 작업들로 전환되는
    머신 코드 최적화 방법.
  5. 선행항들 중 한 항에 있어서,
    식별된 프로세싱 소자 및/또는 식별된 경로에 대한 사이클 길이(cycle length)는,
    - 특히, 바람직한 경로들의 이전 예측들 및/또는 선택에 기초한 브렌치 예측 방법,
    - 각 식별된 경로에 대한 사이클 길이가 평가되는 BFM(Brute Force Method)
    에 기초하여 예측되는
    머신 코드 최적화 방법.
  6. 선행항들 중 한 항에 있어서,
    바람직한 프로세싱 소자를 선택하고/하거나 바람직한 경로를 선택하는 것은
    - 작업의 우선 순위와,
    - 서브 작업의 종속성에 기초하되,
    적은 서브 작업들에 대해, 짧은 사이클 길이를 가진 프로세싱 소자들(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842) 및/또는 경로들이 선택되고,
    프로세싱 소자들(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842) 및/또는 경로들은, 독립 또는 준 독립(semi-independent) 서브 작업들이 여러 프로세싱 소자들상에서 병렬로 실행될 수 있도록, 선택되는,
    머신 코드 최적화 방법.
  7. 선행항들 중 한 항에 있어서,
    머신 코드를 생성하는 단계 이후 및/또는 머신 코드를 실행하는 동안,
    상기 방법은,
    - 상기 작업을 구성하는 적어도 하나의 다른 서브 작업에 대해, 다수의 프로세싱 소자들로부터 상기 서브 작업을 프로세싱할 수 있는 하나 이상의 프로세싱 소자들(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842)을 식별하는 단계,
    - 하나 이상의 식별된 프로세싱 소자들(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842)과 통신하는 하나 이상의 경로들을 식별하는 단계,
    - 식별된 프로세싱 소자들(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842) 및/또는 식별된 경로들 중 하나 이상에 대한 사이클 길이를 예측하는 단계,
    - 식별된 프로세싱 소자들(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842)로부터 바람직한 프로세싱 소자를 선택하고/하거나 식별된 경로들로부터 바람직한 경로를 선택하는 단계를 추가로 구비하는
    머신 코드 최적화 방법.
  8. 선행항들 중 한 항에 있어서,
    식별된 프로세싱 소자(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842) 및/또는 식별된 경로에 대한 사이클 길이는,
    - 식별된 경로상의 식별된 프로세싱 소자(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842)에 명령 및 입력 데이터를 전달하기 위한 예측된 순방향 전달 시간,
    - 식별된 경로상의 식별된 프로세싱 소자(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842)로부터의 출력 데이터를 전달하기 위한 예측된 복귀 전달 시간, 및/또는
    - 식별된 프로세싱 소자(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842)상에서 서브 작업을 프로세싱하기 위한 예측된 프로세싱 시간에 기초하여 예측되는
    머신 코드 최적화 방법.
  9. 제 8 항에 있어서,
    예측된 사이클 길이는, 예측된 순방향 전달 시간, 예측된 복귀 전달 시간 및 예측된 프로세싱 시간의 합인
    머신 코드 최적화 방법.
  10. 선행항들 중 한 항에 있어서,
    상기 사이클 길이를 예측하는 것은,
    - 하나 이상의 버스들(212, 214, 312, 314, 412, 512, 514, 612, 614, 712a, 712b, 712c, 812, 814)의 현재 이용 가능성 및/또는 활용성, 및
    - 하나 이상의 식별된 프로세싱 소자들(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842)의 현재 이용 가능성 및/또는 활용성 중 적어도 하나에 기초하는
    머신 코드 최적화 방법.
  11. 선행항들 중 한 항에 있어서,
    상기 방법은,
    - 선택된 프로세싱 소자(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842)상에서 서브 작업의 프로세싱을 시작하고,
    - 서브 작업의 예측된 잔여 사이클 길이를 획득하기 위해 서브 작업의 예측된 사이클 길이를 갱신하고,
    - 예측된 잔여 사이클 길이가 다른 프로세싱 소자(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842)에서 서브 작업을 프로세싱하기 위한 예측된 사이클 길이보다 더 길다고 판정되면, 선택된 프로세싱 소자(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842)상에서의 서브 작업의 프로세싱을 소거하고,
    - 상기 다른 프로세싱 소자(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842)에 서브 작업을 할당하는 것을 더 구비하는
    머신 코드 최적화 방법.
  12. 선행항들 중 한 항에 있어서,
    상기 방법은,
    - 서브 작업의 프로세싱을 위한 임계 시간을 판정하고,
    - 선택된 프로세싱 소자(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842)상에서의 서브 작업의 프로세싱을 시작하고,
    - 서브 작업에 대한 실제 프로세싱 시간이 임계 시간보다 더 큰지를 체크하고,
    - 실제 프로세싱 시간이 임계 시간보다 더 크면 서브 작업의 프로세싱을 소거하고,
    - 다른 프로세싱 소자(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842)에 서브 작업을 할당하는 것을 더 구비하는
    머신 코드 최적화 방법.
  13. 디바이스로서,
    - 하나 이상의 버스들(212, 214, 312, 314, 412, 512, 514, 612, 614, 712a, 712b, 712c, 812, 814)과,
    - 하나 이상의 제어 소자들(120, 220, 320, 420, 520a, 520b, 620, 720a, 720b)과,
    - 다수의 프로세싱 소자들(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842)을 구비하되,
    제어 소자들(120, 220, 320, 420, 520a, 520b, 620, 720a, 720b) 중 적어도 하나는 다수의 프로세싱 소자들(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842)상에서 작업을 병렬로 실행하도록 구성된 머신 코드를 생성하고,
    상기 디바이스는,
    하나 이상의 제 1 프로세싱 소자들(322a, 322b, 322c)과 적어도 하나의 제어 소자를 구비한 제 1 멀티코어 프로세서,
    하나 이상의 제 2 프로세싱 소자들(322b, 322e)을 구비한 적어도 하나의 제 2 멀티코어 프로세서, 및
    FPGA(Field Programmable Gate Array)(361)를 통해 제 1 멀티코어 프로세서에 접속되는 하나 이상의 제 3 프로세싱 소자들(372a, 372b)을 구비한 적어도 하나의 제 3 멀티코어 프로세서를 더 구비하고,
    상기 제 1 및 제 2 멀티코어 프로세서들은, 제 1 보드상에 배치되고, 지점간 케이블(point to point cable) 또는 보드간 접속(board to board connection)에 의해 서로 접속되는,
    디바이스.
  14. 제 13 항에 있어서,
    상기 디바이스는,
    네트워크를 통해 FPGA에 접속되는 하나 이상의 제 4 프로세싱 소자들을 추가로 구비하는
    디바이스.
  15. 제 13 항 또는 제 14 항에 있어서,
    상기 FPGA(361)는
    적어도 하나의 제 3 멀티코어 프로세서와 제 1 멀티코어 프로세서간에 통신을 실현하도록 구성되는
    디바이스.
  16. 제 13 항 내지 제 15 항 중 한 항에 있어서,
    상기 제 1 멀티코어 프로세서, 제 2 멀티코어 프로세서 및 제 3 멀티코어 프로세서의 각각은 적어도 하나의 각각의 XIO 링크(363, 364, 365, 366)를 통해 FPGA(361)에 접속되는
    디바이스
  17. 제 13 항 내지 제 16 항 중 한 항에 있어서,
    상기 멀티코어 프로세서들은 각각 링 버스(312,314,352,354)를 구비하는
    디바이스.
  18. 제 13 항 내지 제 17 항 중 한 항에 있어서,
    상기 작업은, 다수의 서브 작업들을 구비하고,
    상기 머신 코드를 생성하는 것은,
    - 적어도 하나의 서브 작업에 대해, 다수의 프로세싱 소자들로부터 상기 서브 작업들을 프로세싱할 수 있는 하나 이상의 프로세싱 소자들(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842)을 식별하고,
    - 하나 이상의 식별된 프로세싱 소자들(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842)과 통신하는 하나 이상의 경로들을 식별하고,
    - 식별된 프로세싱 소자들(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842) 및/또는 식별된 경로들 중 하나 이상에 대한 사이클 길이를 예측하고,
    - 식별된 프로세싱 소자들(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842)로부터 바람직한 프로세싱 소자를 선택하고/하거나 식별된 경로들로부터 바람직한 경로를 선택하고,
    - 상기 디바이스가 바람직한 경로를 통해 바람직한 프로세싱 소자와 통신하게 하고 바람직한 프로세싱 소자상에서 서브 작업을 실행하게 하는 명령들을 구비한 머신 코드 시퀀스를 생성하는 것에 기초하는
    디바이스.
  19. 제 13 항 내지 제 18 항 중 한 항에 있어서,
    제어 소자들(120, 220, 320, 420, 520a, 520b, 620, 720a, 720b) 중 적어도 하나는,
    - 프로세싱 소자(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842)에 명령 및 입력 데이터를 전달하기 위한 예측된 순방향 전달 시간,
    - 프로세싱 소자(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842)로부터의 출력 데이터를 전달하기 위한 예측된 복귀 시간, 및/또는
    - 프로세싱 소자(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842)에서 서브 작업을 프로세싱하기 위한 예측된 프로세싱 시간
    에 기초하여 사이클 길이를 예측하는
    디바이스.
  20. 제 13 항 내지 제 19 항 중 한 항에 있어서,
    제어 소자들(120, 220, 320, 420, 520a, 520b, 620, 720a, 720b) 중 적어도 하나는,
    - 선택된 프로세싱 소자(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842)상에서의 서브 작업의 실행을 시작하는 단계,
    - 서브 작업의 예측된 잔여 사이클 길이를 획득하기 위해 서브 작업의 예측된 사이클 길이를 갱신하는 단계,
    - 예측된 잔여 사이클 길이가 다른 프로세싱 소자(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842)에서 서브 작업을 프로세싱하기 위한 예측된 사이클 길이보다 더 크다고 판정되면, 선택된 프로세싱 소자(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842)상에서의 서브 작업의 프로세싱을 소거하는 단계, 및
    - 상기 다른 프로세싱 소자(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842)에 서브 작업을 재 할당하는 단계를 실행하는
    디바이스.
  21. 제 13 항 내지 제 20 항 중 한 항에 있어서,
    상기 디바이스는 다수의 프로세싱 소자들(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842)의 기능들 및/또는 현재 이용 가능성 및/또는 활용성에 대한 정보를 구비한 하나 이상의 비지 테이블(busy table)들을 추가로 구비하며,
    상기 제어 소자들(120, 220, 320, 420, 520a, 520b, 620, 720a, 720b) 중 적어도 하나는 하나 이상의 비지 테이블들내의 정보를 규칙적으로 갱신하는
    디바이스.
  22. 제 13 항 내지 제 21 항 중 한 항에 있어서,
    이전에 프로세싱된 서브 작업들에 기초하여 장래 서브 작업들을 예측하도록 구성된 예측 모듈을 더 구비하는
    디바이스.
  23. 제 22 항에 있어서,
    상기 디바이스는,
    하나 이상의 예측된 장래 서브 작업들의 실행을 시작한 후, 하나 이상의 새로운 서브 작업들이 도착하면, 현재의 서브 작업들의 실행을 위해 하나 이상의 예측된 장래 서브 작업을 소거하는
    디바이스.
  24. 제 13 항 내지 제 23 항 중 한 항에 있어서,
    하나 이상의 버스들(212, 214, 312, 314, 412, 512, 514, 612, 614, 712a, 712b, 712c, 812, 814)과, 하나 이상의 제어 소자들(120, 220, 320, 420, 520a, 520b, 620, 720a, 720b)과, 다수의 프로세싱 소자들(122-142, 222, 322-334, 422-434, 522-550, 620-640, 720a-742, 822-842) 중 적어도 일부는 동일한 칩 하우징(chip housing)내에 배치되는
    디바이스.
  25. 청구항 제13항 내지 제 24 항 중 한 항에 따른 디바이스를 구비하는
    서버 시스템.
KR1020177025698A 2015-04-15 2016-04-04 대규모 병렬 실행 가능 객체를 생성하는 방법, 디바이스 및 시스템 KR20170137061A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EP15163717.0A EP3082038A1 (en) 2015-04-15 2015-04-15 Method, device and system for creating a massively parallelized executable object
EP15163717.0 2015-04-15
PCT/EP2016/057344 WO2016165969A1 (en) 2015-04-15 2016-04-04 Method, device and system for creating a massively parallelised executable object

Publications (1)

Publication Number Publication Date
KR20170137061A true KR20170137061A (ko) 2017-12-12

Family

ID=53039217

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177025698A KR20170137061A (ko) 2015-04-15 2016-04-04 대규모 병렬 실행 가능 객체를 생성하는 방법, 디바이스 및 시스템

Country Status (8)

Country Link
US (1) US20180095738A1 (ko)
EP (1) EP3082038A1 (ko)
KR (1) KR20170137061A (ko)
CN (1) CN107430525A (ko)
CA (1) CA2982975A1 (ko)
IL (1) IL253506A0 (ko)
TW (1) TW201706838A (ko)
WO (1) WO2016165969A1 (ko)

Families Citing this family (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9600312B2 (en) 2014-09-30 2017-03-21 Amazon Technologies, Inc. Threading as a service
US9830193B1 (en) 2014-09-30 2017-11-28 Amazon Technologies, Inc. Automatic management of low latency computational capacity
US9146764B1 (en) 2014-09-30 2015-09-29 Amazon Technologies, Inc. Processing event messages for user requests to execute program code
US9678773B1 (en) 2014-09-30 2017-06-13 Amazon Technologies, Inc. Low latency computational capacity provisioning
US9537788B2 (en) 2014-12-05 2017-01-03 Amazon Technologies, Inc. Automatic determination of resource sizing
US9588790B1 (en) 2015-02-04 2017-03-07 Amazon Technologies, Inc. Stateful virtual compute system
US9733967B2 (en) 2015-02-04 2017-08-15 Amazon Technologies, Inc. Security protocols for low latency execution of program code
US9910713B2 (en) 2015-12-21 2018-03-06 Amazon Technologies, Inc. Code execution request routing
US11132213B1 (en) 2016-03-30 2021-09-28 Amazon Technologies, Inc. Dependency-based process of pre-existing data sets at an on demand code execution environment
US10102040B2 (en) 2016-06-29 2018-10-16 Amazon Technologies, Inc Adjusting variable limit on concurrent code executions
US10725826B1 (en) * 2017-06-21 2020-07-28 Amazon Technologies, Inc. Serializing duration-limited task executions in an on demand code execution system
US10541939B2 (en) * 2017-08-15 2020-01-21 Google Llc Systems and methods for provision of a guaranteed batch
DE102017215969A1 (de) * 2017-09-11 2019-03-14 Siemens Mobility GmbH Schienenfahrzeug mit Mehrkernrechenleistung
US10853115B2 (en) 2018-06-25 2020-12-01 Amazon Technologies, Inc. Execution of auxiliary functions in an on-demand network code execution system
US11146569B1 (en) 2018-06-28 2021-10-12 Amazon Technologies, Inc. Escalation-resistant secure network services using request-scoped authentication information
US10949237B2 (en) 2018-06-29 2021-03-16 Amazon Technologies, Inc. Operating system customization in an on-demand network code execution system
US11099870B1 (en) 2018-07-25 2021-08-24 Amazon Technologies, Inc. Reducing execution times in an on-demand network code execution system using saved machine states
TWI672649B (zh) * 2018-09-27 2019-09-21 宏碁股份有限公司 執行例行工作的方法與電子裝置
US11099917B2 (en) 2018-09-27 2021-08-24 Amazon Technologies, Inc. Efficient state maintenance for execution environments in an on-demand code execution system
US11243953B2 (en) 2018-09-27 2022-02-08 Amazon Technologies, Inc. Mapreduce implementation in an on-demand network code execution system and stream data processing system
US11943093B1 (en) 2018-11-20 2024-03-26 Amazon Technologies, Inc. Network connection recovery after virtual machine transition in an on-demand network code execution system
US11010188B1 (en) 2019-02-05 2021-05-18 Amazon Technologies, Inc. Simulated data object storage using on-demand computation of data objects
US11861386B1 (en) 2019-03-22 2024-01-02 Amazon Technologies, Inc. Application gateways in an on-demand network code execution system
US11119809B1 (en) 2019-06-20 2021-09-14 Amazon Technologies, Inc. Virtualization-based transaction handling in an on-demand network code execution system
US11159528B2 (en) 2019-06-28 2021-10-26 Amazon Technologies, Inc. Authentication to network-services using hosted authentication information
US11115404B2 (en) 2019-06-28 2021-09-07 Amazon Technologies, Inc. Facilitating service connections in serverless code executions
US11190609B2 (en) 2019-06-28 2021-11-30 Amazon Technologies, Inc. Connection pooling for scalable network services
US11119826B2 (en) 2019-11-27 2021-09-14 Amazon Technologies, Inc. Serverless call distribution to implement spillover while avoiding cold starts
US11714682B1 (en) 2020-03-03 2023-08-01 Amazon Technologies, Inc. Reclaiming computing resources in an on-demand code execution system
US11188391B1 (en) 2020-03-11 2021-11-30 Amazon Technologies, Inc. Allocating resources to on-demand code executions under scarcity conditions
US11593270B1 (en) 2020-11-25 2023-02-28 Amazon Technologies, Inc. Fast distributed caching using erasure coded object parts
US11550713B1 (en) 2020-11-25 2023-01-10 Amazon Technologies, Inc. Garbage collection in distributed systems using life cycled storage roots
US11388210B1 (en) 2021-06-30 2022-07-12 Amazon Technologies, Inc. Streaming analytics using a serverless compute system
US11968280B1 (en) 2021-11-24 2024-04-23 Amazon Technologies, Inc. Controlling ingestion of streaming data to serverless function executions
US12015603B2 (en) 2021-12-10 2024-06-18 Amazon Technologies, Inc. Multi-tenant mode for serverless code execution

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4748585A (en) * 1985-12-26 1988-05-31 Chiarulli Donald M Processor utilizing reconfigurable process segments to accomodate data word length
WO2004001584A2 (en) * 2002-06-24 2003-12-31 Ante Vista Gmbh A method for executing structured symbolic machine code on a microprocessor
JP3938387B2 (ja) * 2005-08-10 2007-06-27 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラ、制御方法、およびコンパイラ・プログラム
US7757040B2 (en) * 2007-01-30 2010-07-13 International Business Machines Corporation Memory command and address conversion between an XDR interface and a double data rate interface
CN101681266B (zh) * 2007-05-22 2014-06-18 皇家飞利浦电子股份有限公司 用于包括多个设备的联网控制***的编译器和编译方法
JP4629768B2 (ja) * 2008-12-03 2011-02-09 インターナショナル・ビジネス・マシーンズ・コーポレーション 並列化処理方法、システム、及びプログラム
KR101738641B1 (ko) * 2010-12-17 2017-05-23 삼성전자주식회사 멀티 코어 시스템의 프로그램 컴파일 장치 및 방법
US8707314B2 (en) * 2011-12-16 2014-04-22 Advanced Micro Devices, Inc. Scheduling compute kernel workgroups to heterogeneous processors based on historical processor execution times and utilizations
US20140189330A1 (en) * 2012-12-27 2014-07-03 Ayal Zaks Optional branches
US20140208297A1 (en) * 2013-01-20 2014-07-24 International Business Machines Corporation Validation of revised computer programs
US9348560B2 (en) * 2013-06-04 2016-05-24 Qualcomm Incorporated Efficient execution of graph-based programs

Also Published As

Publication number Publication date
CN107430525A (zh) 2017-12-01
WO2016165969A1 (en) 2016-10-20
IL253506A0 (en) 2017-09-28
EP3082038A1 (en) 2016-10-19
TW201706838A (zh) 2017-02-16
US20180095738A1 (en) 2018-04-05
CA2982975A1 (en) 2016-10-20

Similar Documents

Publication Publication Date Title
KR20170137061A (ko) 대규모 병렬 실행 가능 객체를 생성하는 방법, 디바이스 및 시스템
KR102228501B1 (ko) 컴파일러 방법
KR102167059B1 (ko) 멀티-타일 프로세싱 어레이의 동기화
JP5736034B2 (ja) 階層型分散処理システムのためのソフトウェアのコンパイル
US8572586B2 (en) Optimized scalar promotion with load and splat SIMD instructions
EP2441013B1 (en) Shared resource multi-thread processor array
US8234635B2 (en) Program processing device, parallel processing program, program processing method, parallel processing compiler, recording medium containing the parallel processing compiler, and multi-processor system
KR102178190B1 (ko) 명령 세트
JP5651251B2 (ja) シミュレーション実行方法、プログラム及びシステム
JP2009265963A (ja) 情報処理システム及びタスクの実行制御方法
JP2010079622A (ja) マルチコアプロセッサシステム、および、そのタスク制御方法
US11782760B2 (en) Time-multiplexed use of reconfigurable hardware
CA2433379A1 (en) Modulo scheduling of multiple instruction chains
Kaushik et al. Computation and communication aware run-time mapping for NoC-based MPSoC platforms
KR20190044573A (ko) 컴퓨터 프로세싱의 타이밍 제어
CA2900989A1 (en) Method, processing modules and system for executing an executable code
JP6368452B2 (ja) 非同期のデバイスによって実行されるタスクのスケジューリングの向上
EP2998864B1 (en) Method, device and system for deciding on a distribution path of a task
EP3495960A1 (en) Program, apparatus, and method for communicating data between parallel processor cores
US20230281144A1 (en) External Exchange Connectivity
US20230195478A1 (en) Access To Intermediate Values In A Dataflow Computation
Roche et al. Dijkstra-Through-Time: Ahead of time hardware scheduling method for deterministic workloads
Chen et al. MultiCore eMIPS
Kadakia Data routing in multicore processors using dimension increment method
JP2017224089A (ja) データ処理システム