KR101364303B1 - 분산 프로세서 시스템에서의 데이터 멀티캐스팅 - Google Patents

분산 프로세서 시스템에서의 데이터 멀티캐스팅 Download PDF

Info

Publication number
KR101364303B1
KR101364303B1 KR1020127005877A KR20127005877A KR101364303B1 KR 101364303 B1 KR101364303 B1 KR 101364303B1 KR 1020127005877 A KR1020127005877 A KR 1020127005877A KR 20127005877 A KR20127005877 A KR 20127005877A KR 101364303 B1 KR101364303 B1 KR 101364303B1
Authority
KR
South Korea
Prior art keywords
target
message
instructions
processing
operand
Prior art date
Application number
KR1020127005877A
Other languages
English (en)
Other versions
KR20120055611A (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 KR20120055611A publication Critical patent/KR20120055611A/ko
Application granted granted Critical
Publication of KR101364303B1 publication Critical patent/KR101364303B1/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
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/17312Routing techniques specific to parallel machines, e.g. wormhole, store and forward, shortest path problem congestion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • 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/17318Parallel communications techniques, e.g. gather, scatter, reduce, roadcast, multicast, all to all
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • 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, look ahead
    • G06F9/3824Operand accessing
    • 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, look ahead
    • G06F9/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • G06F9/3828Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage with global bypass, e.g. between pipelines, between clusters
    • 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, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks

Abstract

분산 프로세서 아키텍처에서의 데이터 멀티캐스팅에 일반적으로 관련된 방법들, 절차들, 장치들, 컴퓨터 프로그램들, 컴퓨터 액세스가능 매체들, 프로세싱 장치들 및 시스템들이 기술되어 있다. 다양한 구현들은 소스로부터 제 1 메시지를 수신하도록 구성되는 복수의 타깃 명령들을 식별하는 것; 타깃 명령들에 의해 공통으로 공유되는 선택된 정보를 포함하는 타깃 명령들 각각에 대한 타깃 라우팅 명령들을 제 1 메시지에 제공하는 것; 및 식별된 타깃 명령들 중 2개의 타깃 명령들이, 라우터에 대해 서로 상이한 방향들로 위치되어 있는 경우, 제 1 메시지를 복제하고 복제된 메시지들을 식별된 타깃 명령들 각각에 상이한 방향들로 라우팅하는 것을 포함할 수도 있다. 그 제공한 타깃 라우팅 명령들은, 타깃 명령들에 의해 공통으로 공유되고 좌측 오퍼랜드, 우측 오퍼랜드 또는 술어 오퍼랜드로서 식별되는 비트들의 서브세트를 이용하는 선택된 정보를 더 포함할 수도 있고, 타깃 명령들의 복수의 다중-명령 서브세트들 중 하나의 다중-명령 서브세트의 선택을 포함할 수도 있다.

Description

분산 프로세서 시스템에서의 데이터 멀티캐스팅{DATA MULTICASTING IN A DISTRIBUTED PROCESSOR SYSTEM}
정부 후원 연구에 관한 진술
본 개시물은, 적어도 부분적으로, 국방 첨단 과학 기술 연구소 (Defense Advanced Research Projects Agency), 승인 번호 F33615-03-C-4106 에 의한 미국 정부 지원으로 이루어진 것이다. 따라서, 미국 정부는 본 개시물에 대한 특정 권리를 가질 수도 있다.
배경기술
통상의 (미분산) 프로세싱 아키텍처에서는, 명령이 실행할 때, 그 결과를 중앙집중 레지스터 파일에 전송하고 그 결과를 브로드캐스트 바이패스 버스에서 브로드캐스트하여, 그 결과를 기다리는 임의의 명령들이 그것을 즉시 이용할 수도 있도록 한다.
오퍼랜드 네트워크 (operand network) 를 통해 상호 연결된 다수의 프로세싱 코어들로 이루어질 수도 있는 분산 프로세서 아키텍처에서, 통상적으로, 명령의 인코딩은, 값을 필요로 하는 하나 이상의 소비 명령들을 나타내는 식별자를 포함한다. 분산 프로세서 아키텍처는, 예를 들어, 미국 특허 출원 공보 제2005/0005084호에 기술되어 있다.
분산 프로세서 아키텍처에서 명령이 실행할 때, 통상적으로, 결과적인 값을, 그 값을 기다리는 이들 소비 명령들에게만 전송한다. 이러한 타입의 명령 인코딩은, 생산 및 소비 명령들이 상이한 프로세싱 코어들 상에 있는 분산 아키텍처 구현에 양호하게 매칭될 수도 있지만, 이러한 구현에서는 명령 결과가 다수의 소비 명령들에게 전송되어야 할 때 특정 도전과제가 생길 수도 있다. 유사한 도전과제들이 표준 캐시-일관성 온칩 멀티코어 시스템 (standard cache-coherent on-chip multi-core system) 들에서 생길 수도 있다.
분산 프로세서 아키텍처에서의 데이터 멀티캐스팅에 일반적으로 관련된 방법들, 절차들, 장치들, 컴퓨터 프로그램들, 컴퓨터 액세스가능 매체들, 프로세싱 장치들 및 시스템들이 기술되어 있다. 다양한 구현들은 소스로부터 제 1 메시지를 수신하도록 구성되는 복수의 타깃 명령들을 식별하는 것; 타깃 명령들에 의해 공통으로 공유되는 선택된 정보를 포함하는 타깃 명령들 각각에 대한 타깃 라우팅 명령들을 제 1 메시지에 제공하는 것; 및 식별된 타깃 명령들 중 2개의 타깃 명령들이, 라우터에 대해 서로 상이한 방향들로 위치되어 있는 경우, 제 1 메시지를 복제하고 복제된 메시지들을 식별된 타깃 명령들 각각에 상이한 방향들로 라우팅하는 것을 포함할 수도 있다. 그 제공한 타깃 라우팅 명령들은, 타깃 명령들에 의해 공통으로 공유되고 좌측 오퍼랜드, 우측 오퍼랜드 또는 술어 오퍼랜드로서 식별되는 비트들의 서브세트를 이용하는 선택된 정보를 더 포함할 수도 있고, 타깃 명령들의 복수의 다중-명령 서브세트들 중 하나의 다중-명령 서브세트의 선택을 포함할 수도 있다.
하나의 예에서, 다수의 상호 연결된 프로세싱 코어들을 갖는 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 방법이 제공된다. 그 방법은, 소스로부터 제 1 메시지를 수신하도록 구성되는 복수의 타깃 명령들을 식별하는 단계를 포함할 수도 있다. 그 방법은, 식별된 타깃 각각에 대한 타깃 라우팅 명령들을 제 1 메시지에 제공하는 단계를 더 포함할 수도 있고, 타깃 라우팅 명령들 각각은 식별된 타깃 명령들에 의해 공통으로 공유되는 선택된 정보를 포함한다. 그 방법은, 식별된 타깃 명령들 중 2개의 타깃 명령들이, 라우터에 대해 서로 상이한 방향들로 위치되어 있는 프로세싱 코어들과 연관되는 경우, 제 1 메시지를 복제하고 복제된 메시지들을 식별된 타깃 명령들 각각에 상이한 방향들로 라우팅하는 단계를 추가적으로 포함할 수도 있다.
또 다른 예에서, 다수의 상호 연결된 프로세싱 코어들을 갖는 분산 프로세서 아키텍처에서의 데이터 멀티캐스팅을 위한 장치가 제공된다. 그 장치는 소스 및 라우터를 포함할 수도 있다. 소스는, 소스로부터 제 1 메시지를 수신하도록 구성되는 복수의 타깃 명령들을 식별하고, 타깃 명령들에 의해 공통으로 공유되는 선택된 정보를 포함하는 타깃 명령들에 대한 타깃 라우팅 명령들을 제 1 메시지에 제공하도록 구성될 수도 있다. 라우터는, 타깃 라우팅 명령들을 판독하여 타깃 명령들 각각의 위치를 결정하고, 타깃 명령들 중 2개의 타깃 명령들이, 라우터에 대해 서로 상이한 방향들로 위치되어 있는 프로세싱 코어들과 연관되는 경우, 제 1 메시지를 복제하는 것을 포함하여, 제 1 메시지를 타깃 명령들 각각에 라우팅하도록 구성될 수도 있다.
또 다른 예에서, 다수의 상호 연결된 프로세싱 코어들을 갖는 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 시스템이 제공될 수도 있다. 그 시스템은, 온칩 네트워크를 통해 상호 연결된 복수의 프로세싱 코어들을 갖는 분산 프로세싱 장치를 포함할 수도 있다. 소스는 복수의 프로세싱 코어들 중 하나의 프로세싱 코어와 연관될 수도 있다. 복수의 타깃 명령들은 복수의 프로세싱 코어들 중 적어도 하나의 프로세싱 코어와 연관될 수도 있다. 그 시스템은 복수의 라우터들을 더 포함할 수도 있다. 복수의 프로세싱 코어들 각각은 복수의 라우터들 중 대응하는 라우터와 연관될 수도 있다. 복수의 라우터들 중 하나 이상의 라우터들은, 소스로부터 메시지를 수신하고, 메시지로부터 타깃 라우팅 명령들을 식별하는 것으로서, 그 식별된 타깃 라우팅 명령들은, 타깃 명령들 각각의 위치를 결정하기 위해, 타깃 명령들에 의해 공통으로 공유되는 선택된 정보를 포함하는, 그 타깃 라우팅 명령들을 식별하고, 타깃 명령들 중 2개의 타깃 명령들이, 라우터에 대해 서로 상이한 방향들로 위치되어 있는 프로세싱 코어들과 연관되는 경우, 메시지를 복제하며, 복제된 메시지를 타깃 명령들 각각에 라우팅하도록 구성될 수도 있다.
다수의 예들이 개시되어 있지만, 여전히 다른 예들이 다음의 상세한 설명으로부터 당업자에게 자명해질 것이다. 여기에 개시된 시스템들, 장치들 및 방법들은 여기에서의 교시의 사상 및 범위로부터 모두 이탈함이 없이, 다양한 자명한 양태들에서 변경이 가능할 수도 있음이 명백해질 것이다. 따라서, 상세한 설명은 사실상 예시적이고 비한정적인 것으로 간주되어야 한다.
본 개시물의 특징들은 첨부 도면들과 함께 다루어지는, 다음의 설명 및 첨부 청구항들로부터 더욱 완전히 명백해질 것이다. 이들 도면들은 본 개시물에 따라 오직 몇 개의 예들만을 나타낼 뿐이어서, 그의 범위를 한정하는 것으로 고려되지 않는다는 조건 하에, 본 개시물은 첨부 도면들의 사용을 통한 부가적인 특정 및 상세로 기술될 것이다.
도 1 은 분산 프로세서 아키텍처에서의 데이터 멀티캐스팅을 위해 구성된 컴퓨터 시스템의 하드웨어 구성의 일 예를 나타낸 것이다.
도 2 는 프로세싱 타일 (processing tile) 의 일 예를 나타낸 것이다.
도 3 은 메시 네트워크를 통해 커플링된 프로세싱 타일들의 4×4 어레이의 일 예를 나타낸 것이다.
도 4 는 명령에 대한 비트맵의 일 예를 나타낸 것이다.
도 5 는 비트마스크가 레지스터 또는 레저베이션 스테이션 (reservation station) 내에 포함되는 명령의 비트맵의 또 다른 예를 나타낸 것이다.
도 6 은 도 4 에 나타낸 예시적인 명령의 인코딩을 특정하는 일 예시적인 방법을 예시하는 흐름도를 나타낸 것이다.
도 7 은 도 3 에 나타낸 예에 도시된 라우터에 의해 수행되는 라우팅을 위한 일 예시적인 방법을 예시한 흐름도를 나타낸 것이고,
모두는 본 개시물의 적어도 일부 구현들에 따라 배열되어 있다.
다음의 상세한 설명에서는, 이 문서의 일부를 형성하는 첨부 도면들을 참조한다. 도면들에서, 문맥에서 달리 지시하지 않는 한, 유사한 부호들은 통상적으로 유사한 컴포넌트들을 식별한다. 상세한 설명, 도면 및 청구항에 기술된 예시적인 예들은 한정적인 것으로 의도되지 않는다. 여기에 제시된 청구물의 사상 또는 범위로부터 이탈함이 없이, 다른 실시형태들이 이용될 수도 있고 다른 변경들이 이루어질 수도 있다. 여기에 일반적으로 기술되고 도면들에 예시된 본 개시물의 양태들은 배열, 치환, 결합, 분리될 수도 있고, 다양한 상이한 구성들로 설계될 수도 있는데, 이들 모두는 명백히 묵시적으로 고려되고 본 개시물의 일부를 이룬다는 것을 쉽게 이해할 것이다.
여기에 개시되고 기술된 다양한 양태들, 특징들, 예들, 또는 구현들이 단독으로 이용될 수도 있고 또는 다양한 조합으로 이용될 수도 있다. 본 개시물에 따른 방법들은, 소프트웨어, 하드웨어 또는 하드웨어와 소프트웨어의 조합에 의해 구현될 수도 있다.
도 1 은 본 개시물의 적어도 일부 구현에 따라 배열된, 분산 유니-프로세서 아키텍처와 같은 분산 프로세서 아키텍처에서의 데이터 멀티캐스팅을 위해 구성된 컴퓨터 시스템의 하드웨어 구성의 일 예를 나타낸 것이다. 컴퓨터 시스템 (100) 은 프로세싱 장치 (101), 시스템 버스 (102), 운영 시스템 (103), 애플리케이션 (104), 판독 전용 메모리 (105), 랜덤 액세스 메모리 (106), 디스크 어댑터 (107), 디스크 유닛 (108), 통신 어댑터 (109), 인터페이스 어댑터 (110), 디스플레이 어댑터 (111), 키보드 (112), 마우스 (113), 스피커 (114), 디스플레이 모니터 (115), 프로세싱 타일 (processing tile; 118), 프로세싱 코어 (120), 및 라우터 (121) 를 포함한다. 임의의 특정 하드웨어 시스템 구성으로 한정된 것은 아니지만, 도 1 에 예시된 바와 같이, 프로세싱 장치 (101) 는 시스템 버스 (102) 에 의해 다양한 다른 컴포넌트들에 커플링될 수도 있다. 여기에서 이용되는 바와 같이, 프로세싱 타일 (118) 은 타일 (118) 이라고도 지칭될 수도 있고, 프로세싱 코어 (120) 는 코어 (120) 라고도 지칭될 수도 있다. 프로세싱 장치 (101) 는 하나 이상의 집적 회로 칩들 및/또는 집적 회로 다이들로서 구현될 수도 있다. 프로세싱 장치 (101) 는, 멀티코어 프로세싱 칩일 수도 있고, 각각이 관련 프로세싱 코어 (120) 및 대응하는 라우터 (121) 를 갖는 다수의 프로세싱 타일들 (118) 을 포함할 수도 있다. 온칩 네트워크와 같은, 프로세싱 장치 (101) 상의 네트워크에 의해 다수의 프로세싱 타일들 (118) 이 상호 연결될 수도 있고 상호 동작가능할 수도 있다. 운영 시스템 (103) 은 프로세싱 장치 (101) 상에서 실행하여, 제어를 제공하고, 도 1 에 도시된 다양한 컴포넌트들의 기능들을 조정할 수도 있다. 본 개시물의 원리들에 따라 배열되는 애플리케이션 (104) 은, 운영 시스템 (103) 과 함께 실행할 수도 있고, 운영 시스템 (103) 에 호출들을 제공할 수도 있으며, 그 호출들은 애플리케이션 (104) 에 의해 수행될 다양한 기능들 또는 서비스들을 구현한다.
도 1 을 참조하면, ROM (read-only memory; 105) 은 시스템 버스 (102) 에 커플링될 수도 있고, 컴퓨터 디바이스 (100) 의 특정 기본 기능들을 제어하는 BIOS (basic input/output system) 를 포함할 수도 있다. 또한, RAM (random access memory; 106) 및 디스크 어댑터 (107) 는 시스템 버스 (102) 에 커플링될 수도 있다. 운영 시스템 (103) 및 애플리케이션 (104) 을 포함하는 소프트웨어 컴포넌트들이, 실행을 위한 컴퓨터 시스템의 메인 메모리일 수도 있는 RAM (106) 에 로딩될 수도 있다는 것에 주목해야 한다. 디스크 어댑터 (107) 는, 디스크 유닛 (108), 예를 들어, 디스크 드라이브, 또는, 예를 들자면, SATA (Serial Advanced Technology Attachment) 어댑터, USB (universal serial bus) 어댑터, SCSI (Small Computer System Interface) 와 같은 임의의 다른 적절한 어댑터와 통신하는 IDE (integrated drive electronics) 어댑터 (예를 들어, Parallel Advanced Technology Attachment (병렬 고급 기술 결합) 또는 "PATA") 일 수도 있다
컴퓨터 시스템 (100) 은 버스 (102) 에 커플링된 통신 어댑터 (109) 를 더 포함할 수도 있다. 통신 어댑터 (109) 는 버스 (102) 를 외부 네트워크 (미도시) 와 상호 연결하여, 컴퓨터 시스템 (100) 이 다른 유사한 디바이스들과 통신하게 할 수도 있다. 또한, 사용자 인터페이스 어댑터 (110) 및 디스플레이 어댑터 (111) 를 통해 I/O 디바이스들이 컴퓨터 시스템 (100) 에 커플링될 수도 있다. 사용자 인터페이스 어댑터 (110) 를 통해 키보드 (112), 마우스 (113) 및 스피커 (114) 모두가 버스 (102) 에 상호 연결될 수도 있다. 이들 디바이스들 중 임의의 디바이스를 통해 데이터가 컴퓨터 시스템 (100) 에 입력될 수도 있다. 디스플레이 어댑터 (111) 에 의해 디스플레이 모니터 (115) 가 시스템 버스 (102) 에 커플링될 수도 있다. 이러한 방식으로, 사용자는 키보드 (112) 또는 마우스 (113) 를 통해 컴퓨터 시스템 (100) 과 상호 작용하는 것이 가능하고, 디스플레이 (115) 또는 스피커 (114) 를 통해 컴퓨터 시스템 (100) 으로부터의 출력을 수신하는 것이 가능하다.
도 2 는 본 개시물의 적어도 일부 구현에 따라 배열된 프로세싱 타일의 일 예를 나타낸 것이다. 도 2 는 프로세싱 타일 (210), 링크들 (211, 212), 프로세싱 코어 (213), 라우터 (214), 메시지 (215) 및 링크들 (216) 을 포함한다. 나타낸 바와 같이, 프로세싱 타일 (210) 은, 메시지 (215) 가 이동할 수도 있는 링크들 (211, 212) 을 통해 다른 프로세싱 타일들과 커플링될 수도 있다. 프로세싱 타일 (210) 은 링크들 (216) 에 의해 서로 커플링될 수도 있는 프로세싱 코어 (213) 및 라우터 (214) 를 더 포함할 수도 있다. 프로세싱 코어 (213) 및 라우터 (214) 는 본 개시물에 따른 멀티캐스트 라우팅 방법들 및 절차들의 예들을 수행하도록 구성될 수도 있다. 프로세싱 타일 (210) 은 싱글스레드 프로그램 또는 멀티스레드 프로그램 중 어느 하나의 프로그램을 실행하기 위해 다른 프로세싱 타일들과 함께 동작하도록 구성될 수도 있다. 이를테면 도 3 에 예시된 일부 예에서, 각각의 프로세싱 타일은 멀티캐스트를 통해 128개의 명령들까지와 통신할 수도 있는 명령들을 보유할 수도 있다.
도 3 은 본 개시물의 적어도 일부 구현에 따라 배열된, 메시 네트워크를 통해 커플링된 프로세싱 타일들의 4×4 어레이의 일 예를 나타낸 것이다. 도 3 은 4×4 어레이 (310), 메시 네트워크 (312), 프로세싱 코어들 (213), 라우터들 (214), 메시지들 (315, 315a, 315b, 315c, 315d, 315e, 315f, 315g), 라우터 (316), 프로세싱 타일들 (210), 프로세싱 타일 <0, 0> (325), 프로세싱 타일 <2, 2> (322), 프로세싱 타일 <3, 0> (324), 프로세싱 타일 <0, 1> (326), 프로세싱 타일 <3, 3> (328), 링크들 (330, 332, 338, 342), 프로세싱 타일 <2, 1> (334), 라우터 (336), 프로세싱 타일 <1, 1> (340), 및 프로세싱 타일 <2, 0> (344) 을 포함한다. 개개의 프로세싱 타일들 (210) 이 어레이 (310) 내의 위치 (로우, 칼럼) 로 언급될 수도 있다. 예를 들어, 프로세싱 타일 <0, 1> (326) 은 어레이 (310) 의 첫 번째 로우, 두 번째 칼럼에 위치될 수도 있다. 프로세싱 코어 (213) 및 라우터 (214) 가 각각의 프로세싱 타일 (210) 과 연관되고, 이 프로세싱 타일 (210), 프로세싱 코어 (213) 및 라우터 (214) 가 도 2 의 프로세싱 타일들 (210), 프로세싱 코어들 (213) 및 라우터들 (214) 에 대응할 수도 있다. 프로세싱 타일들 (210) 은 싱글스레드 프로그램 또는 멀티스레드 프로그램 중 어느 하나의 프로그램을 실행하기 위해 함께 동작하도록 구성될 수도 있고, 이를테면 도 3 에 예시된 일부 예에서, 각각의 프로세싱 타일은 멀티캐스트를 통해 다수의 명령들 (예를 들어, 128개의 명령들까지) 과 통신할 수도 있는 명령들을 보유할 수도 있다.
프로세싱 타일들 (210) 의 어레이 (310) 에서의 특정 좌표에 각각의 명령 식별자가 매핑될 수도 있다. 16개의 프로세싱 타일들 (210) 이 x좌표에 대해 이 (2) 비트들 및 y좌표에 대해 이 (2) 비트들과 매핑될 수도 있다. 이 예의 블록에서는 총 128개의 가능한 타깃 명령들이 존재할 수도 있기 때문에, 각각의 프로세싱 타일 (210) 은 여덟 (8) 개의 명령들을 수신할 수도 있다. 따라서, 일부 예에서, 명령에 대해 프로세싱 타일 (210) 의 프로세싱 코어 (213) 내의 8개의 가능한 슬롯들 (예를 들어, 위치들) 중 하나의 슬롯을 특정하는데 삼 (3) 비트들이 이용될 수도 있다.
도 3 에 도시된 예에 예시된 바와 같이, 타일 <2, 2> (322) 에 의해 명령이 수행될 수도 있고, 타일 <2, 2> (322) 은 그의 실행된 명령 결과들을 타일들 <3, 0> (324), <0, 1> (326), 및 <3, 3> (328) 에 전송할 수도 있다. 타일들 <3, 0> (324), <0, 1> (326), 및 <3, 3> (328) 에 상주하는 이들 타깃들이, 예를 들어, 도 4 및 도 5 에 나타낸 예들에 나타낸 예시적인 멀티캐스트 포맷들을 이용하는 명령들로 인코딩될 수도 있다. 타일 <2, 2> (322) 에서의 라우터 (316) 는, 타일 <2, 2> (322) 의 동쪽 방향 (예를 들어, 우측으로) 과 서쪽 방향 (예를 들어, 좌측으로) 양쪽의 칼럼들에서의 타일들 (210) 에 의해 값이 요구되는 것을 결정하기 위해, 메시지 (315) 의 서브세트 및 비트마스크 비트들을 해석하도록 배열될 수도 있다. 타일 <2, 2> (322) 에 대한 명령은, 본 개시물에 따른 예시적인 타깃 인코딩을 이용하여 메시지의 2개의 사본들 (315a, 315b) 을 네트워크 (312) 에 도입시킬 수도 있다. 도 3 에 예시된 바와 같이, 메시지 (315a) 가 서쪽으로 지향될 수도 있지만, 메시지 (315b) 는 동쪽으로 지향될 수도 있다.
명령 좌표 및 라우팅 간의 일관성을 달성하기 위해 이 예에서 구현될 수도 있는 프로세싱 타일들 (210) 에 대한 명령들의 다수의 상이한 가능한 매핑들이 존재한다. 매핑의 하나의 예는 모든 16개의 프로세싱 타일들 (210) 에 걸쳐 명령 식별자들을 균일하게 인터리빙할 수도 있다. 예를 들어, 식별자들 "0", "16", "32", "48" 등이 어레이 (310) 의 상단 좌측 코너에서의 프로세싱 타일 <0, 0> (325) 에 매핑될 수도 있고, 식별자들 "1", "17", "33", "49" 등이 프로세싱 타일 <0, 1> (326) 등에 매핑될 수도 있다. 이러한 예시적인 매핑에 의하면, 도 4 에 나타낸 예로부터의 서브세트 (0) 와 같은 서브세트가, 16개의 타일들 각각에 매핑되는 하나의 명령을 특정할 수도 있다. 도 4 의 서브세트들 (418) 과 같은 다른 서브세트들 각각에 대해서도 마찬가지이다. 타일들에 대한 명령들의 매핑은, 명령이 매핑되는 프로세싱 코어를 선택하는데 명령 식별자들로부터의 어떤 비트들이 이용되느냐에 의존할 수도 있다. 변화들이 유용할 수도 있고, 명령들이 프로세싱 코어들에 비균일하게 매핑될 수도 있다 (예를 들어, 일부 블록은 모든 명령들을 하나의 프로세싱 코어에 매핑시킬 수도 있고, 다른 블록들은 명령들을 모든 프로세싱 코어들로 분산시킬 수도 있으며, 다른 블록들은 2개 이상의 프로세싱 코어이지만 프로세싱 코어들 전부보다는 적은 프로세싱 코어에 명령들을 매핑시킬 수도 있다).
라우터 (316) 가 배열되어, 메시지 (315) 를 복제하고, 로우 2 에서의 링크들 (332 및 330) 을 따라 (메시지 (315a) 로 도시된) 서쪽 방향과 (메시지 (315b) 로 도시된) 동쪽 방향 양쪽으로 메시지 (315) 의 사본들을 각각 전송할 수도 있다. 메시지 (315f) 로 예시된 바와 같이, 동쪽으로 향하는 메시지 (315b) 가 어떠한 추가의 복제도 필요로 하지 않고, 타일 <3, 3> (328) 에 직접 라우팅될 수도 있다. 동쪽으로 향하는 메시지 (315a) 가 타일 <2, 1> (334) 에서의 라우터 (336) 에 도착하면, 라우터 (336) 가 메시지 복제가 필요하다는 것을 인지할 수도 있다. 따라서, 라우터 (336) 는, 메시지의 하나의 사본 (315c) 을 북쪽 방향 (예를 들어, 상향) 으로 링크 (338) 를 따라 타일 <1,1> (340) 을 향해 전송할 수도 있고, 메시지의 다른 사본 (315d) 을 서쪽 방향으로 링크 (342) 를 따라 타일 <2,0> (344) 을 향해 전송할 수도 있다. 그 후에, 메시지의 이들 사본들 (315c 및 315d) 각각이, 이를테면 메시지들 (315e 및 315g) 로 도시된 추가의 복제를 필요로 하는 일 없이, 그들 각각의 타깃들 (타일 <0, 1> (326), 타일 <3, 0> (324)) 에 직접 라우팅될 수도 있다. 라우팅 경로들은, 메시지의 2개 이상의 사본을 전달하는데 어떠한 링크도 이용되지 않는 최소 신장 트리를 형성할 수도 있다. 예를 들어, 일부 예에서는, 메시지 (315) 의 사본이 특정 링크를 단지 1회만 통과 (traverse) 할 수도 있다.
본 개시물의 일부 예에 따른 인코딩으로부터 다수의 타깃들을 해석하도록 라우터들 (316) 이 배열되어 있는 도 3 에 도시된 예에 따라 멀티캐스트가 구현될 수도 있다. 프로세싱 타일들 (210) 에 대한 좌표가, 예를 들어, 16-비트 비트마스크로부터 유도될 수도 있다. 라우터들 (214) 은, 비트마스크를 디코딩할 수도 있고 다음의 동작들 중 하나 이상의 동작을 결정할 수도 있는 조합 로직을 포함할 수도 있다:
1) 라우터 (214) 와 동일한 프로세싱 타일 (210) 에 상주하는 프로세싱 코어 (213) 에 대응하는 비트가 설정되면, 라우터 (214) 는 동일한 프로세싱 타일 (210) 에 상주하는 프로세싱 코어 (213) 에 메시지 (315) 의 사본을 제공할 수도 있다. 대안적으로, 프로세싱 코어 (213) 자체가 메시지 (315) 에 포함되는 오퍼랜드 (operand) 들을 포워딩할 수도 있다.
2) 라우터 (214) 의 북쪽에 더 많은 타깃들이 존재한다는 것을 비트들 중 임의의 비트가 나타내면, 라우터 (214) 는 메시지 (315) 의 사본을 만들 수도 있고 어레이 (310) 상의 그의 위치의 북쪽으로 그 사본을 전송할 수도 있다. 또한, 라우터 (214) 는, 그 라우터 (214) 의 북쪽에 위치되지 않은 타깃들에 대한 비트마스크 비트들을 삭감시킬 수도 있다.
3) 라우터 (214) 는 그 라우터 (214) 의 남쪽, 동쪽 및 서쪽에 위치된 가능한 타깃들에 대해 동작 "2" 를 반복하도록 구성될 수도 있다.
상술된 동작들 (1 내지 3) 이 병렬 하드웨어에 의해 병렬로 수행될 수도 있다. 또한, 어레이 (310) 내의 라우터 (214) 의 좌표에 따라, 동작들 (1 내지 3) 에 대한 조합 로직이 라우터 (214) 각각에 대해 조정될 수도 있다. 도 3 에 도시된 예는 X-Y DOR (dimension-order routing) 을 이용한다. 그러나, 다양한 다른 라우팅 알고리즘들이 이용될 수도 있는 것이 명백하다.
도 4 는 본 개시물의 적어도 일부 구현에 따른 명령에 대한 비트맵의 일 예를 나타낸 것이다. 도 4 는 컴파일-타임 및/또는 런타임 명령 스케줄러 (400), 명령 (410), 오피코드 필드 (opcode field; 411), 술어 필드 (predicate field; 412), 미사용 비트 (413), 비트마스크 모드 비트 (414), 2-비트 좌측/우측/술어 오퍼랜드 필드 (416), 3-비트 서브세트 필드 (418), 및 16-비트 비트마스크 (420) 를 포함한다. 컴파일-타임 및/또는 런타임 명령 스케줄러 (400) 는, 예를 들어, 타깃에 의해 판독될 값을 포함할 수도 있고 타깃이 그 값으로 무엇을 수행할지에 관해 특정하는 명령 (410) 을, 예를 들어, 컴파일하고/하거나 스케줄링하는데 이용될 수도 있다. 타깃에 상주하는 술어 조건에 기초하여, 2-비트 술어 필드 (412) 는 몇가지 가능성, 이 예에서는 4가지 가능성을 특정할 수도 있다: 예를 들어, (1) 명령이 타깃에 의해 실행된다, (2) 명령이 참일 때 실행된다, (3) 명령이 거짓일 때 실행된다, 또는 (4) 명령이 타깃에 의해 실행되지 않는다. 타깃이 서술되지 않은 경우에는, 2-비트 술어 필드 (412) 에 무엇이 특정되는지에 상관없이 명령이 실행될 수도 있다. 다른 예들에서는, 더 많거나 더 적은 비트 술어 필드들이 이용될 수 있다.
도 4 에 나타낸 예와 같은 일부 예에 의하면, 16개의 상이한 타깃들까지 특정하는 것을 돕는데 통상적으로 이용되지 않는 일부 비트를 명령 (410) 이 이용할 수도 있고, 예를 들어, 비트 할당에 따라 타깃들의 수가 변경될 수도 있다. 이것은, 부분적으로, 타깃들을 공통성에 따라 그룹화함으로써, 달성될 수도 있다. 예를 들어, 명령 인코딩의 타입을 특정하는데 비트마스크 모드 비트 (414) 가 이용될 수도 있다. 명령 인코딩의 타입의 결정은 컴파일-타임 및/또는 런타임 명령 스케줄러 (400) 에 의해 행해질 수도 있다. 이러한 경우, 0 으로 설정되면, 명령은 당업계에 공지된 다른 인코딩 기술들을 이용할 수도 있다. 예를 들어, (예를 들어, 통상적인 온칩 네트워크들의 디폴트 모드를 이용하는) 포인트-대-포인트 메시지 방식으로 다수의 타깃들 각각에 동일한 메시지들이 개별적으로 전송될 수도 있는 경우, 동일한 데이터를 전송하는데 동일한 링크들이 다수회 재사용될 필요가 있을 수도 있다. 그러나, 비트 (414) 가 1 로 설정되면, 예를 들어, 도 4 에 나타낸 인코딩을 이용하여, 이러한 동일한 사양을 공유하는 타깃들 모두에 대해 좌측 오퍼랜드, 우측 오퍼랜드, 또는 술어 오퍼랜드에 값이 전송될지 여부를 특정하는데 2비트들 (416) 이 이용될 수도 있다. 또 다른 가능성은, 16비트들 (420) 에 대해, 상이한 타입의 오퍼랜드를 각각 특정하는 8개의 2-비트 쌍들을 특정하여, 멀티캐스트할 오퍼랜드들이 더 적어지게 되지만 타깃들에 대해 유연성을 갖게 된다는 것이다.
본 개시물의 일부 예에 따른 매핑을 이용하면, 예를 들어, 오퍼랜드가 프로세싱 타일 (326) 과 같은 타깃 프로세싱 타일에 도달하였다면, 도 4 에 나타낸 서브세트 (418) 와 같은 서브세트에 대응하는 슬롯과 좌측/우측/술어 오퍼랜드를 특정하는데 공통 비트들 (416) 과 같은 공통 비트들이 이용될 수도 있다. 일부 예는, 예를 들어, 3개 이상의 타깃들을 포함하는, 생성 명령에 의해 특정될 다양한 수의 타깃들을 허용할 수도 있고, 타깃들의 수는, 예를 들어, 비트 할당에 따라 변경될 수도 있다. 또한, 네트워크 (312) 자체는, 생성 명령 프로세싱 타일 (예를 들어, 프로세싱 코어 (316)) 과 타깃 소비 명령 프로세싱 타일들 (예를 들어, 프로세싱 타일들 (324, 326, 328)) 사이에서 네트워크내 메시지 복제를 자동으로 수행할 수도 있다. 네트워크내 메시지 복제의 이러한 예들은, 네트워크 내의 링크를 1회 통과할 필요가 있는 오퍼랜드 메시지 (예를 들어, 메시지 (315)) 를 제공할 수도 있다 (예를 들어, 생성 명령 프로세싱 타일은 하나의 메시지를 네트워크 (예를 들어, 네트워크 (312)) 에 도입시킬 수도 있고, 그 네트워크는 필요에 따라 메시지를 자동으로 복제하여, 메시지를 타깃 타일들에 자동으로 산개시키고 라우팅시킬 수도 있다).
또한, 3비트들을 채용함으로써, 명령은 128개의 가능한 타깃 명령들의 8개의 가능한 16-명령 서브세트들 (418) 중 하나를 선택할 수도 있다. 선택된 서브세트 (418) 에 대해 타깃으로 된 16개의 명령들이 16-비트 비트마스크 (420) 에 의해 식별될 수도 있다. 따라서, 타깃 명령들은 동일한 서브세트 (418) 및 좌측/우측/술어 오퍼랜드 필드 (416) 를 공유할 수도 있다. 컴파일-타임 및/또는 런타임 명령 스케줄러 (400) 는 타깃 명령들을 서브세트들 (418) 로 묶어서, 단일 멀티캐스트 명령으로 특정될 수도 있도록 하고, 동일한 오퍼랜드를 필요로 하는 명령들을 동일한 서브세트 (418) 에 할당함으로써 프로그램을 최적화할 수도 있다. 예를 들어, 도 4 에 도시된 명령에 대한 인코딩은, 8개의 가능한 서브세트들 (418) 이 다음의 명령 식별자들을 포함하게 할 수도 있다:
서브세트 0: [0-15];
서브세트 1: [16-31];
서브세트 2: [32-47];
서브세트 3: [48-63];
서브세트 4: [64-79];
서브세트 5: [80-95];
서브세트 6: [96-111]; 및
서브세트 7: [112-127].
또한, 16비트들 (420) 은, 서브세트 (418) 에서의 16개의 타깃 명령들 중 어느 것이 오퍼랜드를 수신하는지를 표시하는 타깃 비트마스크를 특정할 수도 있다. 기타 다른 용도를 위해 1비트 (413) 가 미사용되거나 예비될 수도 있다. 또한, 다른 다양한 예시적인 인코딩들이 가능하다. 하나의 이러한 예시적인 인코딩은 15-비트 비트 마스크를 이용함으로써 1비트 절약할 수도 있다.
도 5 는 본 개시물의 적어도 일부 구현에 따라, 레지스터 또는 레저베이션 스테이션 내에 비트마스크가 포함되는 명령에 대한 비트맵의 또 다른 예를 나타낸 것이다. 도 5 는 컴파일-타임 및/또는 런타임 명령 스케줄러 (500), 명령 (510), 오피코드 필드 (411), 술어 필드 (412), 4비트들 (513); 비트마스크 모드 비트 (514); 2-비트 좌측/우측/술어 오퍼랜드 필드 (516); 1비트 서브세트 필드 (518); 및 15비트들 (520) 을 포함한다. 예시된 바와 같이, 명령 (510) 은, 도 4 에 예시된 예에 나타내었지만 명령 (510) 에서 상이한 세트의 공통 비트들을 인코딩하는, 동일한 오피코드 필드 (411) 및 술어 필드 (412) 를 가질 수도 있다. 도 4 에 도시된 예와 유사하게, 명령 인코딩의 타입을 특정하는데 하나의 비트마스크 모드 비트 (514) 가 이용될 수도 있다. 이러한 경우, 0 으로 설정되면, 명령은, 제한된 수의 타깃들에 제공하는, 당업계에 공지된 다른 인코딩 기술들을 이용할 수도 있다. 그러나, 비트 (514) 가 1 로 설정되면, 이러한 동일한 사양을 공유하는 타깃들 모두에 대해 좌측 오퍼랜드, 우측 오퍼랜드, 또는 술어 오퍼랜드에 값이 전송될지 여부를 특정하는데 2-비트 좌측/우측/술어 오퍼랜드 필드 (516) 가 이용될 수도 있다. 멀티캐스트의 타깃들 모두에 대해 1비트가 공통적으로 이용되어, 이 예에서는 128개의 가능한 타깃 명령들의 2개의 가능한 64-비트 서브세트들 중 하나를 인코딩할 수도 있다는 것을 1비트 서브세트 필드 (518) 가 특정할 수도 있다. 따라서, 타깃 명령들은 동일한 서브세트 필드 (518) 및 좌측/우측/술어 오퍼랜드 필드 (516) 를 공유할 수도 있다. 예를 들어, 도 5 에 도시된 명령 (510) 에 대한 인코딩은, 2개의 가능한 서브세트들이 다음의 명령 식별자들을 포함하게 할 수도 있다:
서브세트 0: [0-63]; 및
서브세트 1: [64-127].
64-비트 비트마스크가 하나 이상의 다른 명령들에 의해 생성될 수도 있고, 명백하게 또는 절대적으로 멀티캐스트 명령 (510) 에 의해 이용되어, 지정된 서브세트 내의 64개의 가능한 타깃 명령들 중 하나 이상을 특정할 수도 있음에 따라, 명령 (510) 에서의 비트들의 나머지 (예를 들어, 513, 520) 가 미사용 (또는 다른 용도를 위해 예비) 될 수도 있다. 일부 예에 대해서는, 4개의 가능한 32-명령 서브세트들 중 하나를 특정하는데 2비트들을 갖는 32-비트 비트마스크를 이용하는 것을 포함하는 다른 다양한 구현들이 가능하다. 명령 인코딩들 (410, 510) 에서의 작은 변경들에 의해, 도 4 및 도 5 에 예시된 예시적인 구현들 양쪽이 동시에 이용될 수도 있다. 예를 들어, 비트마스크에서의 비트들의 수와 서브세트에서의 비트들의 수가 변경되고 거기에 할당된 비트들의 다양한 조합을 이용함으로써, 다양한 수의 타깃들이 달성될 수도 있다.
도 6 은 본 개시물의 적어도 일부 구현에 따른, 도 4 에 나타낸 예시적인 명령의 인코딩을 특정하는 일 예시적인 방법을 예시한 흐름도를 나타낸 것이다. 일부 예시의 목적으로, 16개의 명령들보다 더 많거나 더 적은 명령을 식별할 수 있는 대안적인 타깃 비트마스크들 및/또는 비트 할당들이 예측되지만, 16개의 명령들까지 식별하는 것이 가능한 타깃 비트마스크 및 비트 할당이 예시되어 있다. 도 6 은, 블록들 610, 620, 630, 640, 650, 660, 및/또는 670 으로 나타낸 바와 같이 기능적 동작들 또는 액션들 중 하나 이상을 포함할 수도 있는 프로세스 (600) 를 예시한 것이다.
프로세스 (600) 는 블록 610 (좌측 오퍼랜드, 우측 오퍼랜드, 또는 술어 오퍼랜드 중 어느 하나로서의 단일 명령으로부터의 값을 요청하는 16개의 명령들까지 식별), 블록 620 (동일한 공통 서브세트 비트들을 공유하는 서브세트에 타깃 명령들 중 일부 또는 전부를 배치), 블록 630 (멀티캐스트 생산자 명령 비트마스크 모드 비트를 설정), 블록 640 (멀티캐스트 오퍼랜드 타입 비트들을 좌측 오퍼랜드, 우측 오퍼랜드 또는 술어 오퍼랜드인 것으로 설정), 블록 650 (멀티캐스트 오퍼랜드 서브세트 비트들을 설정하여 16개 명령들의 8개 서브세트들 중 하나를 인코딩), 블록 660 (16-명령 서브세트에서의 대응하는 명령이 오퍼랜드를 수신하기 위한 것인 경우, 비트마스크 필드에 각각의 비트를 설정), 및/또는 블록 670 (종료) 중 하나 이상을 포함할 수도 있다. 대안적으로, 도 4 의 예의 8개의 서브세트들보다 더 많거나 더 적게 다루기 위해, 비트맵의 비트 할당이 변경될 수 있다. 도 6 에 예시된 프로세스 (600) 가, 예를 들어, 컴파일러에 의해 수행될 수도 있다. 프로세스 (600) 가 이 예에서는 컴파일러로 구현될 수도 있지만, 예시된 예시적인 방법이 다양한 다른 프로세싱 장치들에 의해서도 수행될 수도 있다.
도 6 을 참조하면, 블록 610 에서, 프로세스 (600) 는, 예를 들어, 비트 할당에 따라 타깃들의 수가 변경될 수도 있는 16개의 명령들까지 식별할 수도 있다. 명령들은 좌측 오퍼랜드, 우측 오퍼랜드, 또는 술어 오퍼랜드 중 어느 하나로서의 단일 명령으로부터의 값을 요청할 수도 있다. 다음에, 블록 620 에서, 예시적인 방법에 의하면, 프로세스 (600) 는 동일한 공통 서브세트 비트들을 공유하는 서브세트 (16개 명령들의 8개 서브세트들 중 하나) 에 타깃 명령들을 배치할 수도 있다. 블록 630 에서, 프로세스 (600) 는 멀티캐스트 생산자 명령 비트마스크 모드 비트 (비트 21) = 1 을 설정할 수도 있다. 그 다음에, 블록 640 에서, 프로세스 (600) 는 블록 610 에서 식별된 바와 같이, 멀티캐스트 오퍼랜드 타입 비트들 (비트들 20:19) 을 좌측 오퍼랜드, 우측 오퍼랜드 또는 술어 오퍼랜드인 것으로 설정할 수도 있다. 그 다음에, 블록 650 에서, 프로세스 (600) 는 멀티캐스트 오퍼랜드 서브세트 비트들 (18:16) 을 설정하여 16개 명령들의 8개 서브세트들 중 하나를 인코딩할 수도 있다. 블록 660 에서, 프로세스 (600) 는 16-명령 서브세트에서의 대응하는 명령이 오퍼랜드를 수신하기 위한 것인 경우, 비트마스크 필드에 각각의 비트를 설정할 수도 있고, 그 후에 프로세스는 완료된다 (블록 670).
도 7 은 본 개시물의 적어도 일부 구현에 따라 배열된, 도 3 에 나타낸 예에 도시된 라우터에 의해 수행되는 라우팅을 위한 일 예시적인 방법을 예시한 흐름도를 나타낸 것이다. 도 7 은 블록들 701, 710, 720, 725, 730, 735, 740, 745, 750, 755, 760, 765, 770, 및/또는 775 에 의해 나타낸 기능적 동작들 또는 액션들 중 하나 이상을 포함할 수도 있는 프로세스 (700) 를 예시한 것이다.
프로세스 (700) 는 블록 701 (인커밍 메시지로 시작), 인커밍 메시지 (705), 블록 710 (인커밍 메시지의 헤더를 판독), 블록 720 (메시지의 타깃의 위치가 북쪽 방향인지 여부를 질의), 블록 725 (메시지의 사본을 만들어서 그 사본을 북쪽으로 전송), 블록 730 (메시지의 타깃의 위치가 동쪽 방향으로 위치되어 있는지 여부를 질의), 블록 735 (메시지의 사본을 만들어서 그 사본을 동쪽으로 전송), 블록 740 (메시지의 타깃의 위치가 남쪽 방향으로 위치되어 있는지 여부를 질의), 블록 745 (메시지의 사본을 만들어서 그 사본을 남쪽으로 전송), 블록 750 (메시지의 타깃의 위치가 서쪽 방향인지 여부를 질의), 블록 755 (메시지의 사본을 만들어서 그 사본을 서쪽으로 전송); 블록 760 (메시지의 타깃의 위치가 로컬 프로세싱 코어인지 여부를 질의), 블록 765 (네트워크로부터 메시지의 사본을 추출하여 그 메시지의 사본을 로컬 프로세싱 코어에 전송), 블록 770 (또 다른 인커밍 메시지가 존재하는지 질의), 및 블록 775 (종료) 중 하나 이상을 포함할 수도 있다.
예시된 예는, 프로세스 (700) 에 의해 라우팅될 필요가 있는 인커밍 메시지 (705) 를 갖는 블록 701 에서 시작한다. 일부 예에서, 프로세스 (700) 는, 예를 들어, 도 2 및 도 3 에 나타낸 예들의 라우터 (214) 에서 구현될 수도 있다.
블록 710 에서, 프로세스 (700) 는 인커밍 메시지의 헤더를 판독하여, 메시지 (705) 의 타깃들의 위치를 결정할 수도 있다. 이것은, 예를 들어, 도 5 에 대해 상술된 조합 로직에 의해 달성될 수도 있다. 블록 720 에서, 프로세스 (700) 는 메시지 (705) 의 타깃의 위치가, 예를 들어, 어레이 (310) 와 같은 어레이 상의 프로세스 (700) 의 위치의 북쪽 방향 (예를 들어, 상측 방향) 인지 여부를 질의할 수도 있다. 예 이면, 블록 725 에서, 프로세스 (700) 는 메시지 (705) 의 사본을 만들 수도 있고, 그 사본을 그의 위치에서 북쪽으로 전송할 수도 있다. 그 다음에, 블록 730 에서, 프로세스 (700) 는 메시지의 타깃의 위치가 어레이 상의 그의 위치의 동쪽 방향 (예를 들어, 우측) 으로 위치되어 있는지 여부를 질의할 수도 있다. 예 이면, 블록 735 에서, 프로세스 (700) 는 메시지의 사본을 만들 수도 있고, 그 사본을 그의 위치에서 동쪽으로 전송할 수도 있다. 그 다음에, 블록 740 에서, 프로세스 (700) 는 메시지의 타깃의 위치가 어레이 상의 그의 위치의 남쪽 방향 (예를 들어, 하측 방향) 으로 위치되어 있는지 여부를 질의한다. 예 이면, 블록 745 에서, 프로세스 (700) 는 메시지의 사본을 만들 수도 있고, 그 사본을 그의 위치에서 남쪽으로 전송할 수도 있다. 그 다음에, 블록 750 에서, 프로세스 (700) 는 메시지의 타깃의 위치가 어레이 상의 그의 위치의 서쪽 방향 (예를 들어, 좌측) 인지 여부를 질의할 수도 있다. 예 이면, 블록 755 에서, 프로세스 (700) 는 메시지의 사본을 만들 수도 있고, 그 사본을 어레이 상의 그의 위치에서 서쪽으로 전송할 수도 있다.
블록 760 에서, 프로세스 (700) 는, 메시지의 타깃의 위치가, 프로세스 (700) 와 연관된 프로세싱 타일 (예를 들어, 210) 에 위치된 프로세싱 코어 (예를 들어, 213) 인지 여부를 질의할 수도 있다. 예 이면, 블록 765 에서, 프로세스 (700) 는 네트워크로부터 메시지의 사본을 추출할 수도 있고, 그 사본을 (예를 들어, 프로세스 (700) 와 동일한 프로세싱 타일 상에 상주하는) 로컬 프로세싱 코어에 제공할 수도 있다. 그 다음에, 블록 770 에서, 프로세스 (700) 는 라우팅되어야 할 필요가 있을 수도 있는 또 다른 인커밍 메시지 (705) 가 존재하는지를 질의할 수도 있다. 예 이면, 그 방법은, 프로세스 (700) 가 인커밍 메시지 (705) 의 헤더를 판독하여 메시지 (705) 의 타깃들의 위치를 결정할 수도 있는 블록 710 으로 되돌아갈 수도 있다. 또 다른 인커밍 메시지가 존재하지 않는 경우, 그 방법은 또 다른 인커밍 메시지가 존재할 때까지 블록 775 에서 종료할 수도 있고, 그 포인트에서 프로세스 (700) 는, 도 7 에 예시되고 여기에 상술된 동작들을 반복할 수도 있다.
일부 예에 의하면, 메시지 (705) 는, 예를 들어, 도 3 에 도시된 바와 같이, 북쪽 또는 남쪽 방향으로 라우팅되기 전에, 동쪽 또는 서쪽 방향으로 라우팅될 수도 있다. 다른 예들에 의하면, 메시지를 북쪽 또는 남쪽 방향으로 전송하는 것은, 메시지를 동쪽 또는 서쪽 방향으로 전송하는 것보다 우선 순위를 가질 수도 있다. 일부 예에서, 복제들을 포함하여 메시지의 링크들의 총 개수를 최소화하기 위해 메시지가 어느 방향(들) 으로 먼저 전송되어어야 하고, 타깃(들) 에 도달하도록 이동될 수도 있는지를 프로세스가 결정하는 동적인 우선 순위화가 구현될 수도 있다. 일부 예는 지향성 우선 순위화 구현들 중 하나와 동적 구현의 조합을 이용할 수도 있어서, 복제를 포함하여 메시지의 링크들의 총 개수를 증가시키지 않는 경우, 하나의 방향이 또 다른 방향보다 우선 순위를 가질 수도 있고, 타깃(들) 에 도달하도록 이동될 수도 있다.
여기에 기술된 유니-프로세서 아키텍처와 같은 분산 프로세서 아키텍처에서의 데이터 멀티캐스팅을 위한 다양한 예들이, 예를 들어, TFlex 마이크로-아키텍처와 같은 CLP (Composable Lightweight Processor) 에서 이용될 수도 있다. TFlex 마이크로-아키텍처는 단순한 타일들이 동적으로 함께 집합되는 것을 허용하는 CLP 이다. TFlex 는, 512개의 로드 (load) 들 및 스토어 (store) 들을 갖는 4096개의 명령들까지의 실행 윈도우 및 64개까지의 이슈 폭을 지원하는, 다수의 분산 로드-스토어 뱅크들을 갖는, 32개 타일들의 전체 분산 타일형 아키텍처이다.
TFlex 마이크로-아키텍처는, 자동 실행 의미를 갖는 불록들의 시퀀스로서 프로그램들을 인코딩할 수도 있는 TRIPS (Tera-op, Reliable, Intelligently adaptive Processing System) EDGE (Explicit Data Graph Execution) 명령 세트 아키텍처 (instruction set architecture; ISA) 를 이용하고, 이는 명령 페치 (fetch), 완료, 및 커밋 (commit) 에 대한 제어 프로토콜들이 128개의 명령들까지의 블록들 상에서 동작할 수도 있다는 것을 의미한다. TFlex CLP 마이크로-아키텍처는, 상이한 동작 목표들: 예를 들어, 성능, 면적 효율, 또는 에너지 효율 하에서의 최선의 구성을 찾기 위해 개개의 스레드 각각에 대해 32개까지의 임의의 수의 타일들의 동작 집합화를 허용할 수도 있다. TFlex 마이크로-아키텍처는 (예를 들어, 클록 각각에 대한 PLL 과 같은 구조들 이외에) 어떠한 중앙집중 마이크로-아키텍처 구조도 갖고 있지 않는다. 관여하는 타일들에 걸친 구조들은 어드레스에 기초하여 분할될 수도 있다. 각각의 블록은 그의 시작 어드레스 (PC) 에 기초하여 소유자 타일을 할당받을 수도 있다. 블록 내의 명령들이, 명령 ID들에 기초하여, 관여하는 타일들에 걸쳐 분할될 수도 있고, 예를 들어, 로드/스토어 데이터 어드레스들에 기초하여 LSQ (load-store queue) 및 데이터 캐시들이 분할될 수도 있다.
예를 들어, 다수의 상호 연결된 프로세싱 타일들을 갖는 분산 프로세서 아키텍처에서의 데이터 멀티캐스팅을 위한 방법이 여기에 제공되고 기술된다. 그 방법은, 소스로부터 제 1 메시지를 수신하도록 구성되는 복수의 타깃들을 식별하는 단계, 타깃들에 의해 공통으로 공유되는 선택된 정보를 포함하는 타깃들 각각에 대한 타깃 라우팅 명령들을 제 1 메시지에 제공하는 단계, 및, 식별된 타깃들 중 2개의 타깃들이 라우터에 대해 서로 상이한 방향들로 위치되어 있는 경우, 제 1 메시지를 복제하고 복제된 메시지들을 식별된 타깃들 각각에 상이한 방향들로, 예를 들어, 라우터의 상이한 출력 링크들을 통해 라우팅하는 단계를 포함할 수 있다. 이 예에서, 복제된 메시지들은 소스로부터의 후속하여 라우팅되는 제 1 메시지 및 그 사본들을 포함한다. 그 제공한 타깃 라우팅 명령들은, 타깃들에 의해 공통으로 공유되는 비트들의 서브세트를 이용하는 선택된 정보를 더 포함할 수도 있다. 타깃들에 의해 공통으로 공유되는 선택된 정보는, 좌측 오퍼랜드, 우측 오퍼랜드 또는 술어 오퍼랜드로서 식별될 수도 있고, 예를 들어, 타깃들의 복수의 다중-명령 서브세트들 중 하나의 다중-명령 서브세트의 선택을 포함할 수도 있다. 일부 예에서, 다중-명령 서브세트들의 개수는 8개일 수도 있다. 타깃 라우팅 명령들은, 명령 인코딩의 타입을 특정하는데 이용되는 비트를 포함할 수도 있다. 일부 예에서, 타깃 라우팅 명령들을 제공하는 단계는, 또 다른 명령에 의해 생성되는 비트마스크를 이용하는 단계를 더 포함할 수도 있다. 복제된 메시지를 라우팅하는 단계는, 인커밍 메시지의 헤더를 판독하여 타깃 라우팅 명령들을 결정하는 단계를 포함할 수도 있다. 일부 다른 예에서, 라우팅 명령들의 프로세싱은, 라우팅 명령들이 소스로부터 타깃들로의 상이한 방향들로의 루트 (route) 들을 포함하고 그 루트들이 공통 링크를 공유하는 경우, 복제된 메시지들이 공통 링크를 집합적으로 1회 통과할 수도 있도록 라우팅 명령들을 구성하는 단계를 더 포함할 수도 있다. 복제된 메시지들을 타깃들 각각에 라우팅하는 단계는, 타깃이 로컬 프로세싱 코어에 상주한다는 라우터의 결정시에, 제 1 메시지 및/또는 복제된 메시지를 추출하고 그 추출된 메시지를 로컬 프로세싱 코어에 전송하는 단계를 포함할 수도 있다.
예를 들어, 소스로부터 제 1 메시지를 수신하도록 구성되는 복수의 타깃들을 식별하고, 타깃들에 의해 공통으로 공유되는 선택된 정보를 포함하는 타깃들에 대한 타깃 라우팅 명령들을 제 1 메시지에 제공하도록 구성된 소스를 포함하는 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 장치가 여기에 또한 제공되고 기술된다. 또한, 그 장치는, 타깃 라우팅 명령들을 판독하여 타깃들 각각의 위치를 결정하고, 타깃들 중 2개의 타깃들이, 라우터에 대해 서로 상이한 방향들로 위치되어 있는 경우, 메시지를 복제하는 것을 포함하여, 메시지를 타깃들 각각에 라우팅하도록 구성된 라우터를 포함할 수도 있다. 그 정보는, 타깃들에 의해 공통으로 공유되는 비트들의 서브세트를 이용하여 인코딩될 수도 있다. 타깃들에 의해 공통으로 공유되는 선택된 정보는, 좌측 오퍼랜드, 우측 오퍼랜드 또는 술어 오퍼랜드로서 식별될 수도 있고, 예를 들어, 타깃들의 복수의 다중-명령 서브세트들 중 하나의 다중-명령 서브세트의 선택을 포함할 수도 있다. 라우터는, 타깃이 로컬 프로세싱 코어에 상주한다는 라우터의 결정시에, 메시지를 추출하고, 그 메시지를 로컬 프로세싱 코어에 전송하도록 구성될 수도 있다.
예를 들어, 복수의 라우터들 및 온칩 네트워크를 통해 상호 연결된 복수의 프로세싱 코어들을 갖는 분산 프로세싱 장치를 포함하는 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 시스템이 여기에 또한 제공되고 기술된다. 소스는 복수의 프로세싱 코어들 중 하나의 프로세싱 코어와 연관될 수도 있고, 적어도 하나의 타깃은 복수의 프로세싱 코어들 중 하나 이상의 프로세싱 코어들과 연관될 수도 있다. 복수의 라우터들 중 각각의 라우터는, 복수의 프로세싱 코어들 중 대응하는 프로세싱 코어와 연관될 수도 있고, 소스로부터 메시지를 수신하고, 메시지의 타깃 라우팅 명령들을 식별하고, 타깃들 중 2개의 타깃들이 라우터에 대해 서로 상이한 방향들로 위치되어 있는 경우 메시지를 복제하여, 메시지를 타깃들에 라우팅하도록 구성될 수도 있고, 그 식별된 타깃 라우팅 명령들은, 타깃들 각각의 위치를 결정하기 위해, 수신된 메시지로부터 타깃들에 의해 공통으로 공유되는 선택된 정보를 포함한다. 예를 들어, 소스는, 타깃들에 의해 공통으로 공유되는 비트들의 서브세트를 이용하여 선택된 정보를 인코딩하도록 구성될 수도 있다. 일부 예에서, 소스는, 좌측 오퍼랜드, 우측 오퍼랜드 또는 술어 오퍼랜드 중 하나의 오퍼랜드를 식별하도록 구성될 수도 있고, 예를 들어, 타깃들의 다중-명령 서브세트의 선택을 포함할 수도 있다. 일부 예에서, 라우터는, 타깃이 로컬 프로세싱 코어에 상주한다는 라우터의 결정시에, 네트워크로부터 메시지를 추출하고, 그 추출된 메시지를 로컬 프로세싱 코어에 전송하도록 (또는 그렇지 않으면, 그 메시지 또는 그의 사본을 로컬 프로세싱 코어에 제공하도록) 구성될 수도 있다.
전술한 상세한 설명은 블록도, 흐름도, 및/또는 예들의 사용을 통해 디바이스들 및/또는 프로세스들의 다양한 예들을 설명하였다. 이러한 블록도, 흐름도, 및/또는 예들이 하나 이상의 기능들 및/또는 동작들을 포함하는 한에 있어서는, 이러한 블록도, 흐름도, 및/또는 예들 내의 각각의 기능 및/또는 동작이 광범위한 하드웨어, 소프트웨어, 펌웨어, 또는 사실상 이들의 조합에 의해 개별적으로 및/또는 집합적으로 구현될 수도 있는 것이 당업자에 의해 이해될 것이다. 예를 들어, 여기에 기술된 청구물의 몇가지 부분들은 ASIC (Application Specific Integrated Circuit), FPGA (Field Programmable Gate Array), DSP (digital signal processor), 또는 다른 집적 포맷들을 통해 구현될 수 있다. 그러나, 당업자는 여기에 개시된 예들의 일부 양태들은 전체적으로 또는 부분적으로, 동등하게 집적 회로에서, 하나 이상의 컴퓨터들 상에서 실행하는 하나 이상의 컴퓨터 프로그램들로서 (예를 들면, 하나 이상의 컴퓨터 시스템들 상에서 실행하는 하나 이상의 프로그램들로서), 하나 이상의 프로세서들 상에서 실행하는 하나 이상의 프로그램들로서 (예를 들면, 하나 이상의 마이크로프로세서들 상에서 실행하는 하나 이상의 프로그램들로서), 펌웨어로서, 또는 사실상 이들의 조합으로서 구현될 수 있고, 회로 설계 및/또는 소프트웨어 및 또는 펌웨어를 위한 코드 작성은 본 개시물에 비추어 당업자의 기능 범위 내에 충분히 속한다는 것을 인지할 것이다. 예를 들어, 사용자가 속도 및 정확도가 가장 중요한 것으로 결정하는 경우, 사용자는 주로 하드웨어 및/또는 펌웨어 수단 (vehicle) 에 대해 선택할 수도 있고; 유연성이 가장 중요한 경우, 사용자는 주로 소프트웨어 구현에 대해 선택할 수도 있고; 또는 그렇지 않으면 또 대안적으로, 사용자는 하드웨어, 소프트웨어, 및/또는 펌웨어의 어떤 조합을 선택할 수도 있다.
또한, 당업자는 여기에 기술된 청구물의 메커니즘이 다양한 형태의 프로그램 제품으로서 배포되는 것이 가능하고, 여기에 기술된 청구물의 예시적인 예는 실제적으로 그 배포를 수행하기 위해 사용되는 특정 타입의 신호를 지닌 매체에 상관없이 적용됨을 인식할 것이다. 신호를 지닌 매체의 예들은 다음을 포함하지만, 이에 한정되지 않는다: 기록가능한 타입의 매체 이를테면 플로피디스크, 하드 디스크 드라이브, CD (Compact Disc), DVD (Digital Video Disk), 디지털 테이프, 컴퓨터 메모리 등; 및 송신 타입 매체, 이를테면 디지털 및/또는 아날로그 통신 매체 (예를 들면, 광섬유 케이블, 도파관, 유선 통신 링크, 무선 통신 링크 등).
당업자는 여기에 설명된 방식으로 디바이스들 및/또는 프로세스들을 기술하고 그 후, 이러한 기술된 디바이스들 및/또는 프로세스들을 데이터 프로세싱 시스템들에 통합하기 위하여 엔지니어링 업무 (engineering practice) 를 이용하는 것은 당업계 내에서 통상적이라는 것을 인지할 것이다. 즉, 여기에 기술된 디바이스들 및/또는 프로세스들 중 적어도 일부가 합당한 양의 실험을 통해 데이터 프로세싱 시스템에 통합될 수도 있다. 당업자는, 통상적인 데이터 프로세싱 시스템은 일반적으로 시스템 유닛 하우징, 비디오 디스플레이 디바이스, 메모리 이를테면 휘발성 메모리와 비휘발성 메모리, 프로세서들 이를테면 마이크로프로세서들 및 디지털 신호 프로세서들, 컴퓨터를 이용한 엔티티 (entity) 이를테면 운영 시스템들, 드라이버들, 그래픽 사용자 인터페이스들, 및 애플리케이션 프로그램들, 하나 이상의 상호 작용 디바이스들, 이를테면 터치 패드 또는 터치 스크린, 및/또는 피드백 루프들 및 제어 모터들 (예를 들면, 포지션 및/또는 속도 센싱을 위한 피드백; 컴포넌트들 및/또는 양들을 이동 및/또는 조정하기 위한 제어 모터들) 을 포함하는 제어 시스템들 중 하나 이상을 포함한다는 것을 인지할 것이다. 통상적인 데이터 프로세싱 시스템은, 데이터 컴퓨팅/통신 및/또는 네트워크 컴퓨팅/통신 시스템들에서 통상적으로 발견되는 것들과 같은 임의의 적합한 상업적으로 이용가능한 컴포넌트들을 이용하여 구현될 수도 있다.
여기에 기술된 청구물은 때때로 상이한 다른 컴포넌트들 내에 포함되거나 또는 상이한 다른 컴포넌트들과 커플링된 상이한 컴포넌트들을 예시한다. 이러한 나타낸 아키텍처들은 단지 예이고, 사실상, 동일한 기능을 달성하는 많은 다른 아키텍처들이 구현될 수도 있음이 이해될 것이다. 개념적인 의미에서, 동일한 기능을 달성하기 위한 컴포넌트들의 임의의 배열은 효과적으로 "연관" 되어 원하는 기능이 달성되도록 한다. 따라서, 특정 기능을 달성하기 위하여 여기에서 결합된 임의의 2개의 컴포넌트들은 서로 "연관" 되어, 아키텍처 또는 개재하는 컴포넌트들에 상관없이 원하는 기능이 달성되도록 하는 것으로 보여질 수도 있다. 마찬가지로, 이와 같이 연관된 임의의 2개의 컴포넌트들은 또한 서로에 대해 "동작가능하게 연결" 또는 "동작가능하게 커플링" 되어 원하는 기능을 달성하는 것으로 볼 수도 있고, 이와 같이 연관되는 것이 가능한 임의의 2개의 컴포넌트들은 또한 서로에 대해 "동작가능하게 커플링가능" 하여 원하는 기능을 달성하는 것으로 볼 수도 있다. 동작가능하게 커플링가능한 특정 예로는, 물리적으로 정합가능 (mateable) 및/또는 물리적으로 상호작용하는 컴포넌트들 및/또는 무선 상호작용가능한 및/또는 무선으로 상호작용하는 컴포넌트들 및/또는 논리적으로 상호작용하는 및/또는 논리적으로 상호작용가능한 컴포넌트들을 포함하지만, 이에 한정되는 것은 아니다.
여기에서 실질적으로 임의의 복수 용어 및/또는 단수 용어의 이용에 대해서, 당업자는 문맥 및/또는 애플리케이션에 적절한 바대로 복수에서 단수로 및/또는 단수에서 복수로 바꿀 수도 있다. 다양한 단수/복수의 순열 (permutation) 은 간결함을 위해 여기에 명백히 설명될 수도 있다.
일반적으로, 여기에 그리고 특히 첨부된 청구항 (예를 들어, 첨부된 청구항들의 본문들) 에서 이용되는 용어는 일반적으로 "개방형" 용어들 (예를 들어, "포함하는" 이라는 용어는 "포함하지만 이에 한정되지 않는" 으로 해석되어야 하고, "갖는" 이라는 용어는 "적어도 갖는" 으로 해석되어야 하고, "포함한다" 라는 용어는 "포함하지만 이에 한정되지 않는다" 로 해석되어야 한다는 것 등) 로서 의도된다는 것이 당업자에 의해 이해될 것이다. 또한, 도입된 청구항 기재의 특정한 수가 의도되는 경우, 이러한 의도는 청구항에 명시적으로 기재될 것이며, 이러한 기재의 부재 시에 그러한 의도가 없다는 것이 당업자에 의해 이해될 것이다. 예를 들어, 이해를 돕기 위하여, 다음의 첨부된 청구항은 청구항 기재를 도입하기 위한 "적어도 하나" 및 "하나 이상" 의 도입 어구의 이용을 포함할 수도 있다. 그러나, 이러한 어구의 사용은, 동일 청구항이 서두 어구 "하나 이상" 또는 "적어도 하나" 및 "a" 또는 "an" 과 같은 부정관사 (예를 들어, "a" 및/또는 "an" 은 "적어도 하나" 또는 "하나 이상" 을 의미하도록 해석되어야 한다) 를 포함할 때에도, 부정관사 "a" 또는 "an" 에 의한 청구항 기재의 도입이 이렇게 도입된 청구항 기재를 포함하는 임의의 특정 청구항을 하나의 이러한 기재만을 포함하는 발명들로 한정한다는 것을 내포하는 것으로 해석되어서는 안되며; 청구항 기재를 도입하는 데 사용되는 정관사의 사용에 대해서도 동일하게 유효하다. 또한, 도입되는 청구항 기재의 특정한 수가 명시적으로 기재되는 경우에도, 당업자는 이러한 기재가 적어도 기재된 수를 의미하는 것으로 통상적으로 해석되어야 한다는 것을 인식할 것이다 (예를 들어, 다른 수식어 없는, "2개의 기재" 의 그대로의 기재는, 적어도 2개의 기재들 또는 2개 이상의 기재들을 통상적으로 의미한다). 또한, "A, B, 및 C 중 적어도 하나 등" 과 유사한 관례가 이용되는 경우에서, 일반적으로 이러한 구성은 당업자가 그 관례를 이해하는 의미에서 의도된다 (예를 들어, "A, B, 및 C 중 적어도 하나를 갖는 시스템" 은 A 단독, B 단독, C 단독, A 및 B 를 함께, A 및 C 를 함께, B 및 C 를 함께, 및/또는 A, B, 및 C 를 함께 갖는 등의 시스템을 포함하지만, 이에 한정되지 않는다). "A, B, 또는 C 중 적어도 하나 등" 과 유사한 관례가 이용되는 경우에서, 일반적으로 이러한 구성은 당업자가 그 관례를 이해하는 의미에서 의도된다 (예를 들어, "A, B, 또는 C 중 적어도 하나를 갖는 시스템" 은 A 단독, B 단독, C 단독, A 및 B 를 함께, A 및 C 를 함께, B 및 C 를 함께, 및/또는 A, B, 및 C 를 함께 갖는 등의 시스템을 포함하지만, 이에 한정되지 않는다). 또한, 2개 이상의 택일적 용어를 나타내는, 사실상 임의의 이접 단어 및/또는 어구는 상세한 설명, 청구범위 또는 도면에 있든지 간에, 용어들 중 하나, 용어들 중 어느 한쪽 또는 양쪽 모두의 용어를 포함하는 가능성들을 예상하도록 이해되어야 한다는 것이 당업자에 의해 이해될 것이다. 예를 들어, 어구 "A 또는 B" 는 "A" 또는 "B" 또는 "A 및 B" 의 가능성을 포함하도록 이해될 것이다.
여기에 다양한 양태들 및 예들이 개시되었으나, 당업자들에게는 다른 양태들 및 실시형태들이 명백할 것이다. 여기에 개시된 다양한 양태들 및 예들은 예시를 위한 것이고 한정하는 것으로 의도되지 않으며, 진정한 범위 및 사상은 다음의 청구항들에 의해 표시된다.

