KR101364303B1 - 분산 프로세서 시스템에서의 데이터 멀티캐스팅 - Google Patents
분산 프로세서 시스템에서의 데이터 멀티캐스팅 Download PDFInfo
- 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
Links
- 238000012545 processing Methods 0.000 claims abstract description 153
- 238000000034 method Methods 0.000 claims abstract description 82
- 239000000284 extract Substances 0.000 claims description 4
- 238000005266 casting Methods 0.000 claims 1
- 238000004590 computer program Methods 0.000 abstract description 3
- 230000008569 process Effects 0.000 description 38
- 238000004891 communication Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 6
- 238000013507 mapping Methods 0.000 description 5
- 230000015654 memory Effects 0.000 description 5
- 230000010076 replication Effects 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 3
- 239000000758 substrate Substances 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000012913 prioritisation Methods 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 230000003044 adaptive effect Effects 0.000 description 1
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 230000003466 anti-cipated effect Effects 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 230000007123 defense Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000013011 mating Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 239000003607 modifier Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations 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/163—Interprocessor communication
- G06F15/173—Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
- G06F15/17306—Intercommunication techniques
- G06F15/17312—Routing techniques specific to parallel machines, e.g. wormhole, store and forward, shortest path problem congestion
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations 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/163—Interprocessor communication
- G06F15/173—Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
- G06F15/17306—Intercommunication techniques
- G06F15/17318—Parallel communications techniques, e.g. gather, scatter, reduce, roadcast, multicast, all to all
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3824—Operand accessing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3824—Operand accessing
- G06F9/3826—Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
- G06F9/3828—Bypassing 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
Abstract
분산 프로세서 아키텍처에서의 데이터 멀티캐스팅에 일반적으로 관련된 방법들, 절차들, 장치들, 컴퓨터 프로그램들, 컴퓨터 액세스가능 매체들, 프로세싱 장치들 및 시스템들이 기술되어 있다. 다양한 구현들은 소스로부터 제 1 메시지를 수신하도록 구성되는 복수의 타깃 명령들을 식별하는 것; 타깃 명령들에 의해 공통으로 공유되는 선택된 정보를 포함하는 타깃 명령들 각각에 대한 타깃 라우팅 명령들을 제 1 메시지에 제공하는 것; 및 식별된 타깃 명령들 중 2개의 타깃 명령들이, 라우터에 대해 서로 상이한 방향들로 위치되어 있는 경우, 제 1 메시지를 복제하고 복제된 메시지들을 식별된 타깃 명령들 각각에 상이한 방향들로 라우팅하는 것을 포함할 수도 있다. 그 제공한 타깃 라우팅 명령들은, 타깃 명령들에 의해 공통으로 공유되고 좌측 오퍼랜드, 우측 오퍼랜드 또는 술어 오퍼랜드로서 식별되는 비트들의 서브세트를 이용하는 선택된 정보를 더 포함할 수도 있고, 타깃 명령들의 복수의 다중-명령 서브세트들 중 하나의 다중-명령 서브세트의 선택을 포함할 수도 있다.
Description
정부 후원 연구에 관한 진술
본 개시물은, 적어도 부분적으로, 국방 첨단 과학 기술 연구소 (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 은 분산 프로세서 아키텍처에서의 데이터 멀티캐스팅을 위해 구성된 컴퓨터 시스템의 하드웨어 구성의 일 예를 나타낸 것이다.
도 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 메시지에 제공하는 단계로서, 상기 타깃 라우팅 명령들 각각은, 상기 식별된 타깃 명령들에 의해 공통으로 공유되는 선택된 정보를 포함하는, 상기 타깃 라우팅 명령들을 제공하는 단계; 및
상기 식별된 타깃 명령들 중 2개의 타깃 명령들이, 라우터에 대해 서로 상이한 방향들로 위치되어 있는 프로세싱 코어들과 연관되는 경우, 상기 제 1 메시지를 복제하고, 복제된 메시지들을 상기 식별된 타깃 명령들 각각에 상이한 방향들로 라우팅하는 단계를 포함하는, 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 방법. - 제 1 항에 있어서,
상기 타깃 라우팅 명령들을 제공하는 단계는, 상기 타깃 명령들에 의해 공통으로 공유되는 비트들의 서브세트를 이용하여 상기 선택된 정보를 인코딩하는 단계를 더 포함하는, 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 방법. - 제 1 항에 있어서,
상기 타깃 명령들에 의해 공통으로 공유되는 상기 선택된 정보는, 좌측 오퍼랜드 (left operand), 우측 오퍼랜드 (right operand) 또는 술어 오퍼랜드 (predicate operand) 중 하나의 오퍼랜드로서 식별되는, 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 방법. - 제 1 항에 있어서,
상기 타깃 명령들에 의해 공통으로 공유되는 상기 선택된 정보는, 상기 타깃 명령들의 다수의 다중-명령 서브세트들 중 하나의 다중-명령 서브세트의 선택을 포함하는, 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 방법. - 제 4 항에 있어서,
상기 타깃 명령들의 상기 다중-명령 서브세트들의 개수는 8개인, 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 방법. - 제 1 항에 있어서,
상기 타깃 라우팅 명령들은 명령 인코딩의 타입을 특정하는데 이용되는 비트를 포함하는, 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 방법. - 제 1 항에 있어서,
상기 타깃 라우팅 명령들을 제공하는 단계는, 또 다른 명령에 의해 생성되는 비트마스크를 이용하는 단계를 더 포함하는, 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 방법. - 제 1 항에 있어서,
상기 복제된 메시지들을 라우팅하는 단계는, 상기 제 1 메시지의 헤더를 판독하여 상기 타깃 라우팅 명령들을 결정하는 단계를 포함하는, 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 방법. - 제 1 항에 있어서,
상기 타깃 라우팅 명령들을 제공하는 단계는,
상기 타깃 라우팅 명령들이 상기 소스로부터 상기 2개의 타깃 명령들로의 상이한 방향들로의 루트 (route) 들을 포함하고 상기 루트들이 공통 링크를 공유하는 경우, 상기 제 1 메시지 및 상기 복제된 메시지들이 상기 공통 링크를 1회만 통과 (traverse) 하도록 상기 타깃 라우팅 명령들을 구성하는 단계를 더 포함하는, 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 방법. - 제 1 항에 있어서,
상기 복제된 메시지들을 상기 식별된 타깃 명령들 각각에 라우팅하는 단계는, 상기 식별된 타깃 명령들 각각이 로컬 프로세싱 코어에 상주한다는 상기 라우터의 결정시에, 상기 제 1 메시지 또는 상기 복제된 메시지 중 적어도 하나의 메시지를 추출하고, 상기 적어도 하나의 메시지를 상기 로컬 프로세싱 코어에 전송하는 단계를 포함하는, 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 방법. - 다수의 상호 연결된 프로세싱 코어들을 갖는 분산 프로세서 아키텍처에서의 데이터 멀티캐스팅을 위한 장치로서,
소스 및 라우터를 포함하고,
상기 소스는,
상기 소스로부터 제 1 메시지를 수신하도록 구성되는 복수의 타깃 명령들을 식별하고,
상기 타깃 명령들에 의해 공통으로 공유되는 선택된 정보를 포함하는 상기 타깃 명령들에 대한 타깃 라우팅 명령들을 상기 제 1 메시지에 제공하도록
구성되고,
상기 라우터는,
상기 타깃 라우팅 명령들을 판독하여 상기 타깃 명령들 각각의 위치를 결정하고,
상기 타깃 명령들 중 2개의 타깃 명령들이, 상기 라우터에 대해 서로 상이한 방향들로 위치되어 있는 프로세싱 코어들과 연관되는 경우, 상기 제 1 메시지를 복제하는 것을 포함하여, 상기 제 1 메시지를 상기 타깃 명령들 각각에 라우팅하도록
구성되는, 분산 프로세서 아키텍처에서의 데이터 멀티캐스팅을 위한 장치. - 제 11 항에 있어서,
상기 소스는 또한, 상기 타깃 명령들에 의해 공통으로 공유되는 비트들의 서브세트를 이용하여 상기 선택된 정보를 인코딩하도록 구성되는, 분산 프로세서 아키텍처에서의 데이터 멀티캐스팅을 위한 장치. - 제 11 항에 있어서,
상기 소스는 또한, 상기 타깃 명령들에 의해 공통으로 공유되는 상기 선택된 정보가 좌측 오퍼랜드, 우측 오퍼랜드 또는 술어 오퍼랜드 중 하나의 오퍼랜드를 식별하도록, 상기 선택된 정보를 인코딩하도록 구성되는, 분산 프로세서 아키텍처에서의 데이터 멀티캐스팅을 위한 장치. - 제 11 항에 있어서,
상기 소스는 또한, 상기 타깃 명령들에 의해 공통으로 공유되는 상기 선택된 정보가 상기 타깃 명령들의 복수의 다중-명령 서브세트들 중 하나의 다중-명령 서브세트의 선택을 식별하도록, 상기 선택된 정보를 인코딩하도록 구성되는, 분산 프로세서 아키텍처에서의 데이터 멀티캐스팅을 위한 장치. - 제 11 항에 있어서,
상기 라우터는, 상기 타깃 명령이 로컬 프로세싱 코어에 상주한다는 상기 라우터의 결정시에, 상기 제 1 메시지 또는 복제된 메시지 중 적어도 하나의 메시지를 추출하고, 상기 추출된 메시지를 상기 로컬 프로세싱 코어에 전송하도록 구성되는, 분산 프로세서 아키텍처에서의 데이터 멀티캐스팅을 위한 장치. - 다수의 상호 연결된 프로세싱 코어들을 갖는 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 시스템으로서,
온칩 네트워크를 통해 상호 연결된 복수의 프로세싱 코어들을 갖는 분산 프로세싱 장치로서, 소스는 상기 복수의 프로세싱 코어들 중 하나의 프로세싱 코어와 연관되고, 복수의 타깃 명령들은 상기 복수의 프로세싱 코어들 중 적어도 하나의 프로세싱 코어와 연관되는, 상기 분산 프로세싱 장치; 및
복수의 라우터들로서, 상기 복수의 프로세싱 코어들 각각은 상기 복수의 라우터들 중 대응하는 라우터와 연관되는, 상기 복수의 라우터들을 포함하고,
상기 복수의 라우터들 중 하나 이상의 라우터들은,
상기 소스로부터 메시지를 수신하고,
상기 메시지로부터 타깃 라우팅 명령들을 식별하는 것으로서, 상기 식별된 타깃 라우팅 명령들은, 상기 타깃 명령들 각각의 위치를 결정하기 위해, 상기 타깃 명령들에 의해 공통으로 공유되는 선택된 정보를 포함하는, 상기 타깃 라우팅 명령들을 식별하고,
상기 타깃 명령들 중 2개의 타깃 명령들이, 라우터에 대해 서로 상이한 방향들로 위치되어 있는 프로세싱 코어들과 연관되는 경우, 상기 메시지를 복제하며,
상기 복제된 메시지를 상기 타깃 명령들 각각에 라우팅하도록
구성되는, 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 시스템. - 제 16 항에 있어서,
상기 소스는, 상기 타깃 명령들에 의해 공통으로 공유되는 비트들의 서브세트를 이용하여 상기 선택된 정보를 인코딩하도록 구성되는, 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 시스템. - 제 16 항에 있어서,
상기 소스는, 상기 선택된 정보로부터, 좌측 오퍼랜드, 우측 오퍼랜드 또는 술어 오퍼랜드 중 하나의 오퍼랜드를 식별하도록 구성되는, 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 시스템. - 제 16 항에 있어서,
상기 타깃 명령들에 의해 공통으로 공유되는 상기 선택된 정보는, 상기 타깃 명령들의 다중-명령 서브세트의 선택을 포함하는, 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 시스템. - 제 16 항에 있어서,
상기 복수의 라우터들 중 적어도 하나의 라우터는, 상기 온칩 네트워크로부터 상기 메시지를 추출하고, 상기 추출된 메시지에서의 상기 복수의 타깃 명령들 중 타깃 명령이 로컬 프로세싱 코어에 상주한다는 상기 라우터의 결정시에, 상기 추출된 메시지를 상기 로컬 프로세싱 코어에 전송하도록 구성되는, 분산 프로세싱 아키텍처에서의 데이터 멀티캐스팅을 위한 시스템.
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)
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)
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)
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 |
-
2009
- 2009-09-18 US US12/562,940 patent/US10698859B2/en active Active
-
2010
- 2010-06-11 JP JP2012523621A patent/JP2013501299A/ja active Pending
- 2010-06-11 CN CN201080035523.XA patent/CN103038760B/zh active Active
- 2010-06-11 WO PCT/US2010/038372 patent/WO2011034643A2/en active Application Filing
- 2010-06-11 GB GB1121576.1A patent/GB2485915B/en active Active
- 2010-06-11 KR KR1020127005877A patent/KR101364303B1/ko active IP Right Grant
Patent Citations (3)
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 |