Claims (20)

  1. 다수의 상호 연결된 프로세싱 코어들을 갖는 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 방법으로서,
    소스로부터 제 1 메시지를 수신하도록 구성되는 복수의 타깃 명령들을 식별하는 단계;
    상기 식별된 타깃 명령들 각각에 대한 타깃 라우팅 명령들을 상기 제 1 메시지에 제공하는 단계로서, 상기 타깃 라우팅 명령들 각각은, 상기 식별된 타깃 명령들에 의해 공통으로 공유되는 선택된 정보를 포함하는, 상기 타깃 라우팅 명령들을 제공하는 단계; 및
    상기 식별된 타깃 명령들 중 2개의 타깃 명령들이, 라우터에 대해 서로 상이한 방향들로 위치되어 있는 프로세싱 코어들과 연관되는 경우, 상기 제 1 메시지를 복제하고, 복제된 메시지들을 상기 식별된 타깃 명령들 각각에 상이한 방향들로 라우팅하는 단계를 포함하는, 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 방법.
  2. 제 1 항에 있어서,
    상기 타깃 라우팅 명령들을 제공하는 단계는, 상기 타깃 명령들에 의해 공통으로 공유되는 비트들의 서브세트를 이용하여 상기 선택된 정보를 인코딩하는 단계를 더 포함하는, 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 방법.
  3. 제 1 항에 있어서,
    상기 타깃 명령들에 의해 공통으로 공유되는 상기 선택된 정보는, 좌측 오퍼랜드 (left operand), 우측 오퍼랜드 (right operand) 또는 술어 오퍼랜드 (predicate operand) 중 하나의 오퍼랜드로서 식별되는, 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 방법.
  4. 제 1 항에 있어서,
    상기 타깃 명령들에 의해 공통으로 공유되는 상기 선택된 정보는, 상기 타깃 명령들의 다수의 다중-명령 서브세트들 중 하나의 다중-명령 서브세트의 선택을 포함하는, 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 방법.
  5. 제 4 항에 있어서,
    상기 타깃 명령들의 상기 다중-명령 서브세트들의 개수는 8개인, 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 방법.
  6. 제 1 항에 있어서,
    상기 타깃 라우팅 명령들은 명령 인코딩의 타입을 특정하는데 이용되는 비트를 포함하는, 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 방법.
  7. 제 1 항에 있어서,
    상기 타깃 라우팅 명령들을 제공하는 단계는, 또 다른 명령에 의해 생성되는 비트마스크를 이용하는 단계를 더 포함하는, 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 방법.
  8. 제 1 항에 있어서,
    상기 복제된 메시지들을 라우팅하는 단계는, 상기 제 1 메시지의 헤더를 판독하여 상기 타깃 라우팅 명령들을 결정하는 단계를 포함하는, 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 방법.
  9. 제 1 항에 있어서,
    상기 타깃 라우팅 명령들을 제공하는 단계는,
    상기 타깃 라우팅 명령들이 상기 소스로부터 상기 2개의 타깃 명령들로의 상이한 방향들로의 루트 (route) 들을 포함하고 상기 루트들이 공통 링크를 공유하는 경우, 상기 제 1 메시지 및 상기 복제된 메시지들이 상기 공통 링크를 1회만 통과 (traverse) 하도록 상기 타깃 라우팅 명령들을 구성하는 단계를 더 포함하는, 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 방법.
  10. 제 1 항에 있어서,
    상기 복제된 메시지들을 상기 식별된 타깃 명령들 각각에 라우팅하는 단계는, 상기 식별된 타깃 명령들 각각이 로컬 프로세싱 코어에 상주한다는 상기 라우터의 결정시에, 상기 제 1 메시지 또는 상기 복제된 메시지 중 적어도 하나의 메시지를 추출하고, 상기 적어도 하나의 메시지를 상기 로컬 프로세싱 코어에 전송하는 단계를 포함하는, 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 방법.
  11. 다수의 상호 연결된 프로세싱 코어들을 갖는 분산 프로세서 아키텍처에서의 데이터 멀티캐스팅을 위한 장치로서,
    소스 및 라우터를 포함하고,
    상기 소스는,
    상기 소스로부터 제 1 메시지를 수신하도록 구성되는 복수의 타깃 명령들을 식별하고,
    상기 타깃 명령들에 의해 공통으로 공유되는 선택된 정보를 포함하는 상기 타깃 명령들에 대한 타깃 라우팅 명령들을 상기 제 1 메시지에 제공하도록
    구성되고,
    상기 라우터는,
    상기 타깃 라우팅 명령들을 판독하여 상기 타깃 명령들 각각의 위치를 결정하고,
    상기 타깃 명령들 중 2개의 타깃 명령들이, 상기 라우터에 대해 서로 상이한 방향들로 위치되어 있는 프로세싱 코어들과 연관되는 경우, 상기 제 1 메시지를 복제하는 것을 포함하여, 상기 제 1 메시지를 상기 타깃 명령들 각각에 라우팅하도록
    구성되는, 분산 프로세서 아키텍처에서의 데이터 멀티캐스팅을 위한 장치.
  12. 제 11 항에 있어서,
    상기 소스는 또한, 상기 타깃 명령들에 의해 공통으로 공유되는 비트들의 서브세트를 이용하여 상기 선택된 정보를 인코딩하도록 구성되는, 분산 프로세서 아키텍처에서의 데이터 멀티캐스팅을 위한 장치.
  13. 제 11 항에 있어서,
    상기 소스는 또한, 상기 타깃 명령들에 의해 공통으로 공유되는 상기 선택된 정보가 좌측 오퍼랜드, 우측 오퍼랜드 또는 술어 오퍼랜드 중 하나의 오퍼랜드를 식별하도록, 상기 선택된 정보를 인코딩하도록 구성되는, 분산 프로세서 아키텍처에서의 데이터 멀티캐스팅을 위한 장치.
  14. 제 11 항에 있어서,
    상기 소스는 또한, 상기 타깃 명령들에 의해 공통으로 공유되는 상기 선택된 정보가 상기 타깃 명령들의 복수의 다중-명령 서브세트들 중 하나의 다중-명령 서브세트의 선택을 식별하도록, 상기 선택된 정보를 인코딩하도록 구성되는, 분산 프로세서 아키텍처에서의 데이터 멀티캐스팅을 위한 장치.
  15. 제 11 항에 있어서,
    상기 라우터는, 상기 타깃 명령이 로컬 프로세싱 코어에 상주한다는 상기 라우터의 결정시에, 상기 제 1 메시지 또는 복제된 메시지 중 적어도 하나의 메시지를 추출하고, 상기 추출된 메시지를 상기 로컬 프로세싱 코어에 전송하도록 구성되는, 분산 프로세서 아키텍처에서의 데이터 멀티캐스팅을 위한 장치.
  16. 다수의 상호 연결된 프로세싱 코어들을 갖는 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 시스템으로서,
    온칩 네트워크를 통해 상호 연결된 복수의 프로세싱 코어들을 갖는 분산 프로세싱 장치로서, 소스는 상기 복수의 프로세싱 코어들 중 하나의 프로세싱 코어와 연관되고, 복수의 타깃 명령들은 상기 복수의 프로세싱 코어들 중 적어도 하나의 프로세싱 코어와 연관되는, 상기 분산 프로세싱 장치; 및
    복수의 라우터들로서, 상기 복수의 프로세싱 코어들 각각은 상기 복수의 라우터들 중 대응하는 라우터와 연관되는, 상기 복수의 라우터들을 포함하고,
    상기 복수의 라우터들 중 하나 이상의 라우터들은,
    상기 소스로부터 메시지를 수신하고,
    상기 메시지로부터 타깃 라우팅 명령들을 식별하는 것으로서, 상기 식별된 타깃 라우팅 명령들은, 상기 타깃 명령들 각각의 위치를 결정하기 위해, 상기 타깃 명령들에 의해 공통으로 공유되는 선택된 정보를 포함하는, 상기 타깃 라우팅 명령들을 식별하고,
    상기 타깃 명령들 중 2개의 타깃 명령들이, 라우터에 대해 서로 상이한 방향들로 위치되어 있는 프로세싱 코어들과 연관되는 경우, 상기 메시지를 복제하며,
    상기 복제된 메시지를 상기 타깃 명령들 각각에 라우팅하도록
    구성되는, 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 시스템.
  17. 제 16 항에 있어서,
    상기 소스는, 상기 타깃 명령들에 의해 공통으로 공유되는 비트들의 서브세트를 이용하여 상기 선택된 정보를 인코딩하도록 구성되는, 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 시스템.
  18. 제 16 항에 있어서,
    상기 소스는, 상기 선택된 정보로부터, 좌측 오퍼랜드, 우측 오퍼랜드 또는 술어 오퍼랜드 중 하나의 오퍼랜드를 식별하도록 구성되는, 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 시스템.
  19. 제 16 항에 있어서,
    상기 타깃 명령들에 의해 공통으로 공유되는 상기 선택된 정보는, 상기 타깃 명령들의 다중-명령 서브세트의 선택을 포함하는, 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 시스템.
  20. 제 16 항에 있어서,
    상기 복수의 라우터들 중 적어도 하나의 라우터는, 상기 온칩 네트워크로부터 상기 메시지를 추출하고, 상기 추출된 메시지에서의 상기 복수의 타깃 명령들 중 타깃 명령이 로컬 프로세싱 코어에 상주한다는 상기 라우터의 결정시에, 상기 추출된 메시지를 상기 로컬 프로세싱 코어에 전송하도록 구성되는, 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 시스템.
KR1020127005877A 2009-09-18 2010-06-11 분산 프로세서 시스템에서의 데이터 멀티캐스팅 KR101364303B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/562,940 US10698859B2 (en) 2009-09-18 2009-09-18 Data multicasting with router replication and target instruction identification in a distributed multi-core processing architecture
US12/562,940 2009-09-18
PCT/US2010/038372 WO2011034643A2 (en) 2009-09-18 2010-06-11 Data multicasting in a distributed processor system

Publications (2)

Publication Number Publication Date
KR20120055611A KR20120055611A (ko) 2012-05-31
KR101364303B1 true KR101364303B1 (ko) 2014-02-18

Family

ID=43757622

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020127005877A KR101364303B1 (ko) 2009-09-18 2010-06-11 분산 프로세서 시스템에서의 데이터 멀티캐스팅

Country Status (6)

Country Link
US (1) US10698859B2 (ko)
JP (1) JP2013501299A (ko)
KR (1) KR101364303B1 (ko)
CN (1) CN103038760B (ko)
GB (1) GB2485915B (ko)
WO (1) WO2011034643A2 (ko)

Families Citing this family (50)

* 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
US8392661B1 (en) * 2009-09-21 2013-03-05 Tilera Corporation Managing cache coherence
KR101731742B1 (ko) 2010-06-18 2017-04-28 보드 오브 리전츠 더 유니버시티 오브 텍사스 시스템 결합된 분기 타깃 및 프레디킷 예측
US9344358B2 (en) * 2012-03-12 2016-05-17 Utah State University Aging-aware routing for NoCs
EP2899644A4 (en) * 2012-07-17 2017-09-27 Sanechips Technology Co., Ltd. Device and method for inter-core communication in multi-core processor
US9792252B2 (en) 2013-05-31 2017-10-17 Microsoft Technology Licensing, Llc Incorporating a spatial array into one or more programmable processor cores
CN103595627A (zh) * 2013-11-28 2014-02-19 合肥工业大学 基于多播维序路由算法的NoC路由器及其路由算法
CN104506331B (zh) * 2014-12-22 2017-09-29 迈普通信技术股份有限公司 一种组播报文传输方法及多核网络设备
US9946549B2 (en) 2015-03-04 2018-04-17 Qualcomm Incorporated Register renaming in block-based instruction set architecture
US9952867B2 (en) 2015-06-26 2018-04-24 Microsoft Technology Licensing, Llc Mapping instruction blocks based on block size
US9940136B2 (en) 2015-06-26 2018-04-10 Microsoft Technology Licensing, Llc Reuse of decoded instructions
US9946548B2 (en) 2015-06-26 2018-04-17 Microsoft Technology Licensing, Llc Age-based management of instruction blocks in a processor instruction window
US11755484B2 (en) 2015-06-26 2023-09-12 Microsoft Technology Licensing, Llc Instruction block allocation
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
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
US10191747B2 (en) 2015-06-26 2019-01-29 Microsoft Technology Licensing, Llc Locking operand values for groups of instructions executed atomically
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
WO2017002371A1 (en) * 2015-07-02 2017-01-05 Sharp Kabushiki Kaisha Systems and methods for current service information
US10719321B2 (en) 2015-09-19 2020-07-21 Microsoft Technology Licensing, Llc Prefetching instruction blocks
US11977891B2 (en) 2015-09-19 2024-05-07 Microsoft Technology Licensing, Llc Implicit program order
US11681531B2 (en) 2015-09-19 2023-06-20 Microsoft Technology Licensing, Llc Generation and use of memory access instruction order encodings
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
US10198263B2 (en) 2015-09-19 2019-02-05 Microsoft Technology Licensing, Llc Write nullification
US10180840B2 (en) 2015-09-19 2019-01-15 Microsoft Technology Licensing, Llc Dynamic generation of null instructions
US10031756B2 (en) 2015-09-19 2018-07-24 Microsoft Technology Licensing, Llc Multi-nullification
US10871967B2 (en) 2015-09-19 2020-12-22 Microsoft Technology Licensing, Llc Register read/write ordering
US11016770B2 (en) 2015-09-19 2021-05-25 Microsoft Technology Licensing, Llc Distinct system registers for logical processors
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
US10936316B2 (en) 2015-09-19 2021-03-02 Microsoft Technology Licensing, Llc Dense read encoding for dataflow ISA
US11126433B2 (en) 2015-09-19 2021-09-21 Microsoft Technology Licensing, Llc Block-based processor core composition register
US10061584B2 (en) 2015-09-19 2018-08-28 Microsoft Technology Licensing, Llc Store nullification in the target field
US10776115B2 (en) 2015-09-19 2020-09-15 Microsoft Technology Licensing, Llc Debug support for block-based processor
US10678544B2 (en) 2015-09-19 2020-06-09 Microsoft Technology Licensing, Llc Initiating instruction block execution using a register access instruction
US11687345B2 (en) 2016-04-28 2023-06-27 Microsoft Technology Licensing, Llc Out-of-order block-based processors and instruction schedulers using ready state data indexed by instruction position identifiers
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
US11531552B2 (en) 2017-02-06 2022-12-20 Microsoft Technology Licensing, Llc Executing multiple programs simultaneously on a processor core
US10614357B2 (en) * 2017-04-17 2020-04-07 Cerebras Systems Inc. Dataflow triggered tasks for accelerated deep learning
US10797897B2 (en) * 2017-09-27 2020-10-06 International Business Machines Corporation Multi-step remote packet broadcasting/multicasting mechanism for cognitive systems
US10963379B2 (en) 2018-01-30 2021-03-30 Microsoft Technology Licensing, Llc Coupling wide memory interface to wide write back paths
US10824429B2 (en) 2018-09-19 2020-11-03 Microsoft Technology Licensing, Llc Commit logic and precise exceptions in explicit dataflow graph execution architectures
US11134030B2 (en) * 2019-08-16 2021-09-28 Intel Corporation Device, system and method for coupling a network-on-chip with PHY circuitry
GB2590658A (en) * 2019-12-23 2021-07-07 Graphcore Ltd Communication in a computer having multiple processors
US11500641B2 (en) * 2020-10-07 2022-11-15 Huawei Technologies Co., Ltd. Devices, methods, and media for efficient data dependency management for in-order issue processors
US20210409265A1 (en) * 2021-01-28 2021-12-30 Intel Corporation In-network multicast operations
US11815935B2 (en) 2022-03-25 2023-11-14 Micron Technology, Inc. Programming a coarse grained reconfigurable array through description of data flow graphs
US20230305848A1 (en) * 2022-03-25 2023-09-28 Micron Technology, Inc. Schedule Instructions of a Program of Data Flows for Execution in Tiles of a Coarse Grained Reconfigurable Array

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6625773B1 (en) 1999-06-09 2003-09-23 International Business Machines Corporation System for multicast communications in packet switched networks
US6891828B2 (en) 2001-03-12 2005-05-10 Network Excellence For Enterprises Corp. Dual-loop bus-based network switch using distance-value or bit-mask
US6980209B1 (en) 2002-06-14 2005-12-27 Nvidia Corporation Method and system for scalable, dataflow-based, programmable processing of graphics data

Family Cites Families (129)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4985832A (en) * 1986-09-18 1991-01-15 Digital Equipment Corporation SIMD array processing system with routing networks having plurality of switching stages to transfer messages among processors
US4873626A (en) * 1986-12-17 1989-10-10 Massachusetts Institute Of Technology Parallel processing system with processor array having memory system included in system memory
US5317734A (en) 1989-08-29 1994-05-31 North American Philips Corporation Method of synchronizing parallel processors employing channels and compiling method minimizing cross-processor data dependencies
US5333320A (en) * 1990-01-09 1994-07-26 Hajime Seki Electronic computer system and processor element used with the computer system
JP3679813B2 (ja) * 1991-07-22 2005-08-03 株式会社日立製作所 並列計算機
US5666506A (en) 1994-10-24 1997-09-09 International Business Machines Corporation Apparatus to dynamically control the out-of-order execution of load/store instructions in a processor capable of dispatchng, issuing and executing multiple instructions in a single processor cycle
US5669001A (en) 1995-03-23 1997-09-16 International Business Machines Corporation Object code compatible representation of very long instruction word programs
US6112019A (en) 1995-06-12 2000-08-29 Georgia Tech Research Corp. Distributed instruction queue
US5729228A (en) 1995-07-06 1998-03-17 International Business Machines Corp. Parallel compression and decompression using a cooperative dictionary
US6295599B1 (en) 1995-08-16 2001-09-25 Microunity Systems Engineering System and method for providing a wide operand architecture
US5917505A (en) 1995-12-19 1999-06-29 Cirrus Logic, Inc. Method and apparatus for prefetching a next instruction using display list processing in a graphics processor
US5790822A (en) 1996-03-21 1998-08-04 Intel Corporation Method and apparatus for providing a re-ordered instruction cache in a pipelined microprocessor
US5920724A (en) 1996-03-28 1999-07-06 Intel Corporation Software pipelining a hyperblock loop
US5796997A (en) 1996-05-15 1998-08-18 Hewlett-Packard Company Fast nullify system and method for transforming a nullify function into a select function
US8583895B2 (en) 1996-05-15 2013-11-12 Nytell Software LLC Compressed instruction format for use in a VLIW processor
US5905893A (en) 1996-06-10 1999-05-18 Lsi Logic Corporation Microprocessor adapted for executing both a non-compressed fixed length instruction set and a compressed variable length instruction set
JP3169856B2 (ja) 1997-05-29 2001-05-28 甲府日本電気株式会社 マルチノード情報処理システム
US5845103A (en) 1997-06-13 1998-12-01 Wisconsin Alumni Research Foundation Computer with dynamic instruction reuse
US5930491A (en) 1997-06-18 1999-07-27 International Business Machines Corporation Identification of related instructions resulting from external to internal translation by use of common ID field for each group
US5943501A (en) 1997-06-27 1999-08-24 Wisconsin Alumni Research Foundation Multiple processor, distributed memory computer with out-of-order processing
US5930158A (en) 1997-07-02 1999-07-27 Creative Technology, Ltd Processor with instruction set for audio effects
GB2331894B (en) * 1997-11-27 2000-03-29 Connell Anne O Analysis of data streams
US6182210B1 (en) 1997-12-16 2001-01-30 Intel Corporation Processor having multiple program counters and trace buffers outside an execution pipeline
US6178498B1 (en) 1997-12-18 2001-01-23 Idea Corporation Storing predicted branch target address in different storage according to importance hint in branch prediction instruction
US6314493B1 (en) 1998-02-03 2001-11-06 International Business Machines Corporation Branch history cache
TW440793B (en) 1998-02-25 2001-06-16 Koninkl Philips Electronics Nv A method for structuring a multi-instruction computer program from basic blocks that compose from internal instructions and external jumps in an internal directed acyclic graph, and a processor loaded with such program
US6164841A (en) 1998-05-04 2000-12-26 Hewlett-Packard Company Method, apparatus, and product for dynamic software code translation system
US6988183B1 (en) 1998-06-26 2006-01-17 Derek Chi-Lan Wong Methods for increasing instruction-level parallelism in microprocessors and digital system
US6353883B1 (en) 1998-08-04 2002-03-05 Intel Corporation Method and apparatus for performing predicate prediction
US6240510B1 (en) 1998-08-06 2001-05-29 Intel Corporation System for processing a cluster of instructions where the instructions are issued to the execution units having a priority order according to a template associated with the cluster of instructions
ATE467171T1 (de) 1998-08-24 2010-05-15 Microunity Systems Eng System mit breiter operandenarchitektur und verfahren
US6367004B1 (en) 1998-12-31 2002-04-02 Intel Corporation Method and apparatus for predicting a predicate based on historical information and the least significant bits of operands to be compared
US7430670B1 (en) 1999-07-29 2008-09-30 Intertrust Technologies Corp. Software self-defense systems and methods
US6513109B1 (en) 1999-08-31 2003-01-28 International Business Machines Corporation Method and apparatus for implementing execution predicates in a computer processing system
US6446197B1 (en) 1999-10-01 2002-09-03 Hitachi, Ltd. Two modes for executing branch instructions of different lengths and use of branch control instruction and register set loaded with target instructions
US6615340B1 (en) * 2000-03-22 2003-09-02 Wilmot, Ii Richard Byron Extended operand management indicator structure and method
KR100337149B1 (ko) 2000-07-05 2002-05-18 권 기 홍 프로그램 테스트 및 디버깅이 용이한 중앙처리장치
US6918032B1 (en) 2000-07-06 2005-07-12 Intel Corporation Hardware predication for conditional instruction path branching
US6662294B1 (en) 2000-09-28 2003-12-09 International Business Machines Corporation Converting short branches to predicated instructions
US20030023959A1 (en) 2001-02-07 2003-01-30 Park Joseph C.H. General and efficient method for transforming predicated execution to static speculation
CN100499446C (zh) * 2001-02-24 2009-06-10 国际商业机器公司 类网络路由方法
US6592449B2 (en) 2001-02-24 2003-07-15 International Business Machines Corporation Smart fan modules and system
US8429296B2 (en) 2001-03-06 2013-04-23 Pluris, Inc. Method and apparatus for distributing routing instructions over multiple interfaces of a data router
US7032217B2 (en) 2001-03-26 2006-04-18 Intel Corporation Method and system for collaborative profiling for continuous detection of profile phase transitions
EP2112804A3 (en) * 2001-08-15 2009-12-02 Precache Inc. Packet routing via payload inspection and subscription processing in a publish-subscribe network
US7095343B2 (en) 2001-10-09 2006-08-22 Trustees Of Princeton University code compression algorithms and architectures for embedded systems
WO2003038645A2 (en) 2001-10-31 2003-05-08 University Of Texas A scalable processing architecture
US20030088694A1 (en) 2001-11-02 2003-05-08 Internet Machines Corporation Multicasting method and switch
US7114059B2 (en) 2001-11-05 2006-09-26 Intel Corporation System and method to bypass execution of instructions involving unreliable data during speculative execution
US6892292B2 (en) 2002-01-09 2005-05-10 Nec Corporation Apparatus for one-cycle decompression of compressed data and methods of operation thereof
US7085913B2 (en) * 2002-02-13 2006-08-01 International Business Machines Corporation Hub/router for communication between cores using cartesian coordinates
WO2003088048A1 (en) 2002-04-08 2003-10-23 University Of Texas System Non-uniform cache apparatus, systems, and methods
US7320037B1 (en) 2002-05-10 2008-01-15 Altera Corporation Method and apparatus for packet segmentation, enqueuing and queue servicing for multiple network processor architecture
WO2004001584A2 (en) 2002-06-24 2003-12-31 Ante Vista Gmbh A method for executing structured symbolic machine code on a microprocessor
JP3804941B2 (ja) 2002-06-28 2006-08-02 富士通株式会社 命令フェッチ制御装置
US7672275B2 (en) 2002-07-08 2010-03-02 Precache, Inc. Caching with selective multicasting in a publish-subscribe network
JP4196614B2 (ja) 2002-08-22 2008-12-17 パナソニック株式会社 命令スケジューリング方法、命令スケジューリング装置、及びプログラム
US7299458B2 (en) 2002-10-31 2007-11-20 Src Computers, Inc. System and method for converting control flow graph representations to control-dataflow graph representations
US20040193849A1 (en) 2003-03-25 2004-09-30 Dundas James D. Predicated load miss handling
US7308682B2 (en) 2003-04-25 2007-12-11 Intel Corporation Method and apparatus for recovering data values in dynamic runtime systems
CN1849598A (zh) 2003-09-09 2006-10-18 皇家飞利浦电子股份有限公司 具有多个可编程处理器的集成数据处理电路
GB2409303B (en) * 2003-12-18 2006-10-18 Advanced Risc Mach Ltd Inter-processor communication mechanism
US8607209B2 (en) 2004-02-04 2013-12-10 Bluerisc Inc. Energy-focused compiler-assisted branch prediction
EP1731998A1 (en) 2004-03-29 2006-12-13 Kyoto University Data processing device, data processing program, and recording medium containing the data processing program
US7424482B2 (en) 2004-04-26 2008-09-09 Storwize Inc. Method and system for compression of data for block mode access storage
JP4296996B2 (ja) 2004-06-15 2009-07-15 富士通株式会社 マルチコアプロセサ制御方式
US7302543B2 (en) 2004-06-16 2007-11-27 Nec Laboratories America, Inc. Compressed memory architecture for embedded systems
US7624386B2 (en) 2004-12-16 2009-11-24 Intel Corporation Fast tree-based generation of a dependence graph
US7552318B2 (en) 2004-12-17 2009-06-23 International Business Machines Corporation Branch lookahead prefetch for microprocessors
US7853777B2 (en) 2005-02-04 2010-12-14 Mips Technologies, Inc. Instruction/skid buffers in a multithreading microprocessor that store dispatched instructions to avoid re-fetching flushed instructions
US7380038B2 (en) 2005-02-04 2008-05-27 Microsoft Corporation Priority registers for biasing access to shared resources
EP1891517A4 (en) 2005-05-24 2008-08-13 Texas Instruments Inc OPERAND WITH DISPLAY FOR PROCESSING MICROSE RATES
US8312452B2 (en) 2005-06-30 2012-11-13 Intel Corporation Method and apparatus for a guest to access a privileged register
US9870267B2 (en) 2006-03-22 2018-01-16 Intel Corporation Virtual vector processing
TW200739419A (en) 2006-04-07 2007-10-16 Univ Feng Chia Prediction mechanism of a program backward jump instruction
EP2477109B1 (en) 2006-04-12 2016-07-13 Soft Machines, Inc. Apparatus and method for processing an instruction matrix specifying parallel and dependent operations
US7962725B2 (en) 2006-05-04 2011-06-14 Qualcomm Incorporated Pre-decoding variable length instructions
US7487340B2 (en) 2006-06-08 2009-02-03 International Business Machines Corporation Local and global branch prediction information storage
US20070288733A1 (en) 2006-06-08 2007-12-13 Luick David A Early Conditional Branch Resolution
US7809926B2 (en) 2006-11-03 2010-10-05 Cornell Research Foundation, Inc. Systems and methods for reconfiguring on-chip multiprocessors
EP2523101B1 (en) 2006-11-14 2014-06-04 Soft Machines, Inc. Apparatus and method for processing complex instruction formats in a multi- threaded architecture supporting various context switch modes and virtualization schemes
US8181168B1 (en) 2007-02-07 2012-05-15 Tilera Corporation Memory access assignment for parallel processing architectures
US8180997B2 (en) 2007-07-05 2012-05-15 Board Of Regents, University Of Texas System Dynamically composing processor cores to form logical processors
US8447911B2 (en) 2007-07-05 2013-05-21 Board Of Regents, University Of Texas System Unordered load/store queue
US7818542B2 (en) 2007-07-10 2010-10-19 Globalfoundries Inc. Method and apparatus for length decoding variable length instructions
JP2009026106A (ja) 2007-07-20 2009-02-05 Oki Electric Ind Co Ltd 命令コード圧縮方法と命令フェッチ回路
JP5043560B2 (ja) 2007-08-24 2012-10-10 パナソニック株式会社 プログラム実行制御装置
US9384003B2 (en) 2007-10-23 2016-07-05 Texas Instruments Incorporated Determining whether a branch instruction is predicted based on a capture range of a second instruction
US7870371B2 (en) 2007-12-17 2011-01-11 Microsoft Corporation Target-frequency based indirect jump prediction for high-performance processors
US7818551B2 (en) 2007-12-31 2010-10-19 Microsoft Corporation Feedback mechanism for dynamic predication of indirect jumps
US8068491B2 (en) * 2008-02-13 2011-11-29 Telcordia Technologies, Inc. Methods for reliable multicasting in local peer group (LPG) based vehicle ad hoc networks
US8321850B2 (en) 2008-06-06 2012-11-27 Vmware, Inc. Sharing and persisting code caches
US20100146209A1 (en) 2008-12-05 2010-06-10 Intellectual Ventures Management, Llc Method and apparatus for combining independent data caches
US8127119B2 (en) 2008-12-05 2012-02-28 The Board Of Regents Of The University Of Texas System Control-flow prediction using multiple independent predictors
US20100191943A1 (en) 2009-01-26 2010-07-29 Agere Systems Inc. Coordination between a branch-target-buffer circuit and an instruction cache
US20100325395A1 (en) 2009-06-19 2010-12-23 Doug Burger Dependence prediction in a memory system
US8130754B2 (en) * 2009-07-10 2012-03-06 Hewlett-Packard Development Company, L.P. On-chip and chip-to-chip routing using a processor element/router combination
US8364902B2 (en) 2009-08-07 2013-01-29 Via Technologies, Inc. Microprocessor with repeat prefetch indirect instruction
US8433885B2 (en) 2009-09-09 2013-04-30 Board Of Regents Of The University Of Texas System Method, system and computer-accessible medium for providing a distributed predicate prediction
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
US20110078424A1 (en) 2009-09-30 2011-03-31 International Business Machines Corporation Optimizing program code using branch elimination
US8464002B2 (en) 2009-10-14 2013-06-11 Board Of Regents Of The University Of Texas System Burst-based cache dead block prediction
WO2011067896A1 (en) 2009-12-02 2011-06-09 Mush-A Co., Ltd. Data processing apparatus, data processing system, packet, recording medium, storage device, and data processing method
JP5057256B2 (ja) 2009-12-02 2012-10-24 株式会社Mush−A データ処理装置、データ処理システムおよびデータ処理方法
EP2519876A1 (en) 2009-12-28 2012-11-07 Hyperion Core, Inc. Optimisation of loops and data flow sections
GB201001621D0 (en) 2010-02-01 2010-03-17 Univ Catholique Louvain A tile-based processor architecture model for high efficiency embedded homogenous multicore platforms
KR101603751B1 (ko) 2010-02-18 2016-03-16 삼성전자주식회사 명령어 병렬 처리 컴퓨터를 위한 명령어 압축 장치 및 방법
US8201024B2 (en) 2010-05-17 2012-06-12 Microsoft Corporation Managing memory faults
KR101731742B1 (ko) 2010-06-18 2017-04-28 보드 오브 리전츠 더 유니버시티 오브 텍사스 시스템 결합된 분기 타깃 및 프레디킷 예측
US20120158647A1 (en) 2010-12-20 2012-06-21 Vmware, Inc. Block Compression in File System
TWI533129B (zh) 2011-03-25 2016-05-11 軟體機器公司 使用可分割引擎實體化的虛擬核心執行指令序列程式碼區塊
US9304776B2 (en) 2012-01-31 2016-04-05 Oracle International Corporation System and method for mitigating the impact of branch misprediction when exiting spin loops
US9513922B2 (en) 2012-04-20 2016-12-06 Freescale Semiconductor, Inc. Computer system and a method for generating an optimized program code
CN103513957B (zh) 2012-06-27 2017-07-11 上海芯豪微电子有限公司 高性能缓存方法
US9424191B2 (en) 2012-06-29 2016-08-23 Intel Corporation Scalable coherence for multi-core processors
US10073779B2 (en) 2012-12-28 2018-09-11 Intel Corporation Processors having virtually clustered cores and cache slices
US9792252B2 (en) 2013-05-31 2017-10-17 Microsoft Technology Licensing, Llc Incorporating a spatial array into one or more programmable processor cores
GB2515076B (en) 2013-06-13 2020-07-15 Advanced Risc Mach Ltd A data processing apparatus and method for handling retrieval of instructions from an instruction cache
US9619750B2 (en) 2013-06-29 2017-04-11 Intel Corporation Method and apparatus for store dependence prediction
US9239735B2 (en) 2013-07-17 2016-01-19 Texas Instruments Incorporated Compiler-control method for load speculation in a statically scheduled microprocessor
US9547496B2 (en) 2013-11-07 2017-01-17 Microsoft Technology Licensing, Llc Energy efficient multi-modal instruction issue
JP6488711B2 (ja) 2015-01-14 2019-03-27 富士通株式会社 演算処理装置および演算処理装置の制御方法
US10606651B2 (en) 2015-04-17 2020-03-31 Microsoft Technology Licensing, Llc Free form expression accelerator with thread length-based thread assignment to clustered soft processor cores that share a functional circuit
US9940136B2 (en) 2015-06-26 2018-04-10 Microsoft Technology Licensing, Llc Reuse of decoded instructions
US10452399B2 (en) 2015-09-19 2019-10-22 Microsoft Technology Licensing, Llc Broadcast channel architectures for block-based processors
US20170083318A1 (en) 2015-09-19 2017-03-23 Microsoft Technology Licensing, Llc Configuring modes of processor operation
US20170083320A1 (en) 2015-09-19 2017-03-23 Microsoft Technology Licensing, Llc Predicated read instructions
US20170083319A1 (en) 2015-09-19 2017-03-23 Microsoft Technology Licensing, Llc Generation and use of block branch metadata
US20170083341A1 (en) 2015-09-19 2017-03-23 Microsoft Technology Licensing, Llc Segmented instruction block

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6625773B1 (en) 1999-06-09 2003-09-23 International Business Machines Corporation System for multicast communications in packet switched networks
US6891828B2 (en) 2001-03-12 2005-05-10 Network Excellence For Enterprises Corp. Dual-loop bus-based network switch using distance-value or bit-mask
US6980209B1 (en) 2002-06-14 2005-12-27 Nvidia Corporation Method and system for scalable, dataflow-based, programmable processing of graphics data

Also Published As

Publication number Publication date
WO2011034643A3 (en) 2014-03-20
GB201121576D0 (en) 2012-01-25
US20110072239A1 (en) 2011-03-24
CN103038760B (zh) 2019-11-19
GB2485915A (en) 2012-05-30
JP2013501299A (ja) 2013-01-10
CN103038760A (zh) 2013-04-10
GB2485915B (en) 2017-06-07
WO2011034643A2 (en) 2011-03-24
KR20120055611A (ko) 2012-05-31
US10698859B2 (en) 2020-06-30

Similar Documents

Publication Publication Date Title
KR101364303B1 (ko) 분산 프로세서 시스템에서의 데이터 멀티캐스팅
JP7379779B2 (ja) 行列処理装置
TWI610174B (zh) 計算裝置及計算系統
KR101373925B1 (ko) 프로세서 코어들에 대한 캐시 메모리 연관성의 할당
CN109154924A (zh) 多个上行链路端口设备
US8997071B2 (en) Optimized division of work among processors in a heterogeneous processing system
US9910802B2 (en) High bandwidth low latency data exchange between processing elements
JP6580307B2 (ja) マルチコア装置及びマルチコア装置のジョブスケジューリング方法
WO2011134689A1 (en) Compiling software for a hierarchical distributed processing system
CN111630487B (zh) 用于神经网络处理的共享存储器的集中式-分布式混合组织
GB2510005A (en) Allocation of processing cores among a set of software programs
JP2021511576A (ja) ディープラーニングアクセラレータシステム及びその方法
CN107005492B (zh) 用于芯片上网络上的多播和缩减通信的系统
US11029746B2 (en) Dynamic power management network for memory devices
US10659396B2 (en) Joining data within a reconfigurable fabric
US20180212894A1 (en) Fork transfer of data between multiple agents within a reconfigurable fabric
CN115827065A (zh) 使用早期和后期地址以及循环计数寄存器来跟踪架构状态的流引擎
JP2010520519A (ja) 自律または共通制御されるpeアレイを有するシステムのためのデータ転送ネットワークおよび制御装置
US10223260B2 (en) Compiler-generated memory mapping hints
CN100481060C (zh) 一种流处理器中多核扩展的方法
CN117581200A (zh) 在分派期间从存储器加载数据
US20230036751A1 (en) Sparse memory handling in pooled memory
US20230333998A1 (en) Instruction set architecture support for conditional direct memory access data movement operations
US20210042111A1 (en) Efficient encoding of high fanout communications
CN117435545A (zh) 用于请求计算系统中的原子操作的方法和系统

Legal Events

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

Payment date: 20161229

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20180118

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20190116

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20200115

Year of fee payment: 7