KR20210005946A - 사용자 모드, 멀티 스레드, 자체 스케줄링 프로세서 내 시스템 호출 관리 - Google Patents

사용자 모드, 멀티 스레드, 자체 스케줄링 프로세서 내 시스템 호출 관리 Download PDF

Info

Publication number
KR20210005946A
KR20210005946A KR1020207034876A KR20207034876A KR20210005946A KR 20210005946 A KR20210005946 A KR 20210005946A KR 1020207034876 A KR1020207034876 A KR 1020207034876A KR 20207034876 A KR20207034876 A KR 20207034876A KR 20210005946 A KR20210005946 A KR 20210005946A
Authority
KR
South Korea
Prior art keywords
thread
execution
processor
memory
register
Prior art date
Application number
KR1020207034876A
Other languages
English (en)
Other versions
KR102481667B1 (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 KR20210005946A publication Critical patent/KR20210005946A/ko
Application granted granted Critical
Publication of KR102481667B1 publication Critical patent/KR102481667B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30192Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing
    • 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/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/14Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
    • G06F17/141Discrete Fourier transforms
    • G06F17/142Fast Fourier transforms, e.g. using a Cooley-Tukey type algorithm
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/48Indexing scheme relating to G06F9/48
    • G06F2209/483Multiproc
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5011Pool
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Mathematical Physics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

추가 기능을 또한 제공하는 자체 스케줄링 프로세서에 대한 대표적인 장치, 방법 및 시스템 실시예가 개시된다. 대표적인 실시예는 수신된 명령을 실행하도록 적응된 프로세서 코어; 및 수신된 작업 디스크립터 데이터 패킷에 응답하여 프로세서 코어에 의한 실행을 위해 명령을 자동으로 스케줄링하도록 적응된 코어 제어 회로를 포함하는 자체 스케줄링 프로세서를 포함한다. 다른 실시예에서, 코어 제어 회로는 또한 프로세서 코어에 의한 실행을 위한 파이버 생성 명령을 스케줄링하고, 리턴 인수를 저장하기 위해 스레드 제어 메모리에 미리 결정된 양의 메모리 공간을 리저브하고, 대응하는 복수의 실행 스레드의 실행을 위해 하나 이상의 작업 디스크립터 데이터 패킷을 다른 프로세서 또는 하이브리드 스레딩 패브릭 회로에 생성하도록 적응된다. 이벤트 프로세싱, 데이터 경로 관리, 시스템 호출, 메모리 요청 및 다른 새로운 명령도 개시된다.

Description

사용자 모드, 멀티 스레드, 자체 스케줄링 프로세서 내 시스템 호출 관리
관련 출원에 대한 상호 참조
본 출원은 "System Call Management in a User-Mode, Multi-Threaded, Self-Scheduling Processor"라는 제목으로 발명자 Tony M. Brewer에 의해 2019 년 4 월 30 일에 출원된 미국 특허 출원 번호 16/399,702의 우선권의 이익을 주장하며, 이는 "System Call Management in a User-Mode, Multi-Threaded, Self-Scheduling Processor"라는 제목으로 발명자 Tony M. Brewer에 의해 2018 년 5 월 7 일에 출원된 미국 가특허 출원 번호 62/667,717의 우선권의 이익을 주장하는 정규출원이고, 이는 공통으로 양도되고, 이들 모두는 본 출원에 전체가 설명된 것과 동일한 완전한 효력 및 효과로 전체가 참고로 본 출원에 통합된다 (이하에서 "관련 출원"으로 언급됨).
기술 분야
본 발명은 전반적으로 구성 가능한 컴퓨팅 회로부(circuitry)에 관한 것으로, 보다 구체적으로, 자체 스케줄링(self-scheduling) 프로세서, 내장된 상호 접속 네트워크를 갖는 구성 가능한 컴퓨팅 회로부, 동적 재구성 및 에너지 또는 전력 소비에 대한 동적 제어를 포함하는 이종 컴퓨팅 시스템(heterogeneous computing system)에 관한 것이다.
많은 기존 컴퓨팅 시스템은 계산 속도, 에너지 (또는 전력) 소비 및 관련 열 소산 측면에서 계산 프로세싱 능력(capability)에 대해 상당한 한계에 도달했다. 예를 들어, 인공 지능 및 다른 중요한 컴퓨팅 애플리케이션을 수용하는 것과 같은 어드밴스드 컴퓨팅 기술에 대한 요구가 증가함에 따라 기존 컴퓨팅 솔루션은 점점 더 부적절해졌다.
따라서, 전형적으로 불량한 캐시 적중률(hit rate)을 야기하는 제한된 또는 데이터 재사용을 포함하지 않는 희소(sparse) 데이터 세트를 사용하여 고성능을 제공할 수 있는 컴퓨팅 아키텍처에 대한 지속적인 요구가 있다. 이러한 컴퓨팅 아키텍처는 메모리에 대한 레이턴시(latency)에 내성이 있고 클럭 당 고도의 지속적으로 실행되는 명령을 허용해야 한다.
또한, 예를 들어, 제한 없이, 예컨대, 합성 개구 레이더(synthetic aperture radar), 5G 기지국, 및 그래프 분석 애플리케이션 예컨대, 스펙트럼 기술을 사용하는 그래프 클러스터링(clustering), 기계 학습, 5G 네트워킹 알고리즘 및 대형 스텐실 코드(stencil code)와 같은 감지, 통신 및 분석 애플리케이션에 사용되는 FFT (Fast Fourier Transform) 및 FIR (Finite Impulse Response) 필터 계산과 같은 계산 집약적 커널을 위한 고성능 및 에너지 효율적인 솔루션을 제공할 수 있는 컴퓨팅 아키텍처에 대한 지속적인 요구가 있다.
또한, 상당한 병렬 프로세싱이 가능하고 임의의 이러한 다양한 애플리케이션의 성능을 위해 구성 가능한 컴퓨팅 아키텍처와 추가로 상호 작용하고 제어할 수 있는 프로세서 아키텍처에 대한 지속적인 요구가 있다.
이하에서 더 상세하게 논의되는, 대표적인 장치, 시스템, 및 방법은 예를 들어, 제한 없이, 예컨대, 합성 개구 레이더, 5G 기지국, 및 그래프 분석 애플리케이션 예컨대, 스펙트럼 기술을 사용하는 그래프 클러스터링, 기계 학습, 5G 네트워킹 알고리즘 및 대형 스텐실 코드와 같은 감지, 통신 및 분석 애플리케이션에 사용되는 FFT (Fast Fourier Transform) 및 FIR (Finite Impulse Response) 필터 계산과 같은 계산 집약적 커널을 위한 고성능 및 에너지 효율적인 솔루션을 제공할 수 있는 컴퓨팅 아키텍처를 제공한다.
상기에서 언급했듯이, 희소 데이터 세트는 전형적으로 불량한 캐시 적중률을 야기한다. 대표적인 장치, 시스템 및 방법은 다른 스레드가 명령을 계속 실행하는 동안 일부 스레드가 메모리로부터 응답을 대기하도록 허용할 수 있는 컴퓨팅 아키텍처를 제공한다. 이러한 컴퓨팅 스타일은 메모리에 대한 레이턴시에 내성이 있고 클럭 당 고도의 지속적으로 실행되는 명령을 허용한다.
또한 이하에서 더 상세하게 논의되는, 대표적인 장치, 시스템 및 방법은 자체 스케줄링, 상당한 병렬 프로세싱이 가능하고 임의의 이러한 다양한 애플리케이션의 성능을 위해 구성 가능한 컴퓨팅 아키텍처와 추가로 상호 작용하고 제어할 수 있는 프로세서 아키텍처를 제공한다.
자체 스케줄링 프로세서가 개시된다. 대표적인 실시예에서, 프로세서는 수신된 명령을 실행하도록 적응된 프로세서 코어; 및 상기 프로세서 코어에 결합된 코어 제어 회로로서, 상기 코어 제어 회로는 수신된 작업 디스크립터 데이터 패킷(work descriptor data packet)에 응답하여 상기 프로세서 코어에 의한 실행을 위한 명령을 자동으로 스케줄링하도록 적응된, 상기 코어 제어 회로를 포함한다. 대표적인 실시예에서, 프로세서는 수신된 명령을 실행하도록 적응된 프로세서 코어; 및 상기 프로세서 코어에 결합된 코어 제어 회로로서, 상기 코어 제어 회로는 수신된 이벤트 데이터 패킷(event data packet)에 응답하여 상기 프로세서 코어에 의한 실행을 위한 명령을 자동으로 스케줄링하도록 적응된, 상기 코어 제어 회로를 포함한다.
로컬 또는 원격 컴퓨팅 엘리먼트에 스레드를 생성할 수 있는 멀티 스레드, 자체 스케줄링 프로세서가 또한 개시된다. 대표적인 실시예에서, 프로세서는 파이버 생성 명령을 실행하도록 적응된 프로세서 코어; 및 상기 프로세서 코어에 결합된 코어 제어 회로로서, 상기 코어 제어 회로는 상기 프로세서 코어에 의한 실행을 위한 상기 파이버 생성 명령을 자동으로 스케줄링하고, 대응하는 복수의 실행 스레드의 실행을 위해 다른 프로세서 또는 하이브리드 스레딩 패브릭 회로에 하나 이상의 작업 디스크립터 데이터 패킷을 생성하도록 적응된, 상기 코어 제어 회로를 포함한다. 다른 대표적인 실시예에서, 프로세서는 파이버 생성 명령을 실행하도록 적응된 프로세서 코어; 및 상기 프로세서 코어에 결합된 코어 제어 회로로서, 상기 코어 제어 회로는 상기 프로세서 코어에 의한 실행을 위한 파이버 생성 명령을 스케줄링하고, 리턴 인수(return argument)를 저장하기 위해 스레드 제어 메모리에 미리 결정된 양의 메모리 공간을 리저브(reserve)하고, 대응하는 복수의 실행 스레드의 실행을 위해 다른 프로세서 또는 하이브리드 스레딩 패브릭 회로에 하나 이상의 작업 디스크립터 데이터 패킷을 생성하도록 적응된, 상기 코어 제어 회로를 포함한다.
다른 대표적인 실시예에서, 프로세서는 : 코어 제어 회로로서 : 상호 접속 네트워크 인터페이스; 상기 상호 접속 네트워크 인터페이스에 결합된 스레드 제어 메모리; 상기 스레드 제어 메모리에 결합된 실행 큐(queue); 상기 스레드 제어 메모리에, 상기 실행 큐에 결합된 제어 로직 및 스레드 선택 회로; 및 상기 제어 로직 및 상기 스레드 선택 회로에 결합된 명령 캐시를 포함하는, 상기 코어 제어 회로를 포함하고; 및 추가로, 상기 프로세서 코어는 상기 코어 제어 회로의 상기 명령 캐시에 결합된다.
다른 대표적인 실시예에서, 프로세서는 : 코어 제어 회로로서 : 상호 접속 네트워크 인터페이스; 상기 상호 접속 네트워크 인터페이스에 결합된 스레드 제어 메모리; 네트워크 응답 메모리; 상기 스레드 제어 메모리에 결합된 실행 큐(queue); 상기 스레드 제어 메모리에, 상기 실행 큐에 결합된 제어 로직 및 스레드 선택 회로; 상기 제어 로직 및 상기 스레드 선택 회로에 결합된 명령 캐시; 및 커맨드 큐를 포함하는, 상기 코어 제어 회로를 포함하고; 및 추가로, 상기 프로세서 코어는 상기 코어 제어 회로의 상기 커맨드 큐 및 상기 명령 캐시에 결합된다.
다른 대표적인 실시예에서, 프로세서는 : 프로세서 코어 및 상기 프로세서 코어에 결합된 코어 제어 회로를 포함하되, 상기 코어 제어 회로는 : 작업 디스크립터 데이터 패킷을 수신하고, 수신된 상기 작업 디스크립터 데이터 패킷을 초기 프로그램 카운트(count) 및 임의의 수신된 인수를 갖는 실행 스레드로 디코딩하기 위해 상호 접속 네트워크에 결합 가능한 상호 접속 네트워크 인터페이스; 상기 스레드 제어 메모리에 결합된 실행 큐; 및 상기 실행 큐에 결합된 제어 로직 및 스레드 선택 회로로서, 상기 제어 로직 및 스레드 선택 회로는 사용 가능한 스레드 식별자를 상기 실행 스레드에 할당하고, 상기 스레드 식별자를 상기 실행 큐에 자동으로 배치하고, 상기 실행 스레드 실행을 위해 상기 스레드 식별자를 주기적으로 선택하도록 적응된, 상기 제어 로직 및 스레드 선택 회로를 포함한다.
다른 대표적인 실시예에서, 프로세서는 : 프로세서 코어 및 상기 프로세서 코어에 결합된 코어 제어 회로를 포함하되, 상기 코어 제어 회로는 : 작업 디스크립터 데이터 패킷을 수신하고, 수신된 상기 작업 디스크립터 데이터 패킷을 초기 프로그램 카운트 및 임의의 수신된 인수를 갖는 실행 스레드로 디코딩하기 위해 상호 접속 네트워크에 결합 가능한 상호 접속 네트워크 인터페이스; 상기 스레드 제어 메모리에 결합된 실행 큐; 및 상기 실행 큐에 결합된 제어 로직 및 스레드 선택 회로로서, 상기 제어 로직 및 스레드 선택 회로는 사용 가능한 스레드 식별자를 상기 실행 스레드에 할당하고, 상기 스레드 식별자를 상기 실행 큐에 자동으로 배치하고, 프로세서 코어에 의한 실행 스레드의 명령 실행을 위해 상기 스레드 식별자를 주기적으로 선택하도록 적응된, 상기 제어 로직 및 스레드 선택 회로를 포함한다.
다른 대표적인 실시예에서, 프로세서는 : 프로세서 코어 및 상기 프로세서 코어에 결합된 코어 제어 회로를 포함하되, 상기 코어 제어 회로는 : 상기 스레드 제어 메모리에 결합된 실행 큐; 및 상기 실행 큐에 결합된 제어 로직 및 스레드 선택 회로로서, 상기 제어 로직 및 스레드 선택 회로는 사용 가능한 스레드 식별자를 상기 실행 스레드에 할당하고, 상기 스레드 식별자를 상기 실행 큐에 자동으로 배치하고, 상기 프로세서 코어에 의한 실행 스레드의 명령 실행을 위해 상기 스레드 식별자를 주기적으로 선택하도록 적응된, 상기 제어 로직 및 스레드 선택 회로를 포함한다.
다른 대표적인 실시예에서, 프로세서는 : 프로세서 코어 및 상기 프로세서 코어에 결합된 코어 제어 회로를 포함하되, 상기 코어 제어 회로는 : 복수의 레지스터를 포함하는 스레드 제어 메모리로서, 상기 복수의 레지스터는 복수의 스레드 식별자를 저장하는 스레드 식별자 풀 레지스터(pool register), 수신된 프로그램 카운트를 저장하는 프로그램 카운트 레지스터, 데이터 캐시 및 수신된 인수를 저장하는 범용 레지스터를 포함하는, 상기 스레드 제어 메모리; 상기 스레드 제어 메모리에 결합된 실행 큐; 및 상기 실행 큐에 결합된 제어 로직 및 스레드 선택 회로로서, 상기 제어 로직 및 스레드 선택 회로는 사용 가능한 스레드 식별자를 상기 실행 스레드에 할당하고, 상기 스레드 식별자를 상기 실행 큐에 자동으로 배치하고, 상기 프로세서 코어에 의한 실행 스레드의 명령 실행을 위해 상기 스레드 식별자를 주기적으로 선택하도록 적응된, 상기 제어 로직 및 스레드 선택 회로를 포함하고, 상기 프로세서 코어는 사기 데이터 캐시 또는 범용 레지스터에 저장된 데이터를 사용한다.
다른 대표적인 실시예에서, 프로세서는 : 프로세서 코어 및 상기 프로세서 코어에 결합된 코어 제어 회로를 포함하되, 상기 코어 제어 회로는 : 복수의 레지스터를 포함하는 스레드 제어 메모리로서, 상기 복수의 레지스터는 복수의 스레드 식별자를 저장하는 스레드 식별자 풀 레지스터, 수신된 프로그램 카운트를 저장하는 프로그램 카운트 레지스터, 및 상기 복수의 스레드 식별자의 각각의 스레드 식별자에 대한 유효 상태 또는 일시 중지(paused) 상태를 저장하는 스레드 상태 레지스터를 포함하는, 상기 스레드 제어 메모리; 상기 스레드 제어 메모리에 결합된 실행 큐; 및 상기 실행 큐에 결합된 제어 로직 및 스레드 선택 회로로서, 상기 제어 로직 및 스레드 선택 회로는 사용 가능한 스레드 식별자를 상기 실행 스레드에 할당하고, 상기 스레드 식별자가 유효 상태일 때 상기 스레드 식별자를 실행 큐에 자동으로 배치하고, 상기 유효 상태가 유지되는 한, 상기 실행 스레드가 완료될 때까지 상기 프로세서 코어에 의해 상기 실행 스레드의 명령을 실행할 상기 스레드 식별자를 주기적으로 선택하도록 적응된, 상기 제어 로직 및 스레드 선택 회로를 포함한다.
다른 대표적인 실시예에서, 프로세서는 : 프로세서 코어 및 상기 프로세서 코어에 결합된 코어 제어 회로를 포함하되, 상기 코어 제어 회로는 : 복수의 레지스터를 포함하는 스레드 제어 메모리로서, 상기 복수의 레지스터는 복수의 스레드 식별자를 저장하는 스레드 식별자 풀 레지스터, 수신된 프로그램 카운트를 저장하는 프로그램 카운트 레지스터, 및 상기 복수의 스레드 식별자의 각각의 스레드 식별자에 대한 유효 상태 또는 일시 중지(paused) 상태를 저장하는 스레드 상태 레지스터를 포함하는, 상기 스레드 제어 메모리; 상기 스레드 제어 메모리에 결합된 실행 큐; 및 상기 실행 큐에 결합된 제어 로직 및 스레드 선택 회로로서, 상기 제어 로직 및 스레드 선택 회로는 사용 가능한 스레드 식별자를 상기 실행 스레드에 할당하고, 상기 스레드 식별자가 유효 상태일 때 상기 스레드 식별자를 실행 큐에 자동으로 배치하고, 상기 유효 상태가 유지되는 한, 상기 프로세서 코어에 의해 상기 실행 스레드의 명령을 실행할 상기 스레드 식별자를 주기적으로 선택하고, 일시 중지 상태일 때 상기 스레드 식별자를 사기 실행 큐에 리턴시키지 않음으로써 스레드 실행을 일시 중지하도록 적응된, 상기 제어 로직 및 스레드 선택 회로를 포함한다.
다른 대표적인 실시예에서, 프로세서는 : 프로세서 코어 및 상기 프로세서 코어에 결합된 코어 제어 회로를 포함하되, 상기 코어 제어 회로는 : 복수의 레지스터를 포함하는 스레드 제어 메모리로서, 상기 복수의 레지스터는 복수의 스레드 식별자를 저장하는 스레드 식별자 풀 레지스터, 스레드 상태 레지스터, 수신된 프로그램 카운트를 저장하는 프로그램 카운트 레지스터, 데이터 캐시 및 수신된 인수를 저장하는 범용 레지스터;를 포함하는, 상기 스레드 제어 메모리; 상기 스레드 제어 메모리에 결합된 실행 큐; 및 상기 실행 큐에 결합된 제어 로직 및 스레드 선택 회로로서, 상기 제어 로직 및 스레드 선택 회로는 사용 가능한 스레드 식별자를 상기 실행 스레드에 할당하고, 스레드 식별자를 실행 큐에 자동으로 배치하고 및 상기 프로세서 코어에 의한 실행 스레드의 명령 실행을 위해 상기 스레드 식별자를 주기적으로 선택하도록 적응된, 상기 제어 로직 및 스레드 선택 회로를 포함한다.
다른 대표적인 실시예에서, 프로세서는 : 복수의 명령을 실행하도록 적응된 프로세서 코어; 및 상기 프로세서 코어에 결합된 코어 제어 회로를 포함하되, 상기 코어 제어 회로는 : 작업 디스크립터 데이터 패킷을 수신하고, 상기 수신된 작업 디스크립터 데이터 패킷을 초기 프로그램 카운트 및 임의의 수신된 인수를 갖는 실행 스레드로 디코딩하기 위해 상호 접속 네트워크에 결합 가능한 상호 접속 네트워크 인터페이스; 상기 상호 접속 네트워크 인터페이스에 결합되고 복수의 레지스터를 포함하는 스레드 제어 메모리로서, 상기 복수의 레지스터는 복수의 스레드 식별자를 저장하는 스레드 식별자 풀 레지스터, 스레드 상태 레지스터, 수신된 프로그램 카운트를 저장하는 프로그램 카운트 레지스터, 데이터 캐시 및 수신된 인수를 저장하는 범용 레지스터를 포함하는, 상기 스레드 제어 메모리; 상기 스레드 제어 메모리에 결합된 실행 큐; 상기 실행 큐 및 상기 스레드 제어 메모리에 결합된 제어 로직 및 스레드 선택 회로로서, 상기 제어 로직 및 스레드 선택 회로는 사용 가능한 스레드 식별자를 상기 실행 스레드에 할당하고, 상기 스레드 식별자를 실행 큐에 배치하고, 실행할 상기 스레드 식별자를 선택하고, 상기 실행 스레드에 대한 초기 프로그램 카운트를 선택하기 위한 인덱스(index)로 상기 스레드 식별자를 사용하여 상기 스레드 제어 메모리에 액세스하도록 적응된, 상기 제어 로직 및 스레드 선택 회로; 및 상기 프로세서 코어 및 상기 제어 로직 및 스레드 선택 회로에 결합된 명령 캐시로서, 상기 초기 프로그램 카운트를 수신하고 복수의 명령의 실행을 위한 대응 명령을 상기 프로세서 코어에 제공하는, 상기 명령 캐시를 포함한다.
다른 대표적인 실시예에서, 프로세서는 : 코어 제어 회로를 포함하되, 상기 코어 제어 회로는 : 작업 디스크립터 데이터 패킷을 수신하고, 상기 수신된 작업 디스크립터 데이터 패킷을 초기 프로그램 카운트 및 임의의 수신된 인수를 갖는 실행 스레드로 디코딩하기 위해 상호 접속 네트워크에 결합 가능한 상호 접속 네트워크 인터페이스; 상기 상호 접속 네트워크 인터페이스에 결합되고 복수의 레지스터를 포함하는 스레드 제어 메모리로서, 상기 복수의 레지스터는 복수의 스레드 식별자를 저장하는 스레드 식별자 풀 레지스터, 스레드 상태 레지스터, 수신된 프로그램 카운트를 저장하는 프로그램 카운트 레지스터, 데이터 캐시 및 수신된 인수를 저장하는 범용 레지스터를 포함하는, 상기 스레드 제어 메모리; 상기 스레드 제어 메모리에 결합된 실행 큐; 상기 실행 큐 및 상기 스레드 제어 메모리에 결합된 제어 로직 및 스레드 선택 회로로서, 상기 제어 로직 및 스레드 선택 회로는 사용 가능한 스레드 식별자를 상기 실행 스레드에 할당하고, 상기 스레드 식별자를 실행 큐에 자동으로 배치하고, 실행할 상기 스레드 식별자를 주기적으로 선택하고, 상기 실행 스레드에 대한 초기 프로그램 카운트를 선택하기 위한 인덱스로 상기 스레드 식별자를 사용하여 상기 스레드 제어 메모리에 액세스하도록 적응된, 상기 제어 로직 및 스레드 선택 회로; 및 상기 초기 프로그램 카운트를 수신하고 실행을 위한 대응 명령을 제공하기 위해 상기 제어 로직 및 스레드 선택 회로에 결합된 명령 캐시를 포함하되; 추가로, 프로세서 코어는 상기 코어 제어 회로의 상기 명령 캐시에 결합되고, 상기 프로세서 코어는 대응하는 명령을 실행하도록 적응된다.
다른 대표적인 실시예에서, 프로세서는 : 코어 제어 회로를 포함하되, 상기 코어 제어 회로는 : 작업 디스크립터 데이터 패킷을 수신하고, 상기 수신된 작업 디스크립터 데이터 패킷을 초기 프로그램 카운트 및 임의의 수신된 인수를 갖는 실행 스레드로 디코딩하기 위해 상호 접속 네트워크에 결합 가능한 상호 접속 네트워크 인터페이스; 상기 상호 접속 네트워크 인터페이스에 결합되고 복수의 레지스터를 포함하는 스레드 제어 메모리로서, 상기 복수의 레지스터는 복수의 스레드 식별자를 저장하는 스레드 식별자 풀 레지스터, 스레드 상태 레지스터, 수신된 프로그램 카운트를 저장하는 프로그램 카운트 레지스터, 및 수신된 인수를 저장하는 범용 레지스터를 포함하는, 상기 스레드 제어 메모리; 상기 스레드 제어 메모리에 결합된 실행 큐; 상기 실행 큐 및 상기 스레드 제어 메모리에 결합된 제어 로직 및 스레드 선택 회로로서, 상기 제어 로직 및 스레드 선택 회로는 사용 가능한 스레드 식별자를 상기 실행 스레드에 할당하고, 상기 스레드 식별자를 실행 큐에 배치하고, 실행할 상기 스레드 식별자를 선택하고, 상기 실행 스레드에 대한 초기 프로그램 카운트를 선택하기 위한 인덱스로 상기 스레드 식별자를 사용하여 상기 스레드 제어 메모리에 액세스하도록 적응된, 상기 제어 로직 및 스레드 선택 회로; 상기 초기 프로그램 카운트를 수신하고 실행을 위한 대응 명령을 제공하기 위해 상기 제어 로직 및 스레드 선택 회로에 결합된 명령 캐시; 및 커맨드 큐(command queue)를 포함하되; 추가로, 프로세서 코어는 상기 코어 제어 회로의 상기 커맨드 큐 및 상기 명령 캐시에 결합되고, 상기 프로세서 코어는 대응하는 명령을 실행하도록 적응된다.
다른 대표적인 실시예에서, 프로세서는 : 코어 제어 회로를 포함하되, 상기 코어 제어 회로는 상기 상호 접속 네트워크 인터페이스에 결합되고 : 작업 디스크립터 데이터 패킷을 수신하고, 상기 수신된 작업 디스크립터 데이터 패킷을 초기 프로그램 카운트 및 임의의 수신된 인수를 갖는 실행 스레드로 디코딩하기 위해 상호 접속 네트워크에 결합 가능한 상호 접속 네트워크 인터페이스; 상기 상호 접속 네트워크 인터페이스에 결합되고 복수의 레지스터를 포함하는 스레드 제어 메모리로서, 상기 복수의 레지스터는 복수의 스레드 식별자를 저장하는 스레드 식별자 풀 레지스터, 스레드 상태 레지스터, 수신된 프로그램 카운트를 저장하는 프로그램 카운트 레지스터, 및 수신된 인수를 저장하는 범용 레지스터를 포함하는, 상기 스레드 제어 메모리; 상기 스레드 제어 메모리에 결합된 실행 큐; 상기 실행 큐 및 상기 스레드 제어 메모리에 결합된 제어 로직 및 스레드 선택 회로로서, 상기 제어 로직 및 스레드 선택 회로는 사용 가능한 스레드 식별자를 상기 실행 스레드에 할당하고, 상기 스레드 식별자를 실행 큐에 배치하고, 실행할 상기 스레드 식별자를 선택하고, 상기 실행 스레드에 대한 초기 프로그램 카운트를 선택하기 위한 인덱스로 상기 스레드 식별자를 사용하여 상기 스레드 제어 메모리에 액세스하도록 적응된, 상기 제어 로직 및 스레드 선택 회로, 및 상기 초기 프로그램 카운트를 수신하고 실행을 위한 대응 명령을 제공하기 위해 상기 제어 로직 및 스레드 선택 회로에 결합된 명령 캐시를 포함하되; 추가로, 프로세서 코어는 상기 코어 제어 회로의 상기 명령 캐시에 결합되고, 상기 프로세서 코어는 대응하는 명령을 실행하도록 적응된다.
다른 대표적인 실시예에서, 프로세서는 : 코어 제어 회로를 포함하되, 상기 코어 제어 회로는 : 호출(call) 작업 디스크립터 데이터 패킷을 수신하고, 상기 수신된 작업 디스크립터 데이터 패킷을 초기 프로그램 카운트 및 임의의 수신된 인수를 갖는 실행 스레드로 디코딩하고 다른 프로세싱 엘리먼트로 송신을 위해 작업 디스크립터 패킷을 인코딩하기 위해 상호 접속 네트워크에 결합 가능한 상호 접속 네트워크 인터페이스; 상기 상호 접속 네트워크 인터페이스에 결합되고 복수의 레지스터를 포함하는 스레드 제어 메모리로서, 상기 복수의 레지스터는 복수의 스레드 식별자를 저장하는 스레드 식별자 풀 레지스터, 스레드 상태 레지스터, 수신된 프로그램 카운트를 저장하는 프로그램 카운트 레지스터, 및 수신된 인수를 저장하는 범용 레지스터를 포함하는, 상기 스레드 제어 메모리; 상기 스레드 제어 메모리에 결합된 실행 큐; 상기 상호 접속 네트워크 인터페이스에 결합된 네트워크 응답 메모리; 상기 실행 큐, 상기 스레드 제어 메모리 및 상기 명령 캐시에 결합된 제어 로직 및 스레드 선택 회로로서, 상기 제어 로직 및 스레드 선택 회로는 사용 가능한 스레드 식별자를 상기 실행 스레드에 할당하고, 상기 스레드 식별자를 실행 큐에 배치하고, 실행할 상기 스레드 식별자를 선택하고, 상기 실행 스레드에 대한 초기 프로그램 카운트를 선택하기 위한 인덱스로 상기 스레드 식별자를 사용하여 상기 스레드 제어 메모리에 액세스하도록 적응된, 상기 제어 로직 및 스레드 선택 회로; 상기 초기 프로그램 카운트를 수신하고 실행을 위한 대응 명령을 제공하기 위해 상기 제어 로직 및 스레드 선택 회로에 결합된 명령 캐시; 및 하나 이상의 작업 디스크립터 패킷의 생성을 위한 하나 이상의 커맨드를 저장하는 커맨드 큐를 포함하되; 및 또한, 프로세서 코어는 상기 명령 캐시 및 상기 코어 제어 회로의 커맨드 큐에 결합되고, 상기 프로세서 코어는 대응하는 명령을 실행하도록 적응된다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 코어 제어 회로는 : 상호 접속 네트워크에 결합 가능한 상호 접속 네트워크 인터페이스를 더 포함하되, 상기 상호 접속 네트워크 인터페이스는 작업 디스크립터 데이터 패킷을 수신하고 상기 수신된 작업 디스크립터 데이터 패킷을 초기 프로그램 카운트와 임의의 수신된 인수를 갖는 실행 스레드로 디코딩하도록 적응된다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 상호 접속 네트워크 인터페이스는 이벤트 데이터 패킷을 수신하고, 상기 수신된 이벤트 데이터 패킷을 이벤트 식별자 및 임의의 수신된 인수로 디코딩하도록 추가로 적응될 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 코어 제어 회로는 상기 상호 접속 네트워크 인터페이스에 결합된 제어 로직 및 스레드 선택 회로를 더 포함하고, 상기 제어 로직 및 스레드 선택 회로는 사용 가능한 스레드 식별자를 실행 스레드에 할당하도록 적응된다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 코어 제어 회로는 : 복수의 레지스터를 갖는 스레드 제어 메모리를 더 포함할 수 있고, 상기 복수의 레지스터는 임의의 선택된 조합으로 : 복수의 스레드 식별자를 저장하는 스레드 식별자 풀 레지스터; 스레드 상태 레지스터; 수신된 초기 프로그램 카운트를 저장하는 프로그램 카운트 레지스터; 수신된 인수를 저장하는 범용 레지스터; 펜딩(pending) 파이버 리턴 카운트 레지스터; 리턴 인수 버퍼 또는 레지스터; 리턴 인수 링크 리스트(list) 레지스터; 커스텀(custom) 원자 트랜잭션 식별자 레지스터; 이벤트 상태 레지스터; 이벤트 마스크 레지스터; 및 데이터 캐시 중 하나 이상을 포함한다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 상호 접속 네트워크 인터페이스는 상기 스레드 제어 메모리에 대한 인덱스로서 스레드 식별자를 사용하여 상기 스레드 제어 메모리에 초기 프로그램 카운트 및 임의의 수신된 인수를 갖는 실행 스레드를 저장하도록 추가로 적응될 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 코어 제어 회로는 상기 상호 접속 네트워크 인터페이스 및 상기 스레드 제어 메모리에 결합된 제어 로직 및 스레드 선택 회로를 더 포함하고, 상기 제어 로직 및 스레드 선택 회로는 사용 가능한 스레드 식별자를 실행 스레드에 할당하도록 적응된다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 코어 제어 회로는 상기 스레드 제어 메모리에 결합된 실행 큐를 더 포함할 수 있으며, 상기 실행 큐는 하나 이상의 스레드 식별자를 저장한다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 코어 제어 회로는 : 상기 실행 큐, 상기 상호 접속 네트워크 인터페이스 및 상기 스레드 제어 메모리에 결합된 제어 로직 및 스레드 선택 회로를 더 포함할 수 있고, 상기 제어 로직 및 스레드 선택 회로는 사용 가능한 스레드 식별자를 상기 실행 스레드에 할당하고, 상기 스레드 식별자를 실행 큐에 배치하고, 실행할 상기 스레드 식별자를 선택하고, 및 상기 실행 스레드에 대한 초기 프로그램 카운트를 선택하기 위한 인덱스로 상기 스레드 식별자를 사용하여 상기 스레드 제어 메모리에 액세스하도록 적응된다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 코어 제어 회로는 초기 프로그램 카운트를 수신하고 실행을 위한 대응 명령을 제공하기 위해 상기 제어 로직 및 스레드 선택 회로에 결합된 명령 캐시를 더 포함할 수 있다.
다른 대표적인 실시예에서, 상기 프로세서는 상기 코어 제어 회로의 명령 캐시에 결합된 프로세서 코어를 더 포함할 수 있고, 상기 프로세서 코어는 대응하는 명령을 실행하도록 적응된다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 코어 제어 회로는 초기 유효 상태를 상기 실행 스레드에 할당하도록 추가로 적응될 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 코어 제어 회로는 상기 프로세서 코어가 메모리 로드 명령(load instruction)을 실행한 것에 응답하여 상기 실행 스레드에 일시 중지 상태를 할당하도록 추가로 적응될 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 코어 제어 회로는 상기 프로세서 코어가 메모리 저장 명령을 실행한 것에 응답하여 상기 실행 스레드에 일시 중지 상태를 할당하도록 추가로 적응될 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 코어 제어 회로는 상기 프로세서 코어에 의한 리턴 명령의 실행에 응답하여 선택된 스레드의 실행을 종료하도록 추가로 적응될 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 코어 제어 회로는 상기 프로세서 코어에 의한 리턴 명령의 실행에 응답하여 상기 선택된 스레드의 대응하는 스레드 식별자를 상기 스레드 식별자 풀 레지스터로 리턴하도록 추가로 적응될 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 코어 제어 회로는 상기 프로세서 코어에 의한 리턴 명령의 실행에 응답하여 사기 선택된 스레드의 대응하는 스레드 식별자에 의해 인덱싱된 상기 스레드 제어 메모리의 레지스터를 클리어(clear)하도록 추가로 적응될 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 상호 접속 네트워크 인터페이스는 상기 프로세서 코어에 의한 리턴 명령의 실행에 응답하여 리턴 작업 디스크립터 패킷을 생성하도록 추가로 적응될 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 코어 제어 회로는 네트워크 응답 메모리를 더 포함할 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 네트워크 응답 메모리는 임의의 선택된 조합으로 : 메모리 요청 레지스터; 스레드 식별자 및 트랜잭션 식별자 레지스터; 요청 캐시 라인 인덱스 레지스터; 바이트 레지스터(bytes register); 및 범용 레지스터 인덱스 및 유형 레지스터 중 하나 이상을 포함할 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 상호 접속 네트워크 인터페이스는 점 대 점(point-to-point) 이벤트 데이터 메시지를 생성하도록 적응될 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 상호 접속 네트워크 인터페이스는 브로드캐스트(broadcast) 이벤트 데이터 메시지를 생성하도록 적응될 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 코어 제어 회로는 수신된 이벤트 데이터 패킷에 응답하기 위해 이벤트 마스크 레지스터에 저장된 이벤트 마스크를 사용하도록 추가로 적응될 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 코어 제어 회로는 수신된 이벤트 데이터 패킷에 대응하는 이벤트 번호를 결정하도록 추가로 적응될 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 코어 제어 회로는 대응하는 실행 스레드의 실행을 재개하기 위해 수신된 이벤트 데이터 패킷에 응답하여 스레드 식별자의 상태를 일시 중지에서 유효로 변경하도록 추가로 적응될 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 코어 제어 회로는 대응하는 실행 스레드의 실행을 재개하기 위해 수신된 이벤트 데이터 패킷의 이벤트 번호에 응답하여 스레드 식별자의 상태를 일시 중지에서 유효로 변경하도록 추가로 적응될 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 제어 로직 및 스레드 선택 회로는 대응하는 실행 스레드의 단일 명령의 실행을 위해 상기 실행 큐로부터 다음 스레드 식별자를 연속적으로 선택하도록 추가로 적응될 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 제어 로직 및 스레드 선택 회로는 각각이 대응하는 실행 스레드의 단일 명령의 실행을 위한 복수의 스레드 식별자 중 실행 큐로부터 다음 스레드 식별자의 라운드 로빈(round-robin) 선택을 수행하도록 추가로 적응될 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 제어 로직 및 스레드 선택 회로는 상기 실행 스레드가 완료될 때까지 각각이 대응하는 실행 스레드의 단일 명령의 실행을 위한 복수의 스레드 식별자 중 실행 큐로부터 다음 스레드 식별자의 라운드 로빈 선택을 수행하도록 추가로 적응될 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 제어 로직 및 스레드 선택 회로는 각각이 대응하는 실행 스레드의 단일 명령의 실행을 위한 복수의 스레드 식별자 중 실행 큐로부터 다음 스레드 식별자의 배럴(barrel) 선택을 수행하도록 추가로 적응될 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 제어 로직 및 스레드 선택 회로는 유효 상태 또는 일시 중지 상태를 스레드 식별자에 할당하도록 추가로 적응될 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 제어 로직 및 스레드 선택 회로는 스레드 식별자에 우선 순위 상태(priority status)를 할당하도록 추가로 적응될 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 제어 로직 및 스레드 선택 회로는 대응하는 명령의 실행에 이어서, 할당된 유효 상태 및 할당된 우선 순위를 이용하여 상기 대응하는 스레드 식별자를 상기 실행 큐에 리턴하도록 추가로 적응될 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 코어 제어 회로는 상기 프로세서 코어에 결합된 네트워크 커맨드 큐를 더 포함할 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 상호 접속 네트워크 인터페이스는 : 입력 큐; 상기 입력 큐, 상기 제어 로직 및 스레드 선택 회로 및 상기 스레드 제어 메모리에 결합된 패킷 디코더 회로; 출력 큐; 및 상기 출력 큐, 상기 네트워크 응답 메모리 및 상기 네트워크 커맨드 큐에 결합된 패킷 인코더 회로를 포함할 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 실행 큐는 제 1 우선 순위 큐; 및 제 2 우선 순위 큐를 더 포함할 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 제어 로직 및 스레드 선택 회로는 : 상기 실행 큐에 결합된 스레드 선택 제어 회로부를 더 포함할 수 있고, 상기 스레드 선택 제어 회로부는 제 1 빈도로 제 1 우선 순위 큐로부터 스레드 식별자를 선택하고, 제 2 빈도에서 제 2 우선 순위 큐로부터 상기 스레드 식별자를 선택하도록 적응되고, 상기 제 2 빈도는 제 1 빈도보다 낮다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 스레드 선택 제어 회로부는 상기 제 1 우선 순위 큐로부터 상기 스레드 식별자의 선택으로부터 스킵 카운트(skip count)로 제 2 빈도를 결정하도록 적응될 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 코어 제어 회로는 상기 제 1 상호 접속 네트워크를 통한 액세스 크기를 제어하도록 적응된 데이터 경로 제어 회로부를 더 포함할 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 코어 제어 회로는 시간 평균 사용 레벨에 응답하여 메모리 로드 액세스 크기를 증가 또는 감소 시키도록 적응된 데이터 경로 제어 회로부를 더 포함할 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 코어 제어 회로는 시간 평균 사용 레벨에 응답하여 메모리 저장 액세스 크기를 증가 또는 감소 시키도록 적응된 데이터 경로 제어 회로부를 더 포함할 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 제어 로직 및 스레드 선택 회로는 상기 데이터 캐시의 캐시 라인 경계에 대응하도록 메모리 로드 액세스 요청의 크기를 증가시키도록 추가로 적응될 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 코어 제어 회로는 호스트 프로세서에 대한 하나 이상의 시스템 호출을 생성하도록 구성된 시스템 호출 회로부를 더 포함할 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 시스템 호출 회로부는 임의의 미리 결정된 시간 기간에서 다수의 시스템 호출을 변조하기 위해 미리 결정된 크레딧 카운트(credit count)를 저장하는 복수의 시스템 호출 크레딧 레지스터를 더 포함할 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 코어 제어 회로는 호스트 프로세서로부터의 요청에 응답하여, 스레드 상태를 모니터링하기 위해 선택된 스레드 식별자에 대응하는 스레드 제어 메모리로부터 모든 데이터를 복사 및 송신하기 위해 상호 접속 네트워크 인터페이스에 대한 커맨드를 커맨드 큐에 생성하도록 추가로 적응될 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 프로세서 코어는 하나 이상의 호출 작업 디스크립터 패킷을 다른 프로세서 코어 또는 하이브리드 스레딩 패브릭 회로에 생성하기 위해 상호 접속 네트워크 인터페이스에 대한 하나 이상의 커맨드를 커맨드 큐에 생성하도록 파이버 생성 명령을 실행하도록 적응될 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 코어 제어 회로는 상기 프로세서 코어에 의한 파이버 생성 명령의 실행에 응답하여, 상기 범용 레지스터 또는 리턴 인수 레지스터에 미리 결정된 양의 메모리 공간을 리저브하도록 추가로 적응 될 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 다른 프로세서 코어 또는 하이브리드 스레딩 패브릭에 대한 하나 이상의 호출 작업 디스크립터 패킷의 생성에 응답하여, 상기 코어 제어 회로는 스레드 리턴 카운트를 상기 스레드 리턴 레지스터에 저장하도록 적응될 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 리턴 데이터 패킷의 수신에 응답하여, 상기 코어 제어 회로는 상기 스레드 리턴 레지스터에 저장된 스레드 리턴 카운트를 감분(decrement)시키도록 적응될 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 스레드 리턴 레지스터의 스레드 리턴 카운트가 0으로 감분된 것에 응답하여, 상기 코어 제어 회로는 생성된 파이버 또는 스레드의 완료를 위한 스레드 리턴 명령의 후속 실행을 위해 대응하는 스레드 식별자에 대한 유효 상태로 일시 중지된 상태를 변경하도록 적응될 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 프로세서 코어는 대기 또는 비대기(nonwaiting) 파이버 조인(join) 명령을 실행하도록 적응될 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 프로세서 코어는 파이버 조인 올(all) 명령을 실행하도록 적응될 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 프로세서 코어는 메모리로부터 수신된 데이터의 저장을 위한 범용 레지스터를 지정하기 위해 캐시되지 않은(non-cached) 판독 또는 로드 명령을 실행하도록 적응될 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 프로세서 코어는 메모리에 저장하기 위해 범용 레지스터에 데이터를 지정하도록 캐시되지 않은 기록 또는 저장 명령을 실행하도록 적응될 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 코어 제어 회로는 임의의 로드에 트랜잭션 식별자를 할당하거나 메모리에 요청을 저장하고, 상기 트랜잭션 식별자를 스레드 식별자와 상관(correlate) 시키도록 적응될 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 프로세서 코어는 대응하는 스레드 식별자를 갖는 실행 스레드에 제 1 우선 순위를 할당하기 위해 제 1 스레드 우선 순위 명령을 실행하도록 적응될 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 프로세서 코어는 대응하는 스레드 식별자를 갖는 실행 스레드에 제 2 우선 순위를 할당하기 위해 제 2 스레드 우선 순위 명령을 실행하도록 적응될 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 프로세서 코어는 커스텀 원자 동작의 실행 스레드를 완료하기 위해 커스텀 원자 리턴 명령을 실행하도록 적응될 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 메모리 제어기와 함께, 상기 프로세서 코어는 부동 소수점(floating point) 원자 메모리 동작을 실행하도록 적응될 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 메모리 제어기와 함께, 상기 프로세서 코어는 커스텀 원자 메모리 동작을 실행하도록 적응될 수 있다.
명령의 자체 스케줄링 실행 방법이 또한 개시되며, 대표적인 방법 실시예는 : 작업 디스크립터 데이터 패킷을 수신하는 단계; 및 수신된 작업 디스크립터 데이터 패킷에 응답하여 실행을 위한 명령을 자동으로 스케줄링하는 단계를 포함한다.
명령의 자체 스케줄링 실행을 위한 다른 방법이 또한 개시되며, 대표적인 방법 실시예는 이벤트 데이터 패킷을 수신하는 단계; 및 수신된 이벤트 데이터 패킷에 응답하여 실행을 위한 명령을 자동으로 스케줄링하는 단계를 포함한다.
제 2 프로세싱 엘리먼트에 의한 성능을 위해 복수의 실행 스레드를 생성하는 제 1 프로세싱 엘리먼트의 방법이 또한 개시되며, 대표적인 방법 실시예는 : 파이버 생성 명령을 실행하는 단계; 및 파이버 생성 명령의 실행에 응답하여, 복수의 실행 스레드의 실행을 위해 제 2 프로세싱 엘리먼트에 하나 이상의 작업 디스크립터 데이터 패킷을 생성하는 단계를 포함한다.
제 2 프로세싱 엘리먼트에 의한 성능을 위해 복수의 실행 스레드를 생성하는 제 1 프로세싱 엘리먼트의 방법이 또한 개시되며, 대표적인 방법 실시예는 : 파이버 생성 명령을 실행하는 단계; 및 파이버 생성 명령의 실행에 응답하여, 리턴 인수를 저장하기 위해 스레드 제어 메모리에 미리 결정된 양의 메모리 공간을 리저브하는 단계 및 복수의 실행 스레드의 실행을 위해 제 2 프로세싱 엘리먼트에 하나 이상의 작업 디스크립터 데이터 패킷을 생성하는 단계를 포함한다.
명령의 자체 스케줄링 실행하는 방법이 또한 개시되고, 대표적인 방법 실시예는 : 작업 디스크립터 데이터 패킷을 수신하는 단계; 수신된 작업 디스크립터 데이터 패킷을 초기 프로그램 카운트 및 임의의 수신된 인수를 갖는 실행 스레드로 디코딩하는 단계; 사용 가능한 스레드 식별자를 실행 스레드에 할당하는 단계; 실행 스레드의 실행을 위해 상기 스레드 식별자를 자동으로 큐잉하는 단계(queuing); 및 상기 실행 스레드 실행을 위한 스레드 식별자를 주기적으로 선택하는 단계를 포함한다.
명령의 자체 스케줄링 실행하는 다른 방법이 또한 개시되고, 대표적인 방법 실시예는 : 작업 디스크립터 데이터 패킷을 수신하는 단계; 수신된 작업 디스크립터 데이터 패킷을 초기 프로그램 카운트 및 임의의 수신된 인수를 갖는 실행 스레드로 디코딩하는 단계; 사용 가능한 스레드 식별자를 실행 스레드에 할당하는 단계; 유효 상태일 때 상기 실행 스레드의 실행을 위해 스레드 식별자를 자동으로 큐잉하는 단계; 및 유효 상태가 유지되는 한 상기 실행 스레드가 완료될 때까지 상기 실행 스레드의 명령을 실행을 위해 상기 스레드 식별자를 주기적으로 선택하는 단계를 포함한다.
명령의 자체 스케줄링 실행하는 다른 방법이 또한 개시되고, 대표적인 방법 실시예는 : 작업 디스크립터 데이터 패킷을 수신하는 단계; 수신된 작업 디스크립터 데이터 패킷을 초기 프로그램 카운트 및 임의의 수신된 인수를 갖는 실행 스레드로 디코딩하는 단계; 사용 가능한 스레드 식별자를 실행 스레드에 할당하는 단계; 유효 상태일 때 상기 실행 스레드의 실행을 위해 실행 큐에 스레드 식별자를 자동으로 큐잉하는 단계; 유효 상태가 유지되는 한 실행 스레드의 명령을 실행하기 위한 스레드 식별자를 주기적으로 선택하는 단계; 및 일시 중지 상태일 때 상기 스레드 식별자를 상기 실행 큐에 리턴하지 않음으로써 상기 스레드 실행을 일시 중지하는 단계를 포함한다.
명령의 자체 스케줄링 실행하는 다른 방법이 또한 개시되고, 대표적인 방법 실시예는 : 작업 디스크립터 데이터 패킷을 수신하는 단계; 수신된 작업 디스크립터 데이터 패킷을 초기 프로그램 카운트 및 임의의 수신된 인수를 갖는 실행 스레드로 디코딩하는 단계; 스레드 제어 메모리에 초기 프로그램 카운트 및 임의의 수신된 인수를 저장하는 단계; 사용 가능한 스레드 식별자를 상기 실행 스레드에 할당하는 단계; 유효 상태일 때 상기 실행 스레드의 실행을 위해 상기 스레드 식별자를 자동으로 큐잉하는 단계; 상기 실행 스레드에 대한 초기 프로그램 카운트를 선택하기 위한 인덱스로 상기 스레드 식별자를 사용하여 상기 스레드 제어 메모리에 액세스하는 단계; 및 유효 상태가 유지되는 한, 상기 실행 스레드가 완료 될 때까지 상기 실행 스레드의 명령을 실행하기 위해 상기 스레드 식별자를 주기적으로 선택하는 단계를 포함한다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 : 이벤트 데이터 패킷을 수신하는 단계; 및 수신된 이벤트 데이터 패킷을 이벤트 식별자 및 임의의 수신된 인수로 디코딩하는 단계를 더 포함한다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 상기 실행 스레드에 초기 유효 상태를 할당하는 단계를 더 포함할 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 메모리 로드 명령의 실행에 응답하여 상기 실행 스레드에 일시 중지 상태를 할당하는 단계를 더 포함할 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 메모리 저장 명령의 실행에 응답하여 상기 실행 스레드에 일시 중지 상태를 할당하는 단계를 더 포함할 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 리턴 명령의 실행에 응답하여 선택된 스레드의 실행을 종료하는 단계를 더 포함할 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 리턴 명령의 실행에 응답하여 선택된 스레드의 대응하는 스레드 식별자를 상기 스레드 식별자 풀(pool)로 리턴하는 단계를 더 포함할 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 리턴 명령의 실행에 응답하여 상기 선택된 스레드의 대응하는 스레드 식별자에 의해 인덱싱된 스레드 제어 메모리의 레지스터를 클리어하는 단계를 더 포함할 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 리턴 명령의 실행에 응답하여 리턴 작업 디스크립터 패킷을 생성하는 단계를 더 포함할 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 방법은 점 대 점 이벤트 데이터 메시지를 생성하는 단계를 더 포함할 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 브로드캐스트 이벤트 데이터 메시지를 생성하는 단계를 더 포함할 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 수신된 이벤트 데이터 패킷에 응답하기 위해 이벤트 마스크를 사용하는 단계를 더 포함할 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 수신된 이벤트 데이터 패킷에 대응하는 이벤트 번호를 결정하는 단계를 더 포함할 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 대응하는 실행 스레드의 실행을 재개하기 위해 수신된 이벤트 데이터 패킷에 응답하여 상기 스레드 식별자의 상태를 일시 중지에서 유효로 변경하는 단계를 더 포함할 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 대응하는 실행 스레드의 실행을 재개하기 위해 수신된 이벤트 데이터 패킷의 이벤트 번호에 응답하여 상기 스레드 식별자의 상태를 일시 중지에서 유효로 변경하는 단계를 더 포함할 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 대응하는 실행 스레드의 단일 명령의 실행을 위해 실행 큐로부터 다음 스레드 식별자를 연속적으로 선택하는 단계를 더 포함할 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 : 각각이 대응하는 실행 스레드의 단일 명령의 실행을 위한 복수의 스레드 식별자 중 실행 큐로부터 다음 스레드 식별자의 라운드 로빈 선택을 수행하는 단계를 더 포함할 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 : 상기 실행 스레드의 완료때 까지 각각이 대응하는 실행 스레드의 단일 명령의 실행을 위한 복수의 스레드 식별자 중 실행 큐로부터 다음 스레드 식별자의 라운드 로빈 선택을 수행하는 단계를 더 포함할 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 : 각각이 대응하는 실행 스레드의 단일 명령의 실행을 위한 복수의 스레드 식별자 중 실행 큐로부터 다음 스레드 식별자의 배럴 선택을 수행하는 단계를 더 포함할 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 스레드 식별자에 유효 상태 또는 일시 중지 상태를 할당하는 단계를 더 포함할 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 스레드 식별자에 우선 순위 상태를 할당하는 단계를 더 포함할 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 방법은 대응하는 명령의 실행에 이어, 할당된 유효 상태 및 할당된 우선 순위를 이용하여 대응하는 스레드 식별자를 실행 큐에 리턴하는 단계를 더 포함할 수 있다.
다양한 대표적인 실시예들 중 임의의 것에 대해, 상기 방법은 : 제 1 빈도에서 제 1 우선 순위 큐로부터 스레드 식별자를 선택하는 단계, 제 2 빈도에서 제 2 우선 순위 큐로부터 스레드 식별자를 선택하는 단계를 더 포함할 수 있고, 제 2 빈도는 제 1 빈도보다 낮다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 제 1 우선 순위 큐로부터 스레드 식별자의 선택으로부터 스킵 카운트로 제 2 빈도를 결정하는 단계를 더 포함할 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 데이터 경로 액세스 크기를 제어하는 단계를 더 포함할 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 시간 평균 사용 레벨에 응답하여 메모리 로드 액세스 크기를 증가 또는 감소시키는 단계를 더 포함할 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 시간 평균 사용 레벨에 응답하여 메모리 저장 액세스 크기를 증가 또는 감소시키는 단계를 더 포함할 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 데이터 캐시의 캐시 라인 경계에 대응하도록 메모리 로드 액세스 요청의 크기를 증가시키는 단계를 더 포함할 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 호스트 프로세서에 대한 하나 이상의 시스템 호출을 생성하는 단계를 더 포함할 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 미리 결정된 크레딧 카운트를 사용하여, 임의의 미리 결정된 시간 기간에 다수의 시스템 호출을 변조하는 단계를 더 포함할 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 호스트 프로세서로부터의 요청에 응답하여, 스레드 상태를 모니터링하기 위해 선택된 스레드 식별자에 대응하는 스레드 제어 메모리로부터 모든 데이터를 복사 및 송신하는 단계를 더 포함할 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 : 다른 프로세서 코어 또는 하이브리드 스레딩 패브릭 회로에 대한 하나 이상의 호출 작업 디스크립터 패킷을 생성하기 위한 하나 이상의 명령을 생성하기 위해 파이버 생성 명령을 실행하는 단계를 더 포함할 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 파이버 생성 명령의 실행에 응답하여, 임의의 리턴 인수를 저장하기 위해 미리 결정된 양의 메모리 공간을 리저브하는 단계를 더 포함할 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 하나 이상의 호출 작업 디스크립터 패킷의 생성에 응답하여, 스레드 리턴 레지스터에 스레드 리턴 카운트를 저장하는 단계를 더 포함할 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 리턴 데이터 패킷의 수신에 응답하여, 상기 스레드 리턴 레지스터에 저장된 스레드 리턴 카운트를 감분시키는 단계를 더 포함할 수 있다. 다양한 대표적인 실시예들 중 임의의 것에 대해, 상기 방법은 : 상기 스레드 리턴 레지스터의 스레드 리턴 카운트가 0으로 감분된 것에 응답하여, 생성된 파이버 또는 스레드의 완료를 위한 스레드 리턴 명령의 후속 실행을 위해 대응하는 스레드 식별자에 대한 유효 상태로 일시 중지 상태를 변경하는 단계를 더 포함할 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 대기 또는 비대기 파이버 조인 명령을 실행하는 단계를 더 포함할 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 파이버 조인 올 명령을 실행하는 단계를 더 포함할 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 메모리로부터 수신된 데이터의 저장을 위한 범용 레지스터를 지정하기 위해 캐시되지 않은 판독 또는 로드 명령을 실행하는 단계를 더 포함할 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 메모리에 저장하기 위해 범용 레지스터에 데이터를 지정하도록 캐시되지 않은 기록 또는 저장 명령을 실행하는 단계를 더 포함할 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 임의의 로드에 트랜잭션 식별자를 할당하거나 메모리에 요청을 저장하고, 상기 트랜잭션 식별자를 스레드 식별자와 상관 시키는 단계를 더 포함할 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 대응하는 스레드 식별자를 갖는 실행 스레드에 제 1 우선 순위를 할당하기 위해 제 1 스레드 우선 순위 명령을 실행하는 단계를 더 포함할 수 있다. 다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 대응하는 스레드 식별자를 갖는 실행 스레드에 제 2 우선 순위를 할당하기 위해 제 2 스레드 우선 순위 명령을 실행하는 단계를 더 포함할 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 커스텀 원자 동작의 실행 스레드를 완료하기 위해 커스텀 원자 리컨 명령을 실행하는 단계를 더 포함할 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 부동 소수점 원자 메모리 동작을 실행하는 단계를 더 포함할 수 있다.
다양한 대표적인 실시예 중 임의의 것에 대해, 상기 방법은 커스텀 원자 메모리 동작을 실행하는 단계를 더 포함할 수 있다.
본 발명의 많은 다른 장점 및 특징은 본 발명에 대한 이하의 상세한 설명 및 그 실시예, 청구 범위 및 첨부 도면으로부터 쉽게 명백해질 것이다.
본 발명의 목적, 특징 및 장점은 첨부된 도면과 함께 고려될 때 이하의 개시를 참조하면 더 쉽게 인식될 것이고, 여기서, 유사한 도면 번호는 여러 도면에서 동일한 컴포넌트를 식별하기 위해 사용되며, 알파벳 문자를 갖는 도면 번호는 여러 도면에서 선택된 컴포넌트 실시예의 추가 유형, 인스턴스화 또는 변형을 식별하기 위해 사용되며, 여기서 :
도면 (또는 "도") 1은 하이브리드 컴퓨팅 시스템의 대표적인 제 1 실시예의 블록도이다.
도면 (또는 "도") 2는 하이브리드 컴퓨팅 시스템의 대표적인 제 2 실시예의 블록도이다.
도면 (또는 "도") 3은 하이브리드 컴퓨팅 시스템의 대표적인 제 3 실시예의 블록도이다.
도면 (또는 "도") 4는 하이브리드 스레딩 패브릭 회로 클러스터(hybrid threading fabric circuit cluster)의 대표적인 실시예의 일부에 대한 상위 레벨 블록도이다.
도면 (또는 "도") 5는 하이브리드 스레딩 프로세서 (300)의 대표적인 실시예의 상위 레벨 블록도이다.
도면 (또는 "도") 6은 하이브리드 스레딩 프로세서의 스레드 메모리의 대표적인 실시예의 상세 블록도이다.
도면 (또는 "도") 7은 하이브리드 스레딩 프로세서의 네트워크 응답 메모리의 대표적인 실시예의 상세 블록도이다.
도면 (또는 "도") 8은 하이브리드 스레딩 프로세서의 대표적인 실시예의 상세 블록도이다.
도면들 (또는 "도들") 9a 및 9b (총괄적으로 도 9)는 하이브리드 스레딩 프로세서를 위한 자체 스케줄링 및 스레드 제어를 위한 방법의 대표적인 실시예의 흐름도이다.
도면 (또는 "도") 10은 하이브리드 스레딩 프로세서의 스레드 선택 회로부 및 제어 로직의 스레드 선택 제어 회로부의 대표적인 실시예의 상세 블록도이다.
도면 (또는 "도") 11은 제 1 상호 접속 네트워크 및 대표적인 데이터 패킷의 일부의 대표적인 실시예의 블록도이다.
도면 (또는 "도") 12는 하이브리드 스레딩 프로세서의 데이터 경로 제어 회로부의 대표적인 실시예의 상세 블록도이다.
도면 (또는 "도") 13은 하이브리드 스레딩 프로세서 및 호스트 인터페이스 회로부의 시스템 호출 회로부의 대표적인 실시예의 상세 블록도이다.
본 발명은 많은 다른 형태의 실시예가 가능하지만, 도면에 도시되어 있으며 본 출원에 구체적인 예시적인 실시예를 상세히 설명하고, 본 개시 내용은 본 발명의 원리의 예시로서 고려되어야 하며 본 발명을 예시된 특정 실시예로 한정하려는 의도가 아니라는 점을 이해해야 한다. 이와 관련하여, 본 발명과 일치하는 적어도 하나의 실시예를 상세히 설명하기 전에, 본 발명은 구성의 세부 사항 및 상기 및 아래에 설명된 컴포넌트의 배열, 도면에 예시되거나 실시예에 설명된 그 애플리케이션에 한정되지 않는다는 것을 이해해야 한다. 본 발명에 따른 방법 및 장치는 다른 실시예가 가능하고 다양한 방식으로 실행 및 수행될 수 있다. 또한, 본 출원에 사용된 어법 및 용어 뿐만 아니라 이하에 포함된 요약은 설명을 위한 것이며 한정하는 것으로 간주되어서는 안 된다는 것을 이해해야 한다.
도면들 1, 2 및 3은 하이브리드 컴퓨팅 시스템 (100A, 100B, 100C) (총괄적으로 시스템 (100)이라고 함)의 대표적인 제 1, 제 2 및 제 3 실시예의 블록도이다. 도 4는 제 2 상호 접속 네트워크 (250)를 갖는 하이브리드 스레딩 패브릭 회로 클러스터 (205)의 대표적인 실시예의 일부의 상위 레벨 블록도이다. 도 5는 하이브리드 스레딩 프로세서 ("HTP" : hybrid threading processor) (300)의 대표적인 실시예의 상위 레벨 블록도이다. 도 6은 HTP (300)의 스레드 메모리 (320) (또한, 스레드 제어 메모리 (320) 또는 스레드 컨텍스트 메모리 (320)라고도 칭함)의 대표적인 실시예의 상세 블록도이다. 도 7은 HTP (300)의 네트워크 응답 메모리 (325)의 대표적인 실시예의 상세 블록도이다. 도 8은 HTP (300)의 대표적인 실시예의 상세 블록도이다. 도 9는 HTP (300)에 대한 자체 스케줄링 및 스레드 제어를 위한 방법의 대표적인 실시예의 흐름도이다.
도 1-9를 참조하면, 하이브리드 컴퓨팅 시스템 (100)은 제 1 상호 접속 네트워크 (150)를 통해 하나 이상의 하이브리드 스레딩 패브릭 ("HTF" : hybrid threading fabric) 회로 (200)에 결합되는 하이브리드 스레딩 프로세서 ("HTP" : hybrid threading processor) (300)를 포함한다. 본 명세서에서 사용되는 용어 "패브릭(fabric)"은 컴퓨팅 회로의 어레이를 의미하고 포함하고, 이는 이 경우 재구성 가능한 컴퓨팅 회로인 것을 이해해야 한다. 도 1, 2 및 3은 비교적 크고 작은 시스템 (100)을 형성하는 추가 컴포넌트를 포함하는 상이한 시스템 (100A, 100B, 100C) 배열을 도시하며, 이들 중 임의의 것 및 모두는 본 개시 내용의 범위 내에 있다. 도 1 및 2에 도시 된 바와 같이, 이들 각각은 예를 들어 제한 없이, 하이브리드 컴퓨팅 시스템 (100A, 100B)과 같은 시스템 온 칩 ("SOC" : system-on-a-chip)에 적합한 배열일 수 있으며, 예시된 바와 같이 다양한 조합으로, 또한 옵션으로, 메모리 (125) (또한 별도의 집적 회로일 수 있음)에 결합될 수 있는 메모리 제어기(120), 다양한 통신 인터페이스 (130) (PCIe 통신 인터페이스와 같은) 중 임의의 것, 하나 이상의 호스트 프로세서 (들) (110) 및 호스트 인터페이스 ("HIF" : host interface) (115)를 포함할 수 있다. 예를 들어 제한없이 각각이 공통 기판 (101) 상의 "칩렛(chiplet)"구성에 적합한 배열일 수 있는 도 3에 도시된 바와 같이, 하이브리드 컴퓨팅 시스템 (100C)은 또한 옵션으로 이러한 다른 컴포넌트를 갖거나 갖지 않는 통신 인터페이스 (130)를 포함할 수 있다. 이러한 모든 배열은 본 개시의 범위 내에 있으며, 본 출원에서 총괄적으로 시스템 (100)으로 지칭된다. 이들 하이브리드 컴퓨팅 시스템 (100) 중 임의의 것은 또한 단일 운영 체제 ("OS" : operating system) 하에서 동작하는 "노드(node)"로 간주될 수 있고, 다른 그러한 로컬 및 원격 노드에도 결합될 수 있다.
본 출원에서 사용되는 하이브리드 스레딩은 서로 다른 이종 유형의 프로세싱 회로 (하드웨어)에 걸쳐 예컨대, HTF 회로 (200) (재구성 가능한 컴퓨팅 패브릭)에 걸쳐 및 프로세서 예컨대, HTP 300 또는 다른 유형의 RISC-V 프로세서에 걸쳐 다수의 파이버 및 계산 스레드를 생성하는 능력을 의미한다. 하이브리드 스레딩은 또한 컴퓨팅을 데이터가 있는 곳으로 이동하기 위해 작업 스레드가 하나의 컴퓨팅 엘리먼트로부터 다음 컴퓨팅 엘리먼트로 전환하는 프로그래밍 언어/스타일을 지칭하며, 이는 대표적인 실시예에서도 구현된다. 호스트 프로세서 (110)는 전형적으로 하이브리드 컴퓨팅 시스템 (100) 내에 내장될 수 있거나 PCIe 기반 인터페이스와 같은 통신 인터페이스 (130)를 통해 하이브리드 컴퓨팅 시스템 (100)에 결합된 외부 호스트 프로세서 일 수 있는 멀티 코어 프로세서이다. HTP (300) 및 하나 이상의 호스트 프로세서 (들) (110)와 같은 이들 프로세서는 이하에서 더 상세히 설명된다.
메모리 제어기 (120)는 전자 분야에 공지되거나 또는 공지된 바와 같이 구현될 수 있다. 대안적으로, 대표적인 실시예에서, 메모리 제어기 (120)는 관련 애플리케이션에서 설명된 바와 같이 구현될 수 있다. 제 1 메모리 (125)는 또한 전자 기술 분야에 공지되거나 공지된 바와 같이 구현 될 수 있으며, 이하에서 더 상세히 설명된다.
또한 대표적인 실시예에서 HTP (300)은 이하에서 더 상세히 논의되는 바와 같이, 코어 제어 메모리 (315)로 지칭되는 하나 이상의 제 2 메모리 (315) 및 하나 이상의 코어 제어 회로 (310)와 함께 확장 명령 세트를 갖는 하나 이상의 프로세서 코어 (305)를 갖는 RISC-V ISA 기반 멀티 스레드 프로세서이다. 일반적으로 HTP (300)은 하이 클럭 당 명령 속도를 유지하기 위해 배럴 스타일, 라운드 로빈 순간 스레드 스위칭을 제공한다.
본 출원의 목적을 위해 HIF (115)는 호스트 프로세서 (110)가 작업을 HTP (300) 및 HTF 회로 (200)로 발송하고, HTP (300)가 작업을 HTF 회로 (200)로 발송하는 것을 제공하며, 둘 모두는 제 1 상호 접속 네트워크 (150)를 통해 "작업 디스크립터 패킷(work descriptor packets)"으로 송신된다. HTP (300) 및 HTF 회로 (200)에서 작업을 시작하고 종료하기 위해 통합 메커니즘이 제공된다 : 호출 작업 디스크립터 패킷은 HTP (300) 및 HTF 회로 (200)에서 작업을 시작하는데 사용되며, 리턴 작업 디스크립터 패킷은 HTP (300) 및 HTF 회로 (200)에서 작업을 종료하는 데 사용된다. HIF (115)는 디스패치 회로 및 큐 (약칭 "디스패치 큐(dispatch queue)"(105))를 포함하며, 이는 또한 HTF 회로 (200) 및/또는 HTP (300)에 제공된 부하 및 자원(resource) 가용성을 모니터링하기 위한 관리 기능을 제공한다. 자원이 HTF 회로 (200) 및/또는 HTP (300)에서 이용 가능할 때, 디스패치 큐 (105)는 가장 적게 로딩된 HTF 회로 (200) 및/또는 HTP (300) 자원을 결정한다. 동일하거나 유사한 작업 부하를 갖는 다수의 HTF 회로 클러스터 (205)의 경우, 가능한 경우 (커널 구성을 로드하거나 재로드할 필요가 없도록) 현재 동일한 커널을 실행중인 HTF 회로 클러스터 (205)를 선택한다. HIF (115)의 유사한 기능은 예를 들어, 특히 별도의 HIF (115)를 포함하지 않을 수 있는 시스템 (100) 배열에 대해 HTP (300)에 또한 포함될 수 있다. 다른 HIF(115) 기능은 이하에서 더 상세히 설명된다. HIF (115)는 예를 들어, 레지스터를 갖는 하나 이상의 상태 기계(state machine) (FIFO, 큐 등을 형성함)과 같이 전자 기술 분야에서 공지되거나 공지된 대로 구현될 수 있다.
제 1 상호 접속 네트워크 (150)는 HTF 회로 (200), 하이브리드 스레딩 프로세서 (300) 및 다른 옵션 컴포넌트들 예컨대, 메모리 제어기 (120), 통신 인터페이스 (130) 및 호스트 프로세서(110) 사이에서 및 그것들 중에서 데이터 패킷 라우팅을 제공하는 패킷 기반 통신 네트워크이다. 제 1 상호 접속 네트워크 (150)는 전형적으로 시스템 (100) 실시예에 따라 폴딩된(floding) clos 구성을 갖는 복수의 크로스바 스위치(crossbar switch) 및 전형적으로 추가 연결을 위한 메시 네트워크(mesh network)로 구현된다. 본 개시의 목적을 위해, 제 1 상호 접속 네트워크 (150)는 비동기 스위칭 패브릭 ("AF" : asynchronous switching fabric)의 일부를 형성하는데, 이는 데이터 패킷이 다양한 경로 중 임의의 경로를 따라 라우팅될 수 있어서 어드레싱된 목적지에서 임의의 선택된 데이터 패킷의 도착이 라우팅에 따라 복수의 상이한 시간 중 임의의 시간에 발생할 수 있다는 것을 의미한다. 이것은 이하에서 더 상세히 논의되는 제 2 상호 접속 네트워크 (250)의 동기식 메시 통신 네트워크 (275)와 대조된다. 제 1 상호 접속 네트워크 (150)의 양태는 도 10 및 11을 참조하여 이하에서 더 상세히 논의된다.
차례로, HTF 회로 (200)는 전형적으로 복수의 HTF 회로 클러스터 (205)를 포함하고, 각각의 HTF 회로 클러스터 (205)는 데이터 패킷 통신을 위해 제 1 상호 접속 네트워크 (150)에 결합된다. 각각의 HTF 회로 클러스터 (205)는 다른 HTF 회로 클러스터 (205) 각각과 독립적으로 동작할 수 있다. 차례로, 각각의 HTF 회로 클러스터 (205)는 여기서 "타일(tile)"(210)로 동등하게 지칭되는 복수의 HTF 재구성 가능한 컴퓨팅 회로 (210)의 어레이 및 제 2 상호 접속 네트워크 (250)를 포함한다. 타일 (210)은 관련 애플리케이션에서 논의되는 2 개의 상이한 유형의 네트워크를 포함하는 제 2 상호 접속 네트워크 (250)에 내장되거나 다른 방식으로 결합된다. 개요로서, HTF 회로 (200)는 복수의 상이한 컴퓨팅 동작의 실행을 위해 상호 접속된 컴퓨팅 타일 (210)로 구성된 코스 그레인 재구성 가능한 컴퓨팅 패브릭(course grained reconfigurable compute fabric)이다.
HTP (300)는 희소 데이터 세트 (즉, 최소한의 데이터 재사용을 갖는 애플리케이션)에서 동작하는 높은 수준의 병렬 처리를 갖는 애플리케이션에서 잘 수행되도록 디자인된 배럴 스타일의 멀티 스레드 프로세서이다. HTP(300)은 오픈 소스 RISC-V 프로세서를 기반으로 하며 사용자 모드에서 실행된다. HTP (300)는 더 많은 RISC-V 사용자 모드 명령과 더불어 스레드 관리, 다른 HTP (300), HTF 회로 (200) 및 하나 이상의 호스트 프로세서 (110)로/로부터의 이벤트 송수신, 메모리(125)에 대한 효율적인 액세스를 위한 명령을 허용하는 커스텀 명령 세트를 포함한다.
프로세서 코어 (305)는 코어 제어 메모리 (315)의 일부로서 예시된 데이터 캐시 (346)와 같은 관련 캐시 메모리를 갖거나, 프로세서 코어 (305) 내부에 배열되고 /되거나 내부에 포함될 수 있다 (별도로 예시되지 않음). 이러한 캐시 (346)는 전형적으로 재사용될 데이터를 저장하기 위해 사용되어, 데이터가 캐시로부터 페치(fetch)될 수 있고, 메모리 (125)에 대한 메모리 로드 동작이 필요하지 않다. 그러나, 많은 애플리케이션은 매우 적은 데이터를 재사용하고, 메모리 (125)에 대한 하나 이상의 메모리 로드 동작은 전형적으로 해당 애플리케이션에 필요하다. 해당 데이터가 재사용되지 않기 때문에, 대표적인 실시예에서, 프로세서 코어 (305)와 관련된 그러한 캐시 (346)에 홀딩된 데이터는 메모리 로드 동작 동안 메모리 (125)로부터 페치된 데이터에 의해 축출되거나 덮어 쓰이지(overwrite) 않을 것이고, 이하에서 더 상세히 논의되지만 잠재적인 재사용을 위해 캐시에 남아 있는다.
이와 같이, 희소 데이터 세트는 전형적으로 불량한 캐시 적중률(cache hit rate)을 야기한다. HTP 프로세서 코어 (305) 당 많은 스레드를 갖는 HTP (300)는 다른 스레드가 명령을 계속 실행하는 동안 일부 스레드가 메모리 (125)로부터 응답을 대기하는 것을 허용한다. 이러한 컴퓨팅 스타일은 메모리(125)에 대한 레이턴시에 내성이 있고 클럭 당 고도의 지속적으로 실행되는 명령을 허용한다. 이벤트 메커니즘은 많은 HTP 코어 (305)로부터의 스레드가 효율적인 방식으로 통신할 수 있게 한다. 스레드는 메모리 (125) 응답 또는 이벤트 메시지를 대기하는 동안 명령 실행을 일시 중지하여 다른 스레드가 명령 실행 자원을 사용할 수 있도록 한다. HTP(300)은 자체 스케줄링 및 이벤트 드라이빙되어 스레드를 효율적으로 생성, 파기 및 다른 스레드와 통신하게 한다.
작업 디스크립터 패킷은 HTP (300) 및 HTF 회로 (200)에서 작업을 시작하기 위해 사용된다. HTP (300)에 의한 작업 디스크립터 패킷 수신은 하드웨어 기반 자체 스케줄링 및 메인 메모리 (125)에 대한 추가 액세스의 요구 없이 HTP(300)에서 실행 스레드로 지칭되는 관련 기능 또는 작업의 후속 실행을 트리거하는 "이벤트(event)"를 구성한다. 스레드가 시작되면, 스레드 리턴 명령이 실행될 때까지 명령을 실행한다. 스레드 리턴 명령은 리턴 작업 디스크립터 패킷을 원래 호출자에게 발송한다.
본 개시의 목적을 위해, 상위 수준 또는 일반적인 수준에서, 작업 디스크립터 패킷은 스레드 실행을 시작하기 위해 저장된 명령 (명령 캐시 (340)에 저장됨)의 위치에 대한 프로그램 카운트 (예를 들어, 64 비트 어드레스)와 같은 HTP (300)에 대한 스레드 컨텍스트를 초기화하는 데 필요한 정보, 및 스레드 실행에 사용될 인수(argument) 또는 기타 정보를 획득하기 위한 제 1 메모리 (125)의 임의의 인수 또는 어드레스, 및 예를 들어 제한없이 계산 결과를 송신하기 위한 리턴 어드레스를 포함한다. 수행할 작업 또는 명령에 따라 다양한 종류의 작업 디스크립터 패킷이 있을 수 있으며, 많은 예가 이하에서 예시되고 설명된다. 명령 캐시 (340)는 초기 시스템 (100) 구성에서와 같이 임의의 실행에 앞서 채워진다(populate).
따라서, 많은 경우에, HTP (300)는 메인 메모리 (125)에 대한 단일 액세스없이 스레드가 생성되고 실행이 시작되도록 한다. 스레드 생성이 하드웨어에서 작은 (64B) 작업 디스크립터 패킷을 초기화한 다음 해당 패킷을 스레드가 시작될 목적지 HTP (300)으로 발송하여 수행되기 때문에, 기존 컴퓨팅 아키텍처와는 대조적으로, 애플리케이션의 병렬 영역이 최소 지연 및 매우 낮은 레이턴시로 입력될 때 이러한 "경량(light weight)"스레드 생성은 많은 스레드가 생성되도록 한다. 수신 HTP (300)는 패킷을 취하고 작업 디스크립터 패킷으로부터 스레드의 하드웨어 컨텍스트를 초기화한다. 스레드는 즉시 명령 실행을 시작한다. 상기에서 언급했듯이, 작업 디스크립터 패킷은 실행이 시작되는 명령 PC와 일부 호출 인수 (예를 들어, 최대 4 개) 만을 포함한다. 수신 HTP (300)는 스레드 실행 명령을 시작하기 위한 준비로 나머지 스레드 컨텍스트 상태를 자율적으로 초기화한다.
실행 스레드는 메모리 스택 공간과 메인 메모리 (125) 컨텍스트 공간을 갖는다. 컨텍스트 공간(context space)은 스레드의 상태가 호스트 프로세서 (110)에 의해 액세스되도록 메모리 (125)에 기록되어야 하는 경우에만 사용된다. 각각의 HTP (300)는 코어 스택 베이스 어드레스 및 코어 컨텍스트 베이스 어드레스로 초기화되며, 여기서, 베이스 어드레스는 스택 블록 및 컨텍스트 공간 블록을 가리킨다. 스레드 스택 베이스 어드레스는 코어 스택 베이스 어드레스를 취하고 스레드 스택 크기를 곱한 스레드 ID를 더하여 획득된다. 스레드 컨텍스트 베이스 어드레스는 유사한 방식으로 획득된다.
HTP (300)는 전형적으로 예를 들어 제한없이 RISC-V 프로세서 코어, ARM 프로세서 코어 등과 같은 임의의 유형의 프로세서 코어일 수 있는 하나 이상의 프로세서 코어 (305)를 포함한다. 코어 제어 회로 (310) 및 코어 제어 메모리 (315)는 각각의 프로세서 코어 (305)에 제공되고, 하나의 프로세서 코어 (305)에 대해 도 5에 도시된다. 예를 들어, 하나 이상의 HTP (300)에서와 같이 복수의 프로세서 코어 (305)가 구현될 때, 대응하는 복수의 코어 제어 회로 (310) 및 코어 제어 메모리 (315)가 또한 구현되고, 각각의 코어 제어 회로 (310) 및 코어 제어 메모리 (315)는 대응하는 프로세서 코어 (305)의 제어에 사용된다. 또한, HTP (300) 중 하나 이상은 데이터 경로의 잠재적 혼잡을 관리하기 위해 제 1 상호 접속 네트워크 (150)를 통한 액세스 크기 (예를 들어, 메모리(125)로드 요청)를 제어하는 데 사용되는 데이터 경로 제어 회로부 (395)를 또한 포함할 수 있다.
차례로, 코어 제어 회로 (310)는 제어 로직 및 스레드 선택 회로부 (330) 및 네트워크 인터페이스 회로부 (335)를 포함한다. 코어 제어 메모리 (315)는 개념적으로 분할되고 스레드 메모리 (또는 스레드 제어 메모리) (320) 및 네트워크 응답 메모리 (325)로 본 출원에서 언급된 복수의 레지스터 또는 다른 메모리 회로를 포함한다. 스레드 메모리 (320)는 스레드 상태 및 실행에 관한 정보를 저장하는 복수의 레지스터를 포함하고, 한편 네트워크 응답 메모리 (325)는 예를 들어 제한없이 데이터를 판독하거나 저장하기 위한 제 1 메모리 (125)에 대한 요청과 같은 제 1 상호 접속 네트워크 (150) 상의 제 1 메모리 (125)와 송수신되는 데이터 패킷에 관한 정보를 저장하는 복수의 레지스터를 포함한다.
도 6을 참조하면, 스레드 메모리 (320)는 복수의 레지스터를 포함하고, 복수의 레지스터는 스레드 ID 풀 레지스터 (thread ID pool registers)(322) (예를 들어 제한없이 총 32 개의 스레드 ID에 대해 식별 번호 0 내지 31과 같이 시스템 (100)이 구성될 때 사용될 수 있고 전형적으로 채워지는 미리 결정된 수의 스레드 ID를 저장); 스레드 상태 (테이블) 레지스터(thread state (table) registers)(324) (유효, 유휴(idle), 일시 중지, 명령(들) 대기, 제 1 (정상) 우선 순위, 제 2 (낮음) 우선 순위, 자원을 사용할 수 없는 경우 우선 순위에 대한 임시 변경과 같은 스레드 정보 저장); 프로그램 카운터 레지스터(program counter registers) (326) (예를 들어, 스레드가 다음에 시작하는 어드레스 또는 가상 어드레스를 명령 캐시 (340)에 저장하는 것); 정수 및 부동 소수점 데이터를 저장하기 위한 범용 레지스터 (328); 펜딩 파이버 리턴 카운트 레지스터(pending fiber return count registers) (332) (실행을 완료하기 위해 리턴될 미결 스레드의 수를 추적); 리턴 인수 버퍼(return argument buffers) (334) (리턴 인수 버퍼가 있는 링크 리스트의 헤드인 헤드 RAB와 같은 "RAB"), 스레드 리턴 레지스터(thread return registers) (336) (예를 들어, 리턴 어드레스, 호출 식별자, 호출 스레드와 관련된 임의의 스레드 식별자 저장); 커스텀 원자 트랜잭션 식별자 (들) 레지스터 (custom atomic transaction identifier(s) registers) (338); 이벤트 수신 마스크 레지스터 (342) (이하에서 더 상세히 논의되는 바와 같이 "청취(listen)"할 이벤트를 지정하기 위해), 이벤트 상태 레지스터 (344) 및 데이터 캐시 (346) (전형적으로 각각의 스레드에 대해 캐시 메모리의 4-8 개 캐시 라인을 제공)을 포함한다. 스레드 메모리 (320)의 모든 다양한 레지스터는 주어진 또는 선택된 스레드에 대해 할당된 스레드 ID를 사용하여 인덱싱된다.
도 7을 참조하면, 네트워크 응답 메모리 (325)는 복수의 레지스터, 예컨대, 메모리 요청 (또는 커맨드) 레지스터 (348) (예를 들어, 커맨드 원자 동작을 판독하거나 쓰거나 수행하는 커맨드); 스레드 ID 및 트랜잭션 식별자 ("트랜잭션 ID") 레지스터 (352) (메모리에 대한 임의의 요청을 추적하는 데 사용되는 트랜잭션 ID, 각각의 트랜잭션 ID를 메모리 (125)에 대한 요청을 생성한 스레드에 대한 스레드 ID와 관련); 요청 캐시 라인 인덱스 레지스터 (354) (주어진 스레드 (스레드 ID)에 대해 데이터가 메모리로부터 수신될 때 데이터 캐시 (346)의 어떤 캐시 라인에 기록될 것인지 지정하기 위해), 레지스터 바이트 레지스터 (356) (범용 레지스터 (328)에 기록할 바이트 수를 지정함); 및 범용 레지스터 인덱스 및 유형 레지스터 (358) (어떤 범용 레지스터 (328)가 기록될 것인지 및 사인(sign) 확장 또는 부동 소수점인지 여부를 표시)를 포함한다.
이하에서 자세히 설명하는 바와 같이, HTP (300)는 작업 디스크립터 패킷을 수신할 것이다. 이에 응답하여, HTP (300)는 유휴 또는 빈 컨텍스트를 찾아 컨텍스트 블록을 초기화하고, 스레드 ID를 사용할 수 있는 경우 해당 실행 스레드 (본 출원에서 일반적으로 "스레드(thread)"라고 함)에 스레드 ID를 할당하고, 해당 스레드 ID를 실행 (즉, "실행 준비(ready-to-run)") 큐 (345)에 넣는다. 실행 (실행 준비) 큐 (345)의 스레드는 전형적으로 라운드 로빈(round-robin) 또는 "배럴(barrel)"스타일 선택 프로세스에서 실행을 위해 선택되고, 실행 (실행 준비 완료) 큐 (345)의 모든 스레드가 실행 파이프 라인 (350)에 제공된 대응 명령을 가질 때까지, 1 스레드에 대한 단일 명령이 프로세서 코어 (305)의 실행 파이프 라인 (350)에 제공되고, 이어 제 2 스레드에 대한 단일 명령이 실행 파이프 라인 (350)에 제공되고, 이어 제 3 스레드에 대한 단일 명령이 실행 파이프 라인 (350)에 제공되고, 이어 다음 스레드에 대한 단일 명령이 실행 파이프 라인 (350)에 제공되는 등으로 진행되고, 해당 시점에서 스레드 선택이 다시 시작되어 실행 (실행 준비) 큐 (345)의 제 1 스레드에 대한 다음 명령이 실행 파이프 라인 (350)에 제공되고, 이어 제 2 스레드에 대한 다음 명령이 실행 파이프 라인 (350)에 제공되고, 이어 실행 (실행 준비 완료) 큐(345)의 모든 스레드를 순환시킨다. 이 실행은 스레드 리턴 명령을 실행하는 것과 같이 해당 스레드에 대한 실행이 완료될 때까지 각각의 스레드에 대해 계속되며, 해당 시점에서 응답 패킷 (스레드 실행 결과를 가짐)이 작업 디스크립터 패킷의 소스로 즉, 작업 디스크립터 호출 패킷의 소스로 다시 송신된다. 또한, 대표적인 실시예에서 그리고 이하에서 더 상세히 논의되는 바와 같이, 실행 (실행 준비) 큐 (345)는 옵션으로 제 1 우선 순위 큐 (355) 및 제 2 (더 낮은) 우선 순위 큐(360)로 예시된 상이한 레벨의 우선 순위가 제공되고, 제 1 우선 순위 큐 (355)의 스레드의 실행은 제 2 (더 낮은) 우선 순위 큐 (360)의 스레드의 실행보다 더 자주 발생한다.
그 결과, HTP(300)은 "이벤트 드라이빙된(event driven)"프로세서이고, 작업 디스크립터 패킷을 수신하면 자동으로 스레드 실행을 시작한다 (스레드 ID를 사용할 수 있지만 실행을 시작하기 위한 다른 요구 사항이 없는 경우), 즉, 작업 디스크립터 패킷이 도착하면 메모리(125)에 대한 참조 또는 추가 요청없이 자동으로 스레드 실행이 로컬에서 트리거된다. 수천 또는 스레드와 같이 병렬로 많은 스레드의 실행을 시작하기 위한 응답 시간이 비교적 낮기 때문에 이것은 매우 가치가 있다. HTP (300)은 스레드 실행이 완료 될 때까지 스레드 실행을 계속하거나, 응답을 대기할 것이고, 이하에서 더 상세히 논의되는 바와 같이 해당 시점에서 스레드는 "일시 중지(pause)"상태가 된다. 여러 다른 일시 중지 상태에 대해서는 이하에서 더 상세하게 논의된다. 해당 응답을 수신한 후 스레드는 활성 상태로 리턴되며, 해당 시점에서 스레드는 실행을 재개하여 그 스레드 ID가 실행 (실행 준비) 큐 (345)로 리턴된다. 스레드 실행의 이러한 제어는 스레드 메모리 (320)에 저장된 스레드 상태 정보와 함께 제어 로직 및 스레드 선택 회로 (330)에 의해 하드웨어에서 수행된다.
작업 디스크립터 패킷을 생성하는 호스트 프로세서 (110)에 추가하여, HTP (300)는 또한 다른 HTP (300) 또는 임의의 HTF 회로 (200)와 같은 다른 컴퓨팅 자원에서 하나 이상의 컴퓨팅 스레드로서 작업을 개시하기 위해 작업 디스크립터 패킷을 생성하고 송신할 수 있다. 이러한 작업 디스크립터 패킷은 "호출(call)" 작업 디스크립터 패킷이며, 일반적으로 호출 작업 디스크립터 패킷을 생성하는 호스트 프로세서 (110) 또는 HTP (300)에 대한 소스 식별자 또는 어드레스, 리턴을 원래 호출과 식별하거나 상관시키는 데 사용되는 스레드 ID (예를 들어, 16 비트 호출 식별자 (ID)), 64 비트 가상 커널 어드레스 (프로그램 카운트로서, 스레드의 실행을 시작하기 위한 제 1 명령의 위치를 찾기 위한 것으로, 전형적으로 HTP (300) (또는 HTF 회로 (200))의 명령 캐시 (340)에 홀딩되고, 이는 또한 가상 어드레스 공간일 수 있음), 및 하나 이상의 호출 인수 (예를 들어, 최대 4 개의 호출 인수)를 포함한다.
유사하게, 스레드가 완료되면 HTP (300) 또는 HTF 회로 (200)는 "리턴(return)" 작업 디스크립터 패킷이라고하는 다른 작업 디스크립터 패킷을 생성하고, 이는 일반적으로 HTP (300) 또는 HTF 회로 (200)가 리턴 명령이라고하는 스레드의 마지막 명령을 실행할 때 생성되고, 리턴 작업 디스크립터 패킷은 후술하는 패킷 인코더 (380)에 의해 어셈블링된다. 리턴 패킷은 소스 (호출 작업 디스크립터 패킷에 제공된 식별자 또는 어드레스 사용), 호출 작업 디스크립터 패킷으로부터 스레드 ID (또는 호출 ID) (소스가 리턴과 발행된 호출을 상관시키는 것을 허용하기 위해, 특히 소스에서 다수의 호출이 생성되고 동시에 미결 상태인 경우), 및 최대 4 개의 리턴 값과 같은 하나 이상의 리턴 값 (결과)으로 다시 어드레싱될 것이다.
도 8은 HTP (300)의 대표적인 실시예의 상세 블록도이다. 설명 및 설명의 용이를 위해, 스레드 메모리 (320) 및 네트워크 응답 메모리 (325)의 모든 레지스터가 도 8에 도시 된 것은 아니라는 점에 유의해야 한다. 도 8을 참조하면, 코어 제어 회로 (310)는 제어 로직 및 스레드 선택 회로부 (330) 및 네트워크 인터페이스 회로부 (335)를 포함한다. 제어 로직 및 스레드 선택 회로부 (330)는 예를 들어 제한없이, 복수의 다양한 로직 게이트 (예를 들어, NAND, NOR, AND, OR, EXCLUSIVE OR 등) 중 임의의 것의 조합을 사용하여 형성된 회로부, 다양한 상태 머신 회로 (제어 로직 (331)) 및 멀티플렉서 (예를 들어, 입력 멀티플렉서 (387), 스레드 선택 멀티플렉서 (385))를 포함한다. 네트워크 인터페이스 회로부 (335)는 제 1 상호 접속 네트워크 (150)로부터 데이터 패킷 (작업 디스크립터 패킷 포함)을 수신하는 AF 입력 큐 (365); 데이터 패킷 (작업 디스크립터 패킷 포함)을 제 1 상호 접속 네트워크 (150)로 전송하는 AF 출력 큐 (370); 제 1 상호 접속 네트워크 (150)로부터의 착신 데이터 패킷을 디코딩하고, 데이터 (지정된 필드에서)를 취하고, 패킷에 제공된 데이터를 스레드 메모리 (320) 및 네트워크 응답 메모리 (325)의 관련 레지스터로 전송하는 데이터 패킷 디코더 회로 (375) (아래에서 더 상세히 논의되는 바와 같이, 제어 로직 및 스레드 선택 회로 (330)에 의해 스레드에 할당된 스레드 ID와 관련하여, 이 스레드 ID는 또한 스레드 메모리 (320)에 인덱스를 제공하거나 형성함); 및 제 1 상호 접속 네트워크 (150)에서의 송신을 위해 나가는 데이터 패킷(예를 들어, 스레드 ID 및 트랜잭션 식별자 ("트랜잭션 ID") 레지스터 (352)로부터 트랜잭션 ID를 사용하는 메모리 (125)에 대한 요청)을 인코딩하는 데이터 패킷 인코더 회로 (380)를 포함한다. 데이터 패킷 디코더 회로 (375) 및 데이터 패킷 인코더 회로 (380)는 각각 상태 머신 또는 다른 로직 회로부로서 구현될 수 있다.
작업 디스크립터 패킷이 도착하면, 제어 로직 및 스레드 선택 회로부 (330)는 스레드 ID 풀 레지스터 (322)로부터 사용 가능한 스레드 ID를 워드 디스크립터 패킷의 스레드에 할당하고, 할당된 스레드 ID는 그런 다음 작업 디스크립터 패킷의 대응 데이터, 전형적으로 프로그램 카운트 및 하나 이상의 인수가 채워지는 스레드 메모리 (320)의 다른 레지스터에 대한 인덱스로 사용된다. 제어 로직 및 스레드 선택 회로부 (330)는 예를 들어 제한없이, 데이터 캐시 레지스터 (346)를 로딩하고 스레드 리턴 레지스터 (336)를 로딩하는 것과 같은 스레드 실행 명령을 시작하기 위한 준비로 스레드 컨텍스트 상태의 나머지를 자율적으로 초기화한다. 또한 예를 들어 실행중인 스레드는 메인 메모리 스택 공간과 메인 메모리 컨텍스트 공간을 갖는다. 컨텍스트 공간은 호스트가 액세스할 수 있도록 스레드 상태를 메모리에 기록해야 하는 경우에만 사용된다. 각각의 HTP (300) 프로세서 코어(305)는 코어 스택 베이스 어드레스 및 코어 컨텍스트 베이스 어드레스로 초기화되며, 여기서, 베이스 어드레스는 스택 블록 및 컨텍스트 공간 블록을 가리킨다. 스레드 스택 베이스 어드레스는 코어 스택 베이스 어드레스를 취하고 스레드 스택 크기를 곱한 스레드 ID를 더하여 획득된다. 스레드 컨텍스트 베이스 어드레스는 유사한 방식으로 획득된다.
해당 스레드 ID는 유효 상태 (실행 준비가 되었음을 나타냄)가 주어지고, 스레드에 전형적으로 제 1 (또는 정상) 우선 순위가 지정되기 때문에 스레드 ID는 실행 (실행 준비) 큐 (들) (345)의 제 1 우선 순위 큐 (355)로 푸시(push)된다. 멀티플렉서 (385)와 같은 제어 로직 및 스레드 선택 회로부 (330)의 선택 회로부는 실행 (실행 준비) 큐 (들) (345)에서 다음 스레드 ID를 선택하고, 이는 스레드 메모리 (320) (프로그램 카운트 레지스터 (326) 및 스레드 상태 레지스터 (324))로의 인덱스로 사용되어 명령 캐시 (340)로부터 명령을 선택하고 그런 다음 실행을 위해 실행 파이프 라인 (350)에 제공된다. 그런 다음 실행 파이프 라인은 해당 명령을 실행한다.
명령 실행이 완료되면, 제어 로직 및 스레드 선택 회로부 (330)의 제어하에서 동일한 3 개의 정보 (스레드 ID, 유효 상태 및 우선 순위)가 다양한 조건에 따라 라운드 로빈 실행을 위한 계속 선택을 위해 실행 (실행 준비) 큐 (들) (345)로 리턴될 수 있다. 예를 들어, 선택한 스레드 ID에 대한 마지막 명령이 리턴 명령 (스레드 실행이 완료되었고 리턴 데이터 패킷이 제공되고 있음을 표시)인 경우, 제어 로직 및 스레드 선택 회로부 (330)는 스레드 ID를 스레드 ID 풀 레지스터 (322)에 스레드 ID의 사용 가능한 풀로 리턴하여 다른 스레드에 의해 사용 가능하도록 할 것이다. 예를 들어, 유효 표시자는 일시 중지 상태로 변경하는 것과 같이 변경될 수 있고(예를 들어, 스레드가 정보가 메모리 (125)로부터 리턴되거나 메모리에 기록되는 것을 대기하거나 다른 이벤트를 대기하는 동안), 이 경우, 스레드 ID (현재 일시 중지 상태를 가짐)는 상태가 다시 유효하게 변경될 때까지 실행 (실행 준비) 큐 (들) (345)로 리턴되지 않는다.
이전 예를 계속하여, 선택된 스레드 ID에 대한 마지막 명령이 리턴 명령일 때, 리턴 정보 (스레드 ID 및 리턴 인수)는 그런 다음 실행 파이프 라인 (350)에 의해 네트워크 커맨드 큐 (390)로 푸시되며, 이는 전형적으로 선입 선출 (FIFO : first-in, first out)로 구현된다. 스레드 ID는 트랜잭션 ID 및 소스 (호출자) 어드레스 (또는 다른 식별자)와 같은 리턴 정보를 획득하기 위해 스레드 리턴 레지스터 (336)에 대한 인덱스로 사용되며, 패킷 인코더 회로는 그런 다음 나가는 리턴 데이터 패킷을 생성한다 (제 1 상호 접속 네트워크 (150)상에서).
후자의 예를 계속하면, 스레드의 명령은 로드 명령, 즉 메모리 (125)에 대한 판독 요청 일 수 있으며, 이는 그런 다음 실행 파이프 라인 (350)에 의해 네트워크 커맨드 큐 (390)로 푸시된다. 그 다음, 패킷 인코더 회로는 요청의 크기와 할당된 트랜잭션 ID (스레드 ID 및 트랜잭션 ID 레지스터 (352)로부터, 이는 네트워크 응답 메모리 (325)에 대한 인덱스로도 사용됨), HTP (300)의 어드레스 (요청된 정보)를 포함하는 (판독 또는 기록 요청으로서) 메모리 (125)에 대한 요청을 갖는 (제 1 상호 접속 네트워크 (150)상에서) 나가는 데이터 패킷을 생성한다. 그런 다음 패킷이 제 1 상호 접속 네트워크 (150)로부터 수신되고 디코딩될 때, 트랜잭션 ID는 네트워크 응답 메모리 (325)에 대한 인덱스로 사용되며, 요청을 한 스레드의 스레드 ID가 획득되고, 이는 또한 응답에서 리턴된 데이터를 쓰기 위해 데이터 캐시 (346)의 위치를 제공하고, 트랜잭션 ID는 그런 다음 스레드 ID 및 트랜잭션 ID 레지스터 (352)로 리턴되어 재사용되고 대응하는 스레드 ID의 상태가 다시 유효하게 설정되고, 스레드 ID는 실행을 재개하기 위해 다시 실행 (실행 준비) 큐 (들) (345)로 푸시된다.
메모리 (125)에 대한 저장 요청은 유사하게 실행되며, 나가는(outgoing) 패킷은 또한 메모리 (125)에 기록될 데이터, 할당된 트랜잭션 ID, HTP (300)의 소스 어드레스를 가지며, 그리고 리턴 패킷은 트랜잭션 ID에 대한 확인 응답(acknowledgement)이다. 트랜잭션 ID는 또한 스레드 ID 및 트랜잭션 ID 레지스터 (352)로 리턴되어 재사용되고, 해당 스레드 ID의 상태가 다시 유효하게 설정되고, 스레드 ID는 다시 실행 (실행 준비) 큐 (들) (345)로 푸시되어 실행을 재개한다.
도 9는 HTP (300)에 대한 자체 스케줄링 및 스레드 제어를 위한 방법의 대표적인 실시예의 흐름도이며, 유용한 요약을 제공하고, HTP (300)는 이미 명령 캐시 (340)의 명령 및 스레드 식별자 풀 레지스터 (322)의 미리 결정된 수의 스레드 ID로 채워져 있다. 이 방법은 작업 디스크립터 패킷을 수신하면 단계(400)을 시작한다. 작업 디스크립터 패킷이 디코딩되고 (402 단계), 스레드 메모리 (320)의 다양한 레지스터가 작업 디스크립터 패킷에 수신된 정보로 채워지고 컨텍스트 블록을 초기화한다 (단계 404). 스레드 ID가 이용 가능할 때, 단계 (406), 스레드 ID가 할당되고, 단계 (408) (단계 (406)에서 스레드 ID가 이용 가능하지 않으면, 스레드는 스레드 ID가 이용 가능해질 때까지 대기 할 것이다, 단계 (410)). 유효 상태는 처음에 스레드 (제 1 또는 제 2 우선 순위와 같은 초기 할당된 우선 순위와 함께)에 할당되고 (단계 412), 스레드 ID는 실행 (실행 준비) 큐 (345)에 제공된다 (단계 414). 실행 (실행 준비) 큐 (345)의 스레드 ID가 그런 다음 실행을 위해 선택된다 (이하에서 더 상세히 논의되는 미리 결정된 빈도로), (단계 416). 스레드 ID를 사용하여, 스레드 메모리 (320)가 액세스되고 프로그램 카운트 (또는 어드레스)가 획득된다 (단계 418). 프로그램 카운트 (또는 어드레스)에 대응하는 명령이 명령 캐시 (340)로부터 획득되고 실행을 위해 실행 파이프 라인 (350)에 제공된다 (단계 420).
스레드 실행이 완료되면, 즉 실행중인 명령은 리턴 명령이고 (단계 422), 스레드 ID는 다른 스레드에 의한 재사용을 위해 스레드 ID 풀 레지스터 (322)로 리턴되고 (단계 424), 해당 스레드 ID와 관련된 스레드 메모리 (320) 레지스터는 (옵션으로) 클리어될 수 있고 (단계 426), 스레드 제어는 해당 스레드에 대해 종료될 수 있고, 단계 (434)로 리턴한다. 스레드 실행이 단계 (422)에서 완료되지 않고, 스레드 상태가 유효하면 (단계 428), 스레드 ID (유효 상태 및 우선 순위를 갖는)가 실행 (실행 준비) 큐 (345)로 리턴되고, 계속된 실행을 위해 단계 (단계 414)로 리턴한다. 단계 428에서 스레드 상태가 더 이상 유효하지 않을 때 (즉, 스레드가 일시 중지됨), 스레드 메모리 (320)에 표시된 해당 스레드 ID에 대한 일시 중지된 상태로, 해당 스레드 ID의 상태가 유효 상태로 돌아올 때까지 (432 단계) 해당 스레드의 실행이 중지되고 (단계 430), 스레드 ID (유효 상태 및 우선 순위를 갖는)는 실행 (실행 준비) 큐 (345)로 리턴되고, 계속 실행을 위해 단계 414로 리턴한다.
유사하게, HTP (300)는 다른 HTP (300) 또는 HTF 회로 (200) 상에 스레드를 생성하는 것과 같이 로컬 또는 원격 컴퓨팅 엘리먼트에 스레드를 생성하는 것과 같은 호출을 생성할 수 있다. 이러한 호출은 또한 나가는 데이터 패킷으로서, 보다 구체적으로는 제 1 상호 접속 네트워크 (150) 상의 나가는 작업 디스크립터 패킷으로 생성된다. 예를 들어, 실행중인 현재 스레드의 명령은 다양한 컴퓨팅 자원에서 실행하기 위해 복수의 스레드를 생성하기 위한 "파이버 생성(fiber create)" 명령 (명령 캐시 (340)에 가능한 명령으로 저장됨) 일 수 있다. 이하에서 더 자세히 논의되는 바와 같이, 그러한 파이버 생성 명령은 어떤 컴퓨팅 자원이 스레드를 실행할 것인지 (어드레스 또는 가상 어드레스 (노드 식별자) 사용)를 지정하고, 또한 관련 인수를 제공한다. 파이버 생성 명령이 실행 파이프 라인 (350)에서 실행되면, 파이버 생성 명령이 네트워크 커맨드 큐 (390)로 푸시되고 다음 명령이 실행 파이프 라인 (350)에서 실행된다. 명령은 네트워크 커맨드 큐 (390) 밖으로 꺼내지고, 패킷 인코더 (380)는 작업 디스크립터 패킷을 생성하여 지정된 목적지 HTF (200) 또는 HTP (300)로 발송하는 데 필요한 정보를 갖는다.
생성된 스레드가 리턴 인수를 갖는 경우, 그러한 명령은 또한 리턴 인수 버퍼 (334)에서와 같이 관련된 메모리 공간을 할당하고 리저브할 것이다. 리턴 인수 버퍼 (334)에 공간이 충분하지 않으면, 리턴 인수 버퍼 (334)가 이용 가능할 때까지 명령이 일시 중지 될 것이다. 생성되는 파이버 또는 스레드의 수는 응답 인수를 보유할 공간의 양에 의해서만 제한된다. 리턴 인수가 없는 생성된 스레드는 가능한 일시 중지 상태를 방지하여 리턴 인수 공간을 리저브 하는 것을 피할 수 있다. 이 메커니즘은 완료된 스레드의 리턴이 항상 인수를 저장할 위치를 갖는 것을 보장한다. 리턴이 제 1 상호 접속 네트워크 (150)상의 데이터 패킷으로서 HTP (300)로 돌아올 때, 해당 패킷은 상기에서 논의된 바와 같이, 파이버 생성 명령과 관련된 스레드 ID에 의해 인덱싱된, 스레드 메모리 (320)의 리턴 인수 버퍼 (334)의 관련된 리저브 공간에 저장된 리턴 데이터로 디코딩된다. 리턴 인수를 위해 많은 레지스터가 이용될 수 있으므로, 리턴 인수 버퍼 (334)는 생성된 모든 스레드의 링크 리스트 또는 해당 스레드 ID에 할당된 레지스터 또는 리턴 인수 버퍼로서 제공될 수 있다. 중요한 것은, 이 메커니즘을 통해 잠재적으로 수천 개의 스레드를 매우 빠르게 생성할 수 있으므로 단일 스레드 실행에서 많은 스레드 카운트 병렬 처리(parallelism)로 전환하는 데 소요되는 시간을 효과적으로 최소화할 수 있다.
이하에서 더 자세히 논의되는 바와 같이, 생성된 모든 스레드가 완료되는 시기를 결정하기 위해 다양한 유형의 파이버 조인 명령이 사용되며 대기 여부에 관계없는 명령일 수 있다. 생성된 스레드 수의 카운트는 펜딩중인 파이버 리턴 카운트 레지스터 (332)에서 유지되며, 이 카운트는 스레드 리턴이 HTP (300)에 의해 수신될 때 감분된다. 조인 동작(join operation)은 생성 스레드 ID와 관련된 레지스터로의 리턴을 복사하여 수행할 수 있다. 조인 명령이 대기 명령(waiting instruction)인 경우, 생성 스레드의 해당 스레드 ID를 지정하는 리턴이 도착할 때까지 일시 중지된 상태로 유지될 것이다. 그 사이에, 조인 명령의 일시 중지 상태가 유효 상태로 변경되고 조인 명령이 실행 (실행 준비) 큐 (345)로 리턴될 때까지 다른 명령이 실행 파이프 라인 (350)에 의해 실행된다.
스레드 리턴 명령은 조인 명령 대신 파이버 생성 명령 다음의 명령으로 사용될 수도 있다. 펜딩중인 파이버 리턴 카운트 레지스터 (332)의 카운트가 0에 도달하면, 마지막 스레드 리턴 데이터 패킷 수신시 스레드 리턴 명령도 실행될 수 있으며, 파이버 생성 작업이 완료되고 모든 리턴이 수신되었음을 표시하여 스레드 ID, 리펀 인수 버퍼 (334) 및 링크 리스트를 다른 용도로 사용할 수 있다. 또한, 작업 디스크립터 리턴 패킷 (예를 들어, 결과 데이터 가짐)을 생성하여 메인 스레드를 호출한 소스 (예를 들어, 호출을 생성한 소스의 식별자 또는 어드레스)로 송신할 수 있다.
모든 조인 명령은 인수가 리턴될 것을 요구하지 않으며, 펜딩중인 파이버 리턴 카운트 레지스터 (332)에서 카운트를 감분시키는 확인 응답만 필요하다. 해당 카운트가 0에 도달하면 모든 조인이 완료되었으므로 해당 스레드가 다시 시작된다.
병렬 알고리즘의 프로세싱을 용이하게 하려면 프로세싱 엘리먼트 간의 통신이 필요하다. 대표적인 실시예는 데이터 (인수 또는 결과와 같은)를 또한 포함할 수 있는 다양한 이벤트 메시지를 사용하여 프로세싱 자원 세트의 스레드가 통신할 수 있는 효율적인 수단을 제공한다. 이벤트 메시징은 하드웨어 유지 캐시 코히런시(coherency)를 갖는 임의의 호스트 프로세서 (110) 및 소프트웨어 유지 캐시 코히런시를 갖는 임의의 가속 프로세서 (예를 들어, HTP (300))가 이벤트 메시징에 효율적으로 참여하는 것을 허용한다.
이벤트 메시징은 점 대 점 및 브로드캐스트 이벤트 메시지 둘 모두를 지원한다. 각각의 프로세싱 자원 (HTP (300))는 수신된 이벤트 동작이 완료되고 프로세싱 자원에 알려야하는 시기를 결정할 수 있다. 이벤트 수신 모드는 단순 (수신된 단일 이벤트가 동작을 완료함), 집합 (동작을 완료하는 데 충분한 이벤트가 수신된 시기를 결정하는 데 카운트가 사용됨) 및 브로드캐스트 (특정 채널에서 수신된 이벤트가 이벤트를 완료함)를 포함한다. 추가적으로, 옵션의 64 비트 데이터 값을 사용하여 이벤트가 발송될 수 있다.
HTP (300)는 2 비트 수신 모드, 16 비트 카운터/채널 번호 및 64 비트 이벤트 데이터 값으로 구성된 이벤트 상태 레지스터 (344)에 저장된 이벤트 수신 상태의 세트를 갖는다. HTP (300)은 스레드 컨텍스트 당 다수의 세트의 이벤트 수신 상태를 가질 수 있으며, 여기서 각각의 세트는 이벤트 번호로 인덱싱된다. 따라서, 이벤트는 특정 스레드 (스레드 ID) 및 이벤트 번호에 타겟화될 수 있다. 발송된 이벤트는 단일 목적지 스레드를 갖는 점 대 점 메시지이거나 동일한 프로세스에 속하는 프로세싱 자원 그룹 내의 모든 스레드에 발송된 브로드캐스트 메시지일 수 있다. 이러한 이벤트가 수신되면, 일시 중지 또는 휴면(sleeping) 스레드는 재활성화되어 프로세싱을 재개할 수 있다.
이벤트 상태 레지스터 (344)의 이러한 사용은 호스트 프로세서 (110)가 완료된 수신 이벤트에 대해 주기적으로 폴링(poll)할 수 있도록 하는 인터페이스를 통해 이벤트를 송수신할 수 있는 표준 Linux 기반 호스트 프로세서보다 훨씬 더 효율적이다. 이벤트 메시지를 대기하는 스레드는 수신 동작이 완료될 때까지 실행을 일시 중지할 수 있고, 즉, HTP (300)는 폴링에 의해 자원을 낭비하는 대신 수신 이벤트를 펜딩하여 스레드의 실행을 일시 중지하고 다른 스레드가 이러한 간격 동안 실행되도록 할 수 있다. 각각의 HTP(300)은 또한 프로세스 보안 이슈를 방지하기 위해 이벤트 수신에 참여해야 하는 프로세싱 자원 리스트를 유지한다.
점 대 점 메시지는 이벤트 번호 및 목적지 (예를 들어, 노드 번호, 어느 HTP(300), 어느 코어 및 어느 스레드 ID)를 지정할 것이다. 수신 측에서, HTP (300)는 이벤트 상태 레지스터 (344)에 홀딩된 하나 이상의 이벤트 번호로 구성되거나 프로그래밍될 것이다. HTP (300)가 해당 이벤트 번호를 갖는 이벤트 메시지를 수신하면, 트리거되고 일시 중지된 상태에서 유효 상태로 전환되어 이벤트 수신 명령 (예를 들어, EER, 아래)을 실행하는 것과 같이 실행을 재개한다. 해당 명령은 그런 다음 정확한 이벤트 번호가 수신되었는지를 결정할 것이고, 그렇다면, 다른 명령에 의한 사용을 위해 관련된 64 비트 데이터를 범용 레지스터 (328)에 기록한다. 이벤트 수신 명령이 실행되고 올바른 이벤트 번호가 수신되지 않은 경우, 특정 이벤트 번호가 수신될 때까지 일시 중지될 것이다.
이벤트 수신 (EEL) 명령이 이용될 수 있으며, 이벤트 마스크는 이벤트 수신 마스크 레지스터 (342)에 저장되고, 스레드를 트리거하거나 웨이크 업(wake up)하는 데 사용될 하나 이상의 이벤트를 표시한다. 지정된 이벤트 중 임의의 것을 갖는 이벤트 메시지가 도착하면, 수신 HTP (300)는 어느 이벤트 번호가 트리거되었는지 예를 들어, 다른 프로세스가 완료되었을 수 있음을 알고 완료된 이벤트로부터 이벤트 데이터를 수신할 것이다. 이벤트 청취 명령은 또한 이하에서 상세히 설명되는 대기 및 대기 없음 변형을 가질 수 있다.
집합 모드의 이벤트 메시징의 경우, 수신 HTP (300)은 트리거하기 전에 수신 이벤트 세트를 수집 (대기)하여, 이벤트 상태 레지스터 (344)의 카운트를 필요한 값으로 설정하며, 이는 필요한 이벤트 메시지가 수신될 때 감분되고, 카운트가 0으로 감분되면 트리거된다.
브로드캐스트 모드에서, 발신자 프로세싱 자원은 노드 내의 임의의 스레드로 메시지를 송신할 수 있다. 예를 들어, 송신 HTP (300)는 일련의 점 대 점 메시지를 노드 내에서 서로 HTP (300)로 송신할 수 있고, 각각의 수신 HTP (300)는 그런 다음 메시지를 각각의 내부 코어 (305)로 전달할 것이다. 각각의 코어 제어 회로 (310)는 수신할 초기화된 이벤트 번호에 대응하는지, 그리고 제 1 상호 접속 네트워크 (150)에서 지정될 수 있는 채널에 대응 하는지를 결정하기 위해 스레드 리스트를 검토할 것이다.
이 브로드캐스트 모드는 수천 개의 스레드가 병렬로 실행될 때 특히 유용하며, 실행할 마지막 스레드는 완료를 나타내는 브로드캐스트 이벤트 메시지를 송신한다. 예를 들어, 완료가 필요한 모든 스레드의 제 1 카운트는 이벤트 상태 레지스터 (344)에서 유지될 수 있는 반면, 실행된 모든 스레드의 제 2 카운트는 메모리 (125)에서 유지될 수 있다. 각각의 스레드가 실행될 때, 또한 메모리 (125)의 원자 동작을 통해 (그리고 그것을 제 1 카운트와 비교하는) 제 2 카운트에 대해 페치 및 증분 원자 동작을 수행하고, 브로드캐스트 메시지를 수신할 때까지 대기하도록 EER 명령을 실행하여 브로드캐스트 메시지를 수신하도록 모드를 설정한다. 실행할 마지막 스레드는 제 2 카운트의 페치 값을 필요한 제 1 카운트에서 1을 뺀 값으로 볼 수 있으며, 이는 실행할 마지막 스레드임을 나타내고, 따라서 중요한 병렬 프로세싱의 완료를 나타내는 매우 빠르고 효율적인 방법인 브로드캐스트 메시지를 발송한다.
상기에서 언급한 바와 같이, HTP (300)는 표준 RISC-V 명령을 사용할 수 있지만, 이하에서 더 상세히 논의되는 바와 같이 모든 시스템 (100) 컴퓨팅 자원을 이용하기 위해 상당히 확장된 명령 세트가 제공된다. 호스트 프로세서 (110)로부터 생성된 스레드는 일반적으로 마스터 스레드(master thread)라고 하며, HTP (300)로부터 생성된 스레드는 전형적으로 파이버 또는 파이버 스레드라고 하며, 모두 메모리(125)를 거치치 않고 목적지 HTP (300) 및 HTF (200)에서 동일하게 실행된다.
로드 명령(Load Instructions):
HTP (300)는 데이터 캐시 레지스터 (346)라고도 하는 비교적 적은 수의 스레드 당 판독/기록 버퍼를 갖는다. 버퍼 (데이터 캐시 레지스터 (346))는 소유 스레드에 의한 사용을 위해 공유 메모리 데이터를 임시로 저장한다. 데이터 캐시 레지스터 (346)는 하드웨어와 소프트웨어의 조합에 의해 관리된다. 하드웨어는 자동으로 버퍼를 할당하고 필요할 때 데이터를 축출한다. 소프트웨어는 RISC-V 명령을 사용하여 어떤 데이터가 캐시되어야하는지 (판독 및 기록 데이터), 데이터 캐시 레지스터 (346)가 무효화 (클린(clean)인 경우) 또는 메모리에 다시 기록되어야 하는 시기 (더티(dirty)인 경우)를 결정한다. RISC-V 명령 세트는 원자 명령에 대한 표시자를 획득 및 릴리즈(release)할 뿐만 아니라 FENCE 명령을 제공한다.
표준 RISC-V로드 명령은 자동으로 판독 데이터 캐시 레지스터 (346)를 사용한다. 표준 로드는 필요한 데이터가 기존 데이터 캐시 레지스터 (346)에 있는지를 알기 위해 체크한다. 그렇다면 데이터는 데이터 캐시 레지스터 (346)로부터 획득되고, 실행 스레드는 일시 중지없이 실행을 계속할 수 있다. 필요한 데이터가 데이터 캐시 레지스터 (346)에 없으면, HTP (300)는 이용 가능한 데이터 캐시 레지스터 (346)를 찾고 (필요한 버퍼로부터 데이터를 축출), 메모리로부터 데이터 캐시 레지스터 (346)로 64 바이트를 판독한다. 실행 스레드는 메모리 판독이 완료되고 로드 데이터가 RISC-V 레지스터에 기록될 때까지 일시 중지된다.
판독 버퍼링은 2 가지 주요 이점을 갖는다 : 1) 더 큰 액세스가 메모리 제어기 (120)에 대해 더 효율적이고, 2) 버퍼에 대한 액세스는 실행 스레드가 스톨링(stalling)을 피할 수 있게 한다. 그러나, 버퍼를 사용하면 문제가 발생하는 상황이 있다. 예는 액세스가 전형적으로 데이터 캐시 레지스터 (346)의 스래싱(thrashing)을 유발하는 게더링 동작(gather operation)이다. 이러한 이유로 로드 명령이 캐시 히트를 확인하도록 강제하는 특수 로드 명령 세트가 제공되지만 캐시 미스(cache miss)시에는 요청된 오퍼랜드(operand)에 대한 메모리 요청을 발행하고 획득된 데이터를 데이터 캐시 레지스터 (346)에 넣지 않고 대신 범용 레지스터 (328) 중 하나에 데이터를 넣는다.
이러한 로드 명령은 자주 사용되는 데이터 대 희소적으로 또는 드물게(rarely) 사용되는 데이터에 대해 예상되는 액세스 빈도에 기초한 "확률적(probabilistic)" 캐싱을 제공한다. 이것은 데이터 캐시 레지스터 (346)에 넣으면 다시 더 자주 필요할 다른 데이터를 덮어 쓰고, 데이터 캐시 레지스터 (346)를 효과적으로 오염시키는 희소 데이터 세트와 함께 사용하는 경우에 특히 중요하다. 로드 명령 (NB 또는 NC)은 자주 사용되는 데이터가 데이터 캐시 레지스터 (346)에 남아 있게 하고, 전형적으로 캐시될 덜 자주 사용되는 (희소) 데이터가 범용 레지스터 (328)에 캐시되지 않은 스토리지 대신 지정되는 것을 허용한다.
이러한 유형 명령은 NB 서피스(suffix) (버퍼되지 않음) (또는 동등하게 NC 충분 (캐시되지 않음))를 갖는다.
LB.NB RA,40(SP).
NB (NC)로드 명령은 어셈블리로 기록된 런타임 라이브러리에서 사용될 것으로 기대된다.
다음 로드 명령은 32 비트 명령으로 추가되었고, 표 1에서, Imm은 즉시 필드, RA는 레지스터 이름, rs1은 소스 인덱스, rd는 목적지 인덱스이고, 필드 14-12 및 6-0의 비트는 명령을 지정한다.
표 1 :
Figure pct00001
메모리 대역폭은 종종 애플리케이션 성능을 제한하는 주요 원인이다. 대표적인 실시예는 메모리 (125)에 얼마나 큰 메모리 로드 요청이 발행되어야 하는지에 대해 HTP (300)에 알리는 수단을 제공한다. 대표적인 실시예는 애플리케이션에 의해 사용되지 않는 액세스 메모리 데이터로 인해 제 1 상호 접속 네트워크 (150)의 낭비되는 메모리 및 대역폭을 감소시킨다.
애플리케이션이 액세스되는 데이터 구조의 크기를 알고 데이터 캐시 레지스터 (346)로 로드될 데이터의 양을 지정할 수 있는 경우 추가 최적화가 존재한다. 예를 들어, 알고리즘이 16 바이트 크기의 구조를 사용하고, 구조가 메모리에 산란되어 있는 경우 16 바이트 메모리 판독을 발행하고 데이터를 데이터 캐시 레지스터 (346)에 배치하는 것이 최적일 것이다. 대표적인 실시예는 HTP(300) 레지스터에 로드될 오퍼랜드의 크기 및 로드가 데이터 캐시 레지스터 (346)를 놓친 경우 메모리에 대한 액세스 크기 둘 모두를 제공하는 메모리 로드 명령 세트를 정의한다. 메모리 (125)에 대한 실제 로드는 메모리 액세스가 캐시 라인 경계를 넘을 경우 명령 지정 크기보다 작을 수 있다. 이 경우, 데이터 캐시 레지스터 (346)의 단일 캐시 라인에 응답 데이터가 기록되는 것을 보장하기 위해 액세스 크기가 감소된다.
요청된 데이터가 캐시 라인보다 작을 때, 로드 명령은 HTP (300)이 현재 필요하지 않지만 향후 필요할 가능성이 있는 추가 데이터를 요청할 수도 있고, 이는 동시에 (예를 들어, 프리 페치(pre-fetch)로서) 획득할 가치가 있으며, 메모리 (125)에 대한 판독 크기 액세스를 최적화한다. 이 명령은 또한 대역폭 관리를 위해 활용되었을 수 있는 액세스 크기의 임의의 감소를 오버라이드(override)할 수 있다 (도 12를 참조하여 이하에서 더 상세히 설명됨).
따라서 대표적인 실시예는 필요한 것으로 알려진 메모리 데이터만을 요청함으로써 낭비되는 대역폭을 최소화한다. 그 결과 애플리케이션 성능이 향상된다.
액세스될 데이터의 양이 지정되는 것을 허용하는 로드 명령 세트가 정의되었다. 데이터는 버퍼에 기록되고 축출, FENCE 또는 획득이 지정된 원자에 의해 무효화된다. 로드 명령은 메모리로부터 액세스되고 메모리 버퍼에 기록될 추가 데이터 (8 바이트 증분)가 얼마나 많은지에 대한 힌트를 제공한다. 로드는 다음 64 바이트 경계까지의 추가 데이터에만 액세스할 것이다. 로드 명령은 동작 서피스 RB0-RB7을 사용하여 로드할 추가 8 바이트 엘리먼트의 수를 지정한다:
LD.RB7 RA,40(SP)
명령 포맷이 표 2에 도시된다. 버퍼로 로드할 8 바이트 데이터 엘리먼트의 수는 비트 6및 32 비트 명령의 4 : 3 으로 지정된다. 이러한 로드 명령은 어셈블리 기록 루틴에서 사용하거나 이상적으로 컴파일러에서 사용될 수 있다. 처음에는 손으로 기록된 어셈블리만 이러한 명령을 활용할 것으로 예상된다.
표 2 :
Figure pct00002
저장 명령
HTP (300)는 공유 메모리 데이터를 일시적으로 저장하는 적은 수의 메모리 버퍼를 갖는다. 메모리 버퍼는 메모리에 대한 다수의 기록을 더 적은 수의 메모리 기록 요청으로 통합되는 것을 허용한다. 이것은 2 가지 장점을 갖는다 : 1) 더 적은 기록 요청이 제 1 상호 접속 네트워크 (150) 및 메모리 제어기 (120)에 대해 더 효율적이고, 2) HTP (300)는 데이터가 HTP (300) 메모리 버퍼 또는 메모리 제어기 (120)에 저장될 때까지 메모리 저장을 수행하는 스레드를 중단한다. HTP (300) 메모리 버퍼에 대한 저장은 매우 빠르며 전형적으로 스레드가 실행을 중단하지 않게 한다. 버퍼가 메모리 제어기 (120)에 기록될 때, 스레드는 메모리 (125) 일관성(consistency)을 보장하기 위해 완료가 수신될 때까지 중단된다.
표준 RISC-V 저장 명령은 HTP(300) 메모리 버퍼에 데이터를 기록한다. 그러나, 데이터를 메모리 버퍼에 기록하지 않고 메모리에 직접 기록하는 것이 더 낫다고 알려진 상황이 있다. 그러한 상황 중 하나가 산란 동작(scatter operation)이다. 산란 동작은 전형적으로 메모리 버퍼에 단일 데이터 값만 기록한다. 버퍼에 기록하는 것은 버퍼가 스래시(thrash)되게하고 기록 병합의 장점을 얻을 수 있는 다른 저장 데이터는 강제로 메모리로 돌아간다. 쓰기 버퍼링이 사용되지 않아야 함을 나타내기 위해 HTP (300)에 대해 저장 명령의 세트가 정의된다. 이러한 명령은 데이터를 메모리 (125)에 직접 기록하여 기록이 완료될 때까지 실행 스레드가 일시 중지되게 한다.
버퍼링이 없는 저장 명령은 손으로 조립된 라이브러리에서 사용될 것으로 예상되며 NB 서피스로 표시된다 :
ST.NB RA,40(SP)
표 3에 표시된 대로 다음 저장 명령이 추가되었다.
표 3 :
Figure pct00003
커스텀 원자 저장 및 CL(Clear Lock) 명령:
커스텀 원자 동작은 메모리 제어기에 의해 원자 동작이 관측될 때 제공된 어드레스에 잠금(lock)을 설정한다. 원자 동작은 관련된 HTP (300)에서 수행된다. HTP (300)은 잠금이 해제되어야 할 때를 메모리 제어기에 알려야 한다. 이것은 HTP (300)이 커스텀 원자 동작을 위해 수행하는 마지막 저장 동작에 근거하여야 한다 (또는 저장이 필요하지 않은 경우 파이버 종료 명령에 근거). HTP (300)은 특수 저장 동작을 실행하여 잠금이 해제되어야 함을 나타낸다. 저장 및 잠금 해제 명령.
커스텀 원자 DCAS 동작을 구현하기 위해 이하의 명령 시퀀스가 사용될 수 있다.
// a0 - 원자 어드레스
// a1 - a0의 64 비트 메모리 값
// a2 - DCAS 비교 값 1
// a3 - DCAS 비교 값 2
// a4 - DCAS 스왑 값 1
// a5 - DCAS 스왑 값 2
atomic_dcas :
bne a1, a2, 실패 // 제 1의 8 바이트 비교
ld.nb a6, 8 (a0) // 제 2의 8 바이트 메모리 값 로드 - 메모리 캐시에 히트되어야 함
bne a6, a3, 실패 // 제 2의 8 바이트 비교
sd a4, 0 (a0) // 제 1의 8 바이트 스왑 값을 스레드 저장 버퍼에 저장
sd.cl a5, 8 (a0) // 제 2의 8 바이트 값 저장 및 메모리 잠금 해제
eft x0 // AMO 성공 응답
실패:
li a1, 1
eft.cl a1, (a0) // AMO 실패 응답 (및 메모리 잠금 해제)
atomic_float_add :
fadd.d a2, a1, a2 // a1은 메모리 값을 포함하고 a2는 추가할 값을 포함한다
fsd.cl a2, 0 (a0) // a0는 메모리 어드레스, 잠금 해제 및 원자 종료를 포함한다
eft // 버퍼에서 모든 라인을 축출하고 원자 스레드를 종료한다
잠금을 해제해야 함을 나타내는 저장 명령은 다음과 같다 :
SB.CL RA,40(SP)
SH.CL RA,40(SP)
SW.CL RA,40(SP)
SD.CL RA,40(SP)
FSW.CL RA,40(SP)
FSD.CL RA,40(SP)
이러한 저장 명령의 포맷이 표 4에 도시된다.
표 4 :
Figure pct00004
파이버 생성 명령 :
파이버 생성 ("EFC") 명령은 HTP (300) 또는 HTF (200)에서 스레드를 개시한다.
EFC.HTP.A4
EFC.HTF.A4
이 명령은 HTP (300) (또는 HTF (200))에서 호출을 수행하고 레지스터 a0의 어드레스에서 실행을 시작한다. (옵션으로, 서피스 .DA가 사용될 수 있다. 명령 서피스 DA는 타겟 HTP (300)가 레지스터 a1의 가상 어드레스에 의해 결정됨을 나타낸다. DA 서피스가 없으면 로컬 시스템 (100)의 HTP (300)가 타겟화된다.) 서피스 A1, A1, A2 및 A4는 HTP (300) 또는 HTF (200)에 전달될 추가 인수의 수를 지정한다. 인수 개수는 0, 1, 2 또는 4 값으로 제한된다 (예를 들어, 패킷은 64B에 맞아야 함). 추가 인수는 레지스터 상태 (a2-a5)에서 가져온다.
EFC 명령이 실행될 때 리턴 버퍼를 사용할 수없는 경우, EFC 명령은 실행을 시작하기 위해 리턴 인수 버퍼를 사용할 수 있을 때까지 대기할 것이다. EFC 명령이 파이버를 성공적으로 생성하면 스레드는 EFC 명령 바로 다음 명령에서 계속된다.
또한, 호스트 프로세서 (110)에 의해 생성된 스레드는 EFC 명령을 실행하고 파이버를 생성할 수 있다는 점에 유의해야 한다. EFC 명령에 의해 생성된 파이버는 EFC 명령을 실행할 수 없으며 옵션으로 예외를 강제할 것이다. 이러한 파이버 생성 명령의 포맷이 표 5에 도시된다.
표 5:
Figure pct00005
스레드 리턴 명령들 :
스레드 리턴 (ETR) 명령은 현재 스레드를 개시한 부모 스레드로 인수를 다시 전달한다 (호스트 프로세서 (110) 스레드 생성 또는 HTP (300) 파이버 생성을 통해). 스레드가 리턴 명령을 완료하면, 스레드가 종료된다.
ETR.A2
이 명령은 HTP (300) 또는 호스트 프로세서 (110) 로의 리턴을 수행한다. ac 서피스는 HTP 또는 호스트에 전달될 추가 인수의 수를 지정한다. 인수 개수는 0, 1, 2 또는 4 값이 될 수 있다. 인수는 레지스터 상태 (a0-a3)에서 가져온다. 이러한 스레드 리턴 명령의 포맷이 표 6에 도시된다.
표 6 :
Figure pct00006
파이버 조인 명령 :
파이버 조인 (EFJ) 명령은 생성된 파이버가 리컨되었는지 확인한다. 명령은 조인 대기와 비대기의 2 가지 변형을 가진다. 대기 변형은 파이버가 리컨될 때까지 스레드 실행을 일시 중지할 것이다. 비대기 조인(join)은 스레드 실행을 일시 중지하지 않고 성공/실패 상태를 제공한다. 두 변형 모두에서, 미결 파이버 리턴없이 명령이 실행되면 예외가 생성된다.
리턴하는 파이버 (최대 4 개)의 인수는 레지스터 a0-a3에 기록된다.
EFJ
EFJ.NW
이러한 파이버 조인 명령의 포맷이 표 7에 도시된다.
표 7 :
Figure pct00007
파이버 조인 올 명령(Fiber Join All Instructions) :
파이버 조인 올 명령 (EFJ.ALL)은 모든 미결 파이버가 리턴될 때까지 펜딩된다. 0 개 이상의 펜딩 파이버 리턴으로 명령이 호출될 수 있다. 명령 상태 또는 예외가 생성되지 않는다. 파이버 리턴에서 임의의 리턴되는 인수는 무시된다.
EFJ.ALL
이러한 파이버 조인 올 명령의 포맷이 표 8에 도시된다.
표 8 :
Figure pct00008
원자 리턴 명령들 :
EMD 원자 리턴 명령 (EAR)은 커스텀 원자 동작의 실행 스레드를 완료하고 어쩌면 커스텀 원자 요청을 발행 한 소스에 다시 응답을 제공하는 데 사용된다.
EAR 명령는 0, 1 또는 2 개의 8 바이트 인수 값을 발행 컴퓨팅 엘리먼트로 다시 발송할 수 있다. 다시 발송할 인수의 수는 ac2 서피스 (A1 또는 A2)에 의해 결정된다. 서피스 없음은 인수가 없음을 의미하고, A1은 단일 8 바이트 인수를 의미하며, A2는 2 개의 8 바이트 인수를 의미한다. 필요한 경우 인수는 X 레지스터 a1 및 a2로부터 획득된다.
EAR 명령은 원자 명령과 관련된 메모리 라인 잠금을 해제할 수도 있다. EAR은 a0 레지스터의 값을 어드레스로 사용하여 잠금 해제 동작을 발송한다. 명령에 서피스 CL이 포함된 경우 잠금 해제 동작이 발행된다.
다음 DCAS 예는 EAR 명령을 사용하여 요청 프로세서로 성공 또는 실패를 다시 발송한다.
// a0 - 원자 어드레스
// a1 - a0의 64 비트 메모리 값
// a2 - DCAS 비교 값 1
// a3 - DCAS 비교 값 2
// a4 - DCAS 스왑 값 1
// a5 - DCAS 스왑 값 2
atomic_dcas :
bne a1, a2, 실패 // 제 1의 8 바이트 비교
ld.nb a6, 8 (a0) // 제 2의 8 바이트 메모리 값로드 - 메모리 캐시에 히트되어야 함
bne a6, a3, 실패 // 제 2의 8 바이트 비교
sd a4, 0 (a0) // 제 1의 8 바이트 스왑 값을 스레드 저장 버퍼에 저장
sd.cl a5, 8 (a0) // 제 2의 8 바이트 값 저장 및 메모리 잠금 해제
li a1, 0
ear.a1 // AMO 성공 응답
실패:
li a1, 1
ear.cl.a1 // AMO 실패 응답 (및 메모리 잠금 해제)
명령은 EFT 명령이 원자 동작과 관련된 메모리 잠금을 해제할 수 있도록 하는 2 가지 변형을 가지고 있다. 지원되는 명령의 포맷이 표 9에 도시된다.
표 9 :
Figure pct00009
제 1 및 제 2 우선 순위 명령들 :
제 2 (또는 낮은) 우선 순위 명령은 제 1 우선 순위를 가진 현재 스레드를 낮은 제 2 우선 순위로 전환한다. 이 명령은 일반적으로 스레드가 발생할 이벤트 (예를 들어, 장벽(barrier))에 대해 폴링할 때 사용된다.
ELP
ELP 명령의 포맷이 표 10에 도시된다.
표 10 :
Figure pct00010
제 1 (또는 높은) 우선 순위 명령은 제 2 (또는 낮은) 우선 순위를 가진 현재 스레드를 제 1 (또는 높은 또는 정상) 우선 순위로 전환한다. 이 명령은 일반적으로 스레드가 폴링되고 이벤트가 발생했을 때 (예를 들어, 장벽) 사용된다.
ENP
ENP 명령의 포맷이 표 11에 도시된다.
표 11 :
Figure pct00011
부동 소수점 원자 메모리 동작 :
부동 소수점 원자 메모리 동작은 메모리 제어기 (120)와 관련된 HTP (300)에 의해 수행된다. 수행되는 부동 소수점 연산은 32 비트 및 64 비트 데이터 유형 둘 모두에 대한 MIN, MAX 및 ADD이다.
명령의 aq 및 rl 비트는 원자 동작 (aq)을 발행하기 전에 모든 기록 데이터가 다른 스레드에 가시적일지 여부와 원자가 완료된(rl) 후 이전에 기록 된 모든 데이터가 이 스레드에 가시적이어야 하는지 여부를 지정한다. 다시 말해, aq 비트는 모든 기록 버퍼가 메모리에 다시 기록되어 지도록 하고, rl 비트는 모든 판독 버퍼가 무효화되도록 한다. rs1은 X 레지스터 값이고, rd 및 rs2는 F 레지스터 값이라는 것에 유의하여야 한다.
AMOFADD.S rd, rs2, (rs1)
AMOFMIN.S rd, rs2, (rs1)
AMOFMAX.S rd, rs2, (rs1)
AMOFADD.D rd, rs2, (rs1)
AMOFMIN.D rd, rs2, (rs1)
AMOFMAX.D rd, rs2, (rs1)
이러한 부동 소수점 원자 메모리 동작 명령의 포맷이 표 12에 도시된다.
표 12 :
Figure pct00012
커스텀 원자 메모리 동작 :
커스텀 원자 동작은 메모리 제어기(120)와 관련된 HTP (300)에 의해 수행된다. 동작은 RISC-V 명령을 실행하여 수행된다.
시스템 (100)의 메모리 제어기 (120) 내에서 최대 32 개의 커스텀 원자 동작이 이용 가능할 수 있다. 커스텀 원자학(atomics)은 시스템 (100)에 부착된 임의의 프로세스에 이용 가능한 시스템 전체 자원이다.
명령의 aq 및 rl 비트는 원자 동작 (rl)을 발행하기 전에 모든 기록 데이터가 다른 스레드에 가시적일지 여부와 원자가 완료된(aq) 후 이전에 기록 된 모든 데이터가 이 스레드에 가시적이어야 하는지 여부를 지정한다. 다시 말해, rl 비트는 모든 기록 버퍼가 메모리에 다시 기록되어 지도록 하고, aq 비트는 모든 판독 버퍼가 무효화되도록 한다.
커스텀 원자학은 메모리 어드레스를 지정하기 위해 a0 레지스터를 사용한다. 소스 인수의 수는 서피스(A0, A1, A2 또는 A4)에 의해 제공되며 레지스터 (a1-a4)로부터 획득된다. 메모리로부터 리턴되는 결과 값의 수는 0-2일 수 있으며 커스텀 메모리 동작에 의해 정의된다. 결과 값은 레지스터 a0-a1에 기록된다.
AMOCUST0.A4
이하의 커스텀 원자 명령은 표 13에 표시된 대로 정의된다.
표 13 :
Figure pct00013
ac 필드는 인수 수 (0, 1, 2 또는 4)를 지정하는 데 사용된다. 다음 표 14는 인코딩을 도시한다.
표 14 :
Figure pct00014
8 개의 커스텀 원자 명령이 정의되어 있으며 각각 4 개의 인수 카운트 변형이 있으므로 총 32 개의 가능한 커스텀 원자 연산자(operator)가 생성된다.
이벤트 관리:
시스템 (100)은 이벤트 드라이빙 아키텍처이다. 각각의 스레드는 이벤트 수신 마스크 레지스터 (342) 및 이벤트 상태 레지스터 (344)를 이용하여 모니터링할 수 있는 이벤트 세트를 갖는다. 이벤트 0은 생성된 파이버(HTP (300) 또는 HTF (200))으로부터 리턴되도록 리저브된다. 나머지 이벤트는 스레드 대 스레드, 브로드캐스트 또는 수집과 같은 이벤트 시그널링에 사용할 수 있다. 스레드 대 스레드는 스레드가 동일하거나 다른 노드의 특정 목적지 스레드에 이벤트를 발송하는 것을 허용한다. 브로드캐스트는 스레드가 해당 노드의 스레드 서브 세트에 명명된 이벤트를 발송하는 것을 허용한다. 수신 스레드는 예상되는 명명된 브로드캐스트 이벤트를 지정해야 한다. 수집은 이벤트가 활성화되기 전에 수신될 이벤트 번호를 지정하는 능력을 의미한다.
이벤트 트리거 비트는 클리어될 수 있고 (EEC 명령 사용), 모든 이벤트가 청취될 수 있다 (EEL 명령 사용). 청취 동작은 이벤트가 트리거될 때까지 스레드를 일시 중지하거나 다른 실행이 진행되는 동안 스레드가 주기적으로 폴링하도록 허용하는 비대기 모드 (.NW)에서 일시 중지할 수 있다.
스레드는 이벤트 발송 명령 (EES)을 사용하여 특정 스레드에 이벤트를 발송하거나 이벤트 브로드캐스트 명령 (EEB)을 사용하여 노드 내의 모든 스레드에 이벤트를 브로드캐스트할 수 있다. 브로드캐스트 이벤트는 발송하는 스레드가 이벤트 이름 (16 비트 식별자)을 지정하고 수신 스레드가 미리 지정된 이벤트 식별자에 대해 수신된 브로드캐스트 이벤트를 필터링하는 명명된 이벤트이다. 일단 수신되면 동일한 이벤트를 다시 수신하지 않도록 이벤트가 명시적으로 클리어되어야 한다 (EEC). 스레드가 실행을 시작할 때 모든 이벤트 트리거 비트가 클리어된는 점에 유의해야 한다.
이벤트 모드 명령들 :
이벤트 모드 (EEM) 명령은 이벤트에 대한 동작 모드를 설정한다. 이벤트 0은 스레드 리턴 이벤트를 위해 리저브되어 있으며 나머지 이벤트는 단순, 브로드캐스트 또는 수집(collection)의 3 가지 수신 모드 중 하나 일 수 있다.
단순 모드에서, 수신된 이벤트는 즉시 트리거된 비트가 설정되게 하고 수신된 메시지 수를 1 씩 증분시킨다. 새로 수신된 각각의 이벤트로 인해 수신된 이벤트 번호가 증분된다. 수신 이벤트 명령 (EER)은 수신된 이벤트 카운트를 1 씩 감분시키게 한다. 이벤트 트리거 비트는 카운트가 0으로 다시 전환되면 클리어된다.
브로드캐스트 모드에서, 수신된 이벤트의 채널은 이벤트 번호의 브로드캐스트 채널과 비교된다. 채널이 일치하면, 이벤트 트리거 비트가 설정된다. EER 명령은 트리거된 비트가 클리어되게 한다.
수집 모드에서, 수신된 이벤트는 이벤트 트리거 카운트를 1 씩 감분시키게 한다. 카운트가 0에 도달하면, 이벤트 트리거 비트가 설정된다. EER 명령은 트리거된 비트가 클리어되게 한다.
EEM 명령은 선택된 동작 모드에 대한 이벤트 번호를 준비한다. 단순 모드에서, 16 비트 이벤트 카운터는 0으로 설정된다. 브로드캐스트 모드의 경우, 16 비트 이벤트 채널 번호는 EEM 명령에 지정된 값으로 설정된다. 수집 모드의 경우, 16 비트 이벤트 카운터는 EEM 명령에 의해 지정된 값으로 설정된다. 3 가지 모드는 각각 동일한 16 비트 값을 다르게 사용한다.
EEM.BM rs1, rs2 ; rs1=이벤트 #, rs2=브로캐스트 채널
EEM.CM rs1, rs2 ; rs1=이벤트 #, rs2=수집 카운트
EEM.SM rs1 ; rs1=이벤트 #
이벤트 모드 명령의 포맷이 표 15에 도시된다.
표 15 :
Figure pct00015
이벤트 목적지 명령 :
이벤트 목적지 (EED) 명령은 실행 스레드 내의 이벤트에 대한 식별자를 제공한다. 식별자는 노드 내의 모든 실행 스레드에 걸쳐 고유하다. 식별자는 이벤트 발송 명령과 함께 사용되어 EES 명령을 사용하여 스레드에 이벤트를 발송할 수 있다. 식별자는 소스 스레드로부터 특정 목적지 스레드로 이벤트를 발송하는 데 필요한 정보를 포함하는 불투명한(opaque) 값이다.
식별자는 브로드캐스트 이벤트를 발송하기 위한 고유 값을 획득하기 위해 사용될 수도 있다. 식별자는 이벤트 번호를 위한 공간을 포함한다. 입력 레지스터 rs1은 목적지 스레드 식별자 내에서 인코딩할 이벤트 번호를 지정한다. 출력 rd 레지스터는 명령이 실행된 후 식별자를 포함한다.
EED rd, rs1
이벤트 목적지 명령의 포맷이 표 16에 도시된다.
표 16 :
Figure pct00016
이벤트 목적지 명령은 또한 자신의 어드레스를 획득하기 위해 프로세스에 의해 이용될 수 있으며, 이는 그런 다음 다른 브로드캐스트 메시지에서 예를 들어, 해당 프로세스가 목적지로서 다른 이벤트 메시지를 수신 할 수 있게 하기 위해, 예를 들어, 프로세스가 마스터 스레드일 때 메시지를 리턴하기 위해 사용될 수 있다.
이벤트 발송 명령 :
이벤트 발송 (EES) 명령은 이벤트를 특정 스레드로 발송한다. 레지스터 rs1은 목적지 스레드와 이벤트 번호를 제공한다. 레지스터 rs2는 옵션의 8 바이트 이벤트 데이터를 제공한다.
EES rs1
EES.A1 rs1, rs2
rs2 레지스터는 이벤트 발송 동작을 위한 타겟 HTP (300)을 제공한다. 레지스터 rs1은 발송할 이벤트 번호를 제공한다. rs1의 유효 값은 2-7이다. 이벤트 발송 명령의 포맷이 표 17에 도시된다.
표 17 :
Figure pct00017
이벤트 브로드캐스트 명령 :
이벤트 브로드캐스트 (EEB) 명령은 노드 내의 모든 스레드에 이벤트를 브로드캐스트를 지시한다. 레지스터 rs1은 발송할 브로드캐스트 채널을 제공한다 (0-65535). 레지스터 rs2는 옵션의 8 바이트 이벤트 데이터를 제공한다.
EEB rs1
EEB.A1 rs1, rs2
이벤트 브로드캐스트 명령의 포맷이 표 18에 도시된다.
표 18 :
Figure pct00018
이벤트 청취 명령 :
이벤트 청취 (EEL) 명령은 스레드가 수신된 이벤트의 상태를 모니터링할 수 있도록 한다. 명령은 대기 모드와 비대기 모드 중 하나로 동작할 수 있다. 대기 모드는 이벤트가 수신될 때까지 스레드를 일시 중지하고, 비대기 모드는 명령이 실행될 때 수신된 이벤트를 제공한다.
EEL rd, rs1
EEL.NW rd, rs1
레지스터 rs1은 청취 동작의 출력으로 사용 가능한 이벤트 마스크를 제공한다. 비대기 모드는 이벤트를 사용할 수 없는 경우 rs1에 0 값을 리턴할 것이다. 이벤트 청취 명령의 포맷이 표 19에 도시된다.
표 19 :
Figure pct00019
이벤트 수신 명령 :
이벤트 수신 (EER) 명령은 이벤트를 수신하는 데 사용된다. 이벤트 수신은 이벤트가 관측되었음을 확인 응답하는 것을 포함하고, 옵션 8 바이트 이벤트 데이터를 수신하는 것을 포함한다. 레지스터 rs1은 이벤트 번호를 제공한다. 레지스터 rd는 옵션의 8 바이트 이벤트 데이터를 포함한다.
EER rs1
EER.A1 rd, rs1
이벤트 수신 명령의 포맷이 표 20에 도시된다.
표 20 :
Figure pct00020
도 10은 HTP (300)의 제어 로직 및 스레드 선택 회로부 (330)의 스레드 선택 제어 회로부 (405)의 대표적인 실시예의 상세 블록도이다. 상기에서 언급한 바와 같이, 제 2 또는 낮은 우선 순위 큐 (360)가 제공되고, 스레드 선택 제어 회로부 (405)의 제어하에 스레드 선택 멀티플렉서 (385)를 사용하여 제 1 (또는 높은) 우선 순위 큐 (355) 또는 제 2 또는 낮은 우선 순위 큐 (360)로부터 스레드 ID가 선택된다. 제 2 우선 순위 큐 (360)의 스레드는 큐로부터 풀링되고, 제 1 우선 순위 큐 (360)의 스레드보다 낮은 속도로 실행된다.
전술한 바와 같이, 한 쌍의 명령 ENP 및 ELP는 스레드를 제 1 우선 순위로부터 제 2 우선 순위 (ELP)로, 제 2 우선 순위를 제 1 우선 순위 (ENP)로 전환하는 데 사용된다.
병렬 애플리케이션의 스레드는 종종 다른 스레드가 실행을 재개하기 위한 우선 순위를 완료할 때까지 대기하여야 한다 (즉, 장벽 동작). 스레드 간의 통신을 통해 대기 동작이 완료된다. 이 통신은 일시 중지된 스레드를 웨이크하는 이벤트 또는 메모리 위치 상에 대기중인 스레드 폴링에 의해 지원될 수 있다. 스레드가 폴링인 때, 모든 스레드가 생산적인 실행을 재개할 수 있도록 작업을 마무리해야 하는 스레드에서 사용할 수 있는 프로세싱 자원을 낭비하는 것이다. 제 2 또는 낮은 우선 순위 큐 (360)는 대기 스레드가 폴링 스레드의 오버 헤드를 감소시킬 낮은 우선 순위 모드로 진입하도록 허용한다. 이는 폴링 스레드의 스레드 실행 오버 헤드를 줄여 생산적인 작업을 완료해야 하는 스레드가 사용 가능한 프로세싱 자원의 대부분을 소비하도록 하는 역학을 한다.
구성 레지스터는 스레드 선택 제어 회로 (405)에 제공된 낮은 우선 순위 "스킵(skip)" 카운트로서 도 10에 예시된 각각의 낮은 우선 순위 스레드에 대해 실행될 높은 우선 순위 스레드의 수를 결정하는 데 사용되며, 이는 미리 결정된 간격으로 제 2 우선 순위 큐 (360)로부터 스레드를 선택한다. 달리 말하면, 스레드 선택 멀티플렉서 (385)는 제 1 우선 순위 큐 (355)로부터 미리 결정된 수 (즉, 스킵 카운트)를 연속적으로 선택하여 제 2 또는 낮은 우선 순위 큐 (360)로부터 임의의 스레드를 "스킵"할 것이다. 일단 제 1 우선 순위 큐 (355)로부터 미리 결정된 수의 스레드가 선택되면, 스레드 선택 멀티플렉서 (385)는 제 2 우선 순위 큐 (360)로부터 실행할 스레드를 선택할 것이고, 즉, 미리 결정된 수의 높은 우선 순위 스레드가 각각의 낮은 우선 순위 스레드에 대신 실행된다. 예시된 바와 같이, 스레드 선택 제어 회로부 (405)는 0이 될 때까지 스킵 카운트 (레지스터 (442), 멀티플렉서 (444) 및 가산기(adder) (446))를 감분시키고 (로직 블록 448), 해당 시점에서 스레드 선택 멀티플렉서 (385)의 선택 입력이 토글하여 제 2 또는 낮은 우선 순위 큐 (360)의 스레드를 선택한다.
따라서, 제 2 우선 순위 큐 (360)의 스레드는 큐로부터 풀링되고, 제 1 우선 순위 큐 (355)의 스레드보다 낮은 속도로 실행된다. 구성 레지스터 (예를 들어, 스레드 메모리 (320)에서)는 각각의 낮은 우선 순위 스레드에 대신 실행될 높은 우선 순위 스레드의 수를 결정하기 위해 사용된다. 한 쌍의 명령 ENP 및 ELP는 스레드를 제 1 (또는 정상) 우선 순위에서 제 2 낮은 우선 순위 (ELP)로, 제 2 낮은 우선 순위에서 제 1, 정상 우선 순위 (ENP)로 전환하는 데 사용된다.
도 11은 제 1 상호 접속 네트워크 (150)의 일부 및 대표적인 데이터 패킷의 대표적인 실시예의 도면이다. 대표적인 실시예에서, 제 1 상호 접속 네트워크 (150)는 네트워크 버스 구조 (152) (복수의 와이어 또는 라인)를 포함하고, 여기서, 제 1 복수의 네트워크 라인 (154)은 데이터 패킷 (158)의 어드레싱 (또는 라우팅) 전용이며, 다양한 크로스바(crossbar) 스위치를 통해 데이터 경로를 설정하는 데 사용되며, 나머지 제 2 복수의 네트워크 라인 (156)은 어드레싱 라인 (제 1 복수의 네트워크 라인 (154))을 통해 설정된 경로를 통해 데이터 패킷(오퍼랜드 데이터, 인수, 결과 등을 포함하는 데이터로드, "N"데이터 패킷 1621 내지 162N의 트레인(train) 또는 시퀀스로 설명됨)의 송신을 위해 전용된다. 2 개의 이러한 네트워크 버스 구조 (152)는 전형적으로 각각의 컴퓨팅 자원의 내부 및 외부에 채널, 데이터 수 신용 제 1 채널 및 데이터 송신용 제 2 채널로서 제공된다. 단일, 제 1 어드레싱 (또는 라우팅) 데이터 패킷 (어드레싱 (또는 라우팅) 데이터 패킷 (1581)으로 예시됨)은 제 1 지정된 목적지로의 라우팅을 수립하기 위해 이용될 수 있으며, 이어 미리 결정된 수의 데이터 패킷 (162) (예를 들어, 최대 N 개의 데이터 패킷)까지 제 1 지정된 목적지로 송신될 하나 이상의 데이터 패킷 (162)이 뒤따를 수 있다(일반적으로 스위치 설정을 허용하기 위해 나중에 여러 클럭 사이클). 미리 결정된 수의 데이터 패킷 (162)이 라우팅되는 동안, 다른 제 2 어드레싱 (또는 라우팅) 데이터 패킷 (어드레싱 (또는 라우팅) 데이터 패킷 (1582)으로 예시됨)이 제 2 지정 목적지로 갈 다른 후속 하나 이상의 데이터 패킷 (162)(데이터 패킷 (162N+1)으로 도시된)에 대해 제 2 지정된 목적지로의 라우팅을 수립하기 위해 송신 및 활용 될 수 있다.
도 12는 HTP (300)의 데이터 경로 제어 회로부 (395)의 대표적인 실시예의 상세 블록도이다. 상기에서 언급된 바와 같이, HTP (300) 중 하나 이상은 적응적 대역폭을 제공하여, 잠재적 혼잡을 관리하기 위해 제 1 상호 접속 네트워크 (150)를 통한 액세스 크기 (예를 들어, 메모리(125)로드 요청)를 제어하는 데 사용되는 데이터 경로 제어 회로부 (395)를 또한 포함할 수 있다.
애플리케이션 성능은 종종 메모리로부터 프로세서가 사용할 수 있는 대역폭에 의해 제한된다. 성능 제한은 애플리케이션에 필요한 데이터만 HTP (300)으로 가져 오는 것을 보장함으로써 완화될 수 있다. 데이터 경로 제어 회로부 (395)는 자동으로 (즉, 사용자 개입없이) 메인 메모리 (125)에 대한 요청의 크기를 감소시켜 프로세서 인터페이스 및 메모리 (125) 서브 시스템의 이용을 감소시킨다.
전술한 바와 같이, 시스템 (100)의 컴퓨팅 자원은 데이터 세트 전체에 분배된 작은 데이터 조각에 대한 빈번한 액세스로 희소 데이터 세트를 사용하는 많은 애플리케이션을 가질 수 있다. 결과적으로 상당한 양의 데이터에 액세스하면, 많은 데이터가 사용되지 않아 대역폭이 낭비될 수 있다. 예를 들어, 캐시 라인은 64 바이트일 수 있지만 모두 사용되는 것은 아니다. 다른 경우에는 효율적인 전력 사용과 같이 사용 가능한 모든 대역폭을 사용하는 것이 유익하다. 데이터 경로 제어 회로부 (395)는 주어진 애플리케이션의 성능을 최적화하기 위해 데이터 경로 로드의 크기 조정하여 예컨대, HTP (300) 로의 제 1 상호 접속 네트워크 (150)의 수신 (예를 들어, 응답) 채널의 이용에 기초하여 데이터 경로 로드를 8-32 바이트 (예로서)로 다운 조정하여 제 1 상호 접속 네트워크 (150)를 통해 동적 적응 대역폭을 제공한다.
데이터 경로 제어 회로부 (395)는 제 1 상호 접속 네트워크 (150)상의 사용 레벨을 모니터링하고 사용이 증가함에 따라 네트워크 인터페이스 회로부 (335)로부터의 메모리 (125) 로드 (즉, 판독) 요청의 크기를 감소시킨다. 대표적인 실시예에서, 데이터 경로 제어 회로부 (395)는 제 1 상호 접속 네트워크 (150)의 응답 채널의 이용 레벨의 시간 평균 가중 (시간 평균 이용 블록 (364))을 수행한다. 고정된 시간 기간 (조정 간격 타이머 (362)) 후에 임계 로직 회로 (366) (복수의 비교기 (482) 및 선택 멀티플렉서 (484, 486)를 가짐)를 사용하여 사용률이 임계값을 초과하는 경우 (로드 요청 크기가 최소값보다 큰 경우), 그러면 로드 요청의 크기는 로드 요청 액세스 크기 로직 회로 (368)에 의해 감소되어 (일반적으로, 마이너스 증분 492를 사용하여 임계 로직 회로 (366)로부터 2의 거듭 제곱 (예를 들어, 8 바이트)에 의해), (a) 더 적은 수의 데이터 패킷 (162)이 데이터 패킷 (162)의 트레인에 포함될 것이며, 해당 대역폭이 데이터 패킷을 다른 위치 또는 다른 프로세스로 라우팅하는 데 이용될 수 있도록 하거나; 또는 (b) 메모리 (125) 활용이 더 효율적이다 (예를 들어, 16 바이트 만 활용될 때 64 바이트가 요청되지 않음). 고정된 시간 기간 이후에 사용률이 임계값 미만이면 (및 로드 요청 크기가 최대 값보다 작음) 임계 로직 회로 (366)를 사용하여, 로드 요청의 크기가 일반적으로 더하기 증분 488을 사용하여 2의 거듭 제곱 (예를 들어, 8 바이트)으로 로드 요청 액세스 크기 로직 회로 (368)에 의해 증가된다. 로드 요청의 크기에 대한 최소값과 최대값은 사용자가 구성할 수 있지만 최소 크기는 일반적으로 발행하는 로드 명령의 크기 (예를 들어, 8 바이트와 같은 HTP (300)의 최대 오퍼랜드 크기)이고, 최대 크기는 캐시 라인 크기이다 (예를 들어, 32 또는 64 바이트). 대안적인 실시예에서, 데이터 경로 제어 회로부 (395)는 다수의 HTP (300)로부터의 대역폭 압력에 적응하여 메모리 제어기 (120)에 위치될 수 있다.
도 13은 호스트 인터페이스 회로부 (115) 및 HTP (300)의 시스템 호출 회로부 (415)의 대표적인 실시예의 상세 블록도이다. 대표적인 시스템 (100) 실시예는 HTP (300)와 같은 사용자 모드 전용 컴퓨팅 엘리먼트가 파일 열기, 인쇄 등과 같은 운영 체제를 실행하지 않고 시스템 호출, 브레이크포인트(breakpoint) 및 다른 특권 동작을 수행하는 것을 허용한다. 이를 위해, 이러한 시스템 동작 중 하나는 사용자 모드 명령을 실행하는 HTP (300)에 의해 발원된다. 프로세서의 명령 실행은 프로세서가 실행을 위해 요청을 호스트 프로세서 (110)로 포워딩해야 함을 식별한다. HTP (300)로부터의 시스템 요청은 호스트 프로세서 (110)로 발송되는 시스템 호출 작업 디스크립터 패킷의 포맷을 가지며, 이에 응답하여 HTP (300)는 시스템 호출 리턴 작업 디스크립터 패킷을 수신할 수 있다.
패킷 인코더 (380)에 의해 조립 및 전송되는 시스템 호출 작업 디스크립터 패킷은 시스템 호출 식별자 (예를 들어, 스레드 ID, 코어 (305) 번호, 프로그램 카운터가 나타내는 가상 어드레스, 시스템 호출 인수 또는 파라미터 (전형적으로 범용 레지스터 (328)에 저장됨) 및 리턴 정보를 포함한다. 패킷은 호스트 프로세서 (110) 메인 메모리의 예시된 DRAM FIFO (466)와 같은 메인 메모리 큐의 시스템 호출 작업 디스크립터 패킷에 기록하고 큐잉하는 호스트 인터페이스 (115) (SRAM FIFOs (464))로 전송되며, 기록 포인터를 증분시키고, 그런 다음 호스트 인터페이스 (115)는 또한 호스트 프로세서 (110)가 메모리에서 시스템 호출 작업 디스크립터 패킷을 폴링하도록 인터럽트(interrupt)를 호스트 프로세서 (110)에 발송한다. 호스트 프로세서의 운영 체제는 큐 (DRAM FIFO (466)) 엔트리에 액세스하고, 요청된 동작을 수행하고, 리턴 작업 디스크립터 데이터를 메인 메모리 큐 (DRAM FIFO (468))에 배치하고, 호스트 인터페이스 (115)에 신호를 보낼 수도 있다. 호스트 인터페이스 (115)는 리턴 큐 (DRAM FIFO (468))의 상태를 모니터링하고, 엔트리가 존재하면 데이터를 출력 큐 (SRAM 출력 큐 (472))로 이동시키고 제공된 작업 디스크립터 데이터로 리턴 작업 디스크립터 패킷을 포맷하고 리턴 작업 디스크립터 패킷을 시스템 호출 패킷을 발원시킨 HTP (300)로 발송한다.
HTP (300)의 패킷 디코더 (375)는 리턴 작업 디스크립터 패킷을 수신하고 리턴된 인수를 로컬 프로세서 (HTP 300)가 자체적으로 동작을 수행한 것처럼 범용 레지스터 (328)에 배치한다. 사용자 모드 HTP (300)에서 실행되는 애플리케이션에서 볼 때 이러한 투명한 실행으로 인해, 프로세서에 로컬 운영 체제가 있을 때 사용되는 동일한 프로그래밍 환경 및 런타임 라이브러리를 사용할 수 있으며 삽입된 브레이크포인트를 사용하여 예컨대, 프로그램 디버깅과 같은 다양한 상황에 매우 유용하다.
그러나, 호스트 인터페이스 (115)는 전형적으로 제한된 FIFO 공간을 가지며, 이는 다수의 HTP (300)가 이용될 때 문제가 될 수 있으며, 각각은 다수의 코어 (예를 들어, 96)를 가지고, 각각은 많은 수의 스레드 (예를 들어, 32/코어)를 실행할 수 있다. 호스트 인터페이스 (115)에 상당한 메모리를 추가하는 것을 방지하기 위해, HTP (300) 내의 각각의 HTP (300) 및 각각의 프로세서 코어 (305)에 대한 시스템 호출 크레딧 메커니즘을 사용하여 제출될 수 있는 전체 시스템 호출의 수가 제한된다.
각각의 프로세서 코어 (305)는 제 1 크레딧 카운트를 유지하는 시스템 호출 회로부 (415)의 일부로서 제 1 레지스터 (452)를 포함한다. HTP (300)에 따라 제공되는 시스템 호출 회로부 (415)는 사용 가능한 크레딧의 풀로서 제 2 크레딧 카운트를 포함하는 제 2 레지스터 (458)를 포함한다. 시스템 호출 작업 디스크립터 패킷이 생성될 때, 제 1 레지스터 (452)에 사용 가능한 크레딧이 충분하면, 시스템 호출 작업 디스크립터 패킷이 선택되어 (멀티플렉서 (454)) 송신될 수 있으며, 그렇지 않다면 시스템 호출 작업 디스크립터 패킷은 주어진 HTP (300)의 다른 프로세서 코어 (305)로부터의 다른 시스템 호출 작업 디스크립터 패킷과 잠재적으로 시스템 호출 작업 디스크립터 (시스템 호출) 패킷 테이블 (462)에 큐잉된다. 제 2 레지스터 (458)에 충분한 크레딧이 있고 시스템 호출의 버스트를 위한 추가 크레딧 풀을 제공하고 HTP (300)의 모든 프로세서 코어 (305)간에 공유되는 경우, 다음 시스템 호출 작업 디스크립터 패킷이 송신될 수 있으며, 그렇지 않으면 테이블에 홀딩된다.
이러한 시스템 호출 작업 디스크립터 패킷이 호스트 인터페이스 (115)에 의해 프로세싱되고 FIFO (464)로부터 판독될 때, 호스트 인터페이스 (115)는 시스템 호출 회로부(415)에 다시 확인 응답을 생성하고, 이는 레지스터 (456)에서 코어 당 크레딧 카운트를 증가시키고, 이는 각각의 프로세서 코어 (305)에 대해 제 1 레지스터 (452)의 제 1 크레딧 카운트를 차례로 증분시킬 수 있다.
대안적으로, 레지스터 (456)는 코어 당 별도의 제 1 레지스터 (452)를 요구하지 않고, 대신에 다시 코어 (305) 당레지스터 (456)의 제 1 카운트를 유지하면서 제 1 레지스터 (452)와 동등하게 활용될 수 있다. 또 다른 대안으로서, 모든 시스템 호출 작업 디스크립터 패킷은 코어 (305) 단위로 시스템 호출 작업 디스크립터 패킷 테이블 (462)에 큐잉될 수 있고, 코어가 대응하는 레지스터 (456)에 충분한 제 1 크레딧 카운트를 갖거나 제 2 레지스터 (458)에서 이용 가능한 충분한 크레딧을 가질 때 송신된다.
스레드 상태 모니터링을 위한 메커니즘도 제공되어 하드웨어의 HTP (300)에서 실행중인 스레드 세트의 상태를 수집하고, 프로그래머가 애플리케이션의 작동에 대한 가시성을 가질 수 있다. 이 특징으로, 호스트 프로세서 (110)는 예를 들어 사용자 프로파일링 리포트(report)를 생성하는데 나중에 사용하기 위해 주기적으로 정보에 액세스하고 저장할 수 있다. 제공된 가시성을 통해 프로그래머는 성능을 향상시키기 위해 애플리케이션을 변경할 수 있다.
모든 스레드 상태 변경이 모니터링될 수 있으며 각각의 상태의 시간에 대한 통계가 유지된다. 통계를 수집하는 프로세서 (110 또는 300)는 별도의 제 2 프로세서 (110 또는 300)가 데이터를 액세스하고 저장할 수 있는 수단을 제공한다. 데이터는 애플리케이션이 실행될 때 수집되어 주기적으로 보고되는 각각의 상태의 시간의 양을 보여주는 레포트를 애플리케이션 분석기에 제공할 수 있고, 이는 애플리케이션 분석기가 나중에 사용할 수 있도록 실행중인 애플리케이션에 대한 상세한 가시성을 제공한다.
하드웨어 또는 소프트웨어로 구현될 수 있는 대표적인 실시예에 따르면, 스레드에 관한 모든 정보는 스레드 메모리 (320)의 다양한 레지스터에 저장되고, 다른 위치에 정기적으로 복사 및 저장될 수 있다. 카운터는 주어진 스레드가 선택된 상태 예를 들어, 일시 중지된 상태에서 소비하는 시간의 양을 캡처하는 데 사용될 수 있다. 예를 들어, 호스트 프로세서 (110)는 모든 스레드 및 스레드 카운터의 현재 상태 (상태에서 소요된 시간의 양) 또는 상태와 카운트 간의 차이 (델타)를 시간에 따라 로그(log)하거나 캡처하여 파일에 기록하거나 다른 식으로 메모리에 저장한다. 예를 들어, 프로그램이나 스레드는 모든 스레드가 다른 작업을 시작하기 전에 완료해야 하는 장벽이 될 수 있으며, 다양한 장벽을 통과하거나 상태가 변경될 때 어떤 스레드가 어떤 상태에 있는지 모니터링하는 것이 도움이 된다. 아래에 설명된 코드는 하드웨어로 실행되거나 하드웨어로 변환될 수 있는 시뮬레이터 코드의 예이다:
Figure pct00021
Figure pct00022
대표적인 실시예들의 많은 장점들이 용이하게 이해된다. 예를 들어, 제한 없이, 예컨대, 합성 개구 레이더, 5G 기지국, 및 그래프 분석 애플리케이션 예컨대, 스펙트럼 기술을 사용하는 그래프 클러스터링, 기계 학습, 5G 네트워킹 알고리즘 및 대형 스텐실 코드와 같은 감지, 통신 및 분석 애플리케이션에 사용되는 FFT (Fast Fourier Transform) 및 FIR (Finite Impulse Response) 필터 계산과 같은 계산 집약적 커널을 위한 고성능 및 에너지 효율적인 솔루션을 제공할 수 있는 컴퓨팅 아키텍처에 대한 대표적인 장치, 시스템, 및 방법이 제공된다.
본 출원에 사용된, "프로세서 코어"는 임의의 유형의 프로세서 코어일 수 있고, 본 출원에서 논의된 기능을 수행하도록 구성, 디자인, 프로그래밍 또는 다른 방식으로 적응되는 하나 이상의 프로세서 코어로서 구현될 수 있다. 본 출원에 사용된, "프로세서(110)"는 임의의 유형의 프로세서일 수 있고, 본 출원에서 논의된 기능을 수행하도록 구성, 디자인, 프로그래밍 또는 다른 방식으로 적응되는 하나 이상의 프로세서로서 구현될 수 있다. 본 출원에서 프로세서라는 용어가 사용될 때, 프로세서 (110 또는 300)는 단일 집적 회로 ("IC")의 사용을 포함하거나 함께 연결, 배열 또는 그룹화된 복수의 집적 회로 또는 다른 컴포넌트 예컨대, 아날로그 또는 디지털이든 제어기, 마이크로 프로세서, 디지털 신호 프로세서 ("DSP"), 어레이 프로세서, 그래픽 또는 이미지 프로세서, 병렬 프로세서, 다중 코어 프로세서, 커스텀 IC, 주문형 IC ("ASIC"), 필드 프로그래밍 가능 게이트 어레이 ("FPGA "), 적응형 컴퓨팅 IC, 관련 메모리 (예를 들어, RAM, DRAM 및 ROM), 다른 IC 및 컴포넌트의 사용을 포함할 수 있다. 결과적으로, 본 출원에서 사용된, 프로세서 또는 제어기라는 용어는 단일 IC 또는 커스텀 IC, ASIC, 프로세서, 마이크로 프로세서, 제어기, FPGA, 적응형 컴퓨팅 IC 또는 다른 그룹의 배열 또는 마이크로 프로세서 메모리 또는 추가 RAM, DRAM, SDRAM, SRAM, MRAM, ROM, FLASH, EPROM 또는 E2PROM과 같은 관련 메모리와 함께 본 출원에서 논의된 기능을 수행하는 집적 회로의 일부 다른 그룹핑을 의미하고 포함하는 것으로 이해되어야 한다. 관련 메모리를 갖는 프로세서 (110 또는 300)는 본 출원에서 논의된 본 발명의 방법론을 수행하기 위해 (프로그래밍, FPGA 상호 접속 또는 하드 와이어링을 통해) 적응 또는 구성될 수 있다. 예를 들어, 방법론은 관련 메모리 (및/또는 메모리 (125)) 및 다른 등가 컴포넌트와 함께 프로세서 (300)에 프로세서 (110 또는 300)가 동작할 때 (즉, 전원이 켜지고 기능할 때) 후속 실행을 위해 프로그램 명령 또는 후속 코드 (또는 등가 구성 또는 다른 프로그램)의 세트로 프로그래밍되고 저장될 수 있다. 동등하게, 프로세서 (300)가 FPGA, 커스텀 IC 및/또는 ASIC로서 전체 또는 부분적으로 구현될 수 있을 때, FPGA, 커스텀 IC 또는 ASIC는 또한 본 발명의 방법론을 구현하도록 디자인, 구성 및/또는 하드 와이어링될 수 있다. 예를 들어, 프로세서 (110 또는 300)는 가능한 메모리 (125)와 결합하는 것을 포함하여 본 발명의 방법론을 구현하도록 개별적으로 하드 와이어링, 프로그래밍, 디자인, 적응 또는 구성된 "프로세서" 또는 "제어기"로 통칭되는 아날로그 및/또는 디지털 회로, 제어기, 마이크로 프로세서, DSP 및/또는 ASIC의 배열로 구현될 수 있다.
데이터 저장소 (또는 데이터베이스)를 포함할 수 있는 메모리 (125)는 임의의 수의 형태로 구현될 수 있고, 현재 알려져 있거나 향후 사용 가능하게 되는 임의의 컴퓨터 또는 다른 기계 판독 가능 데이터 저장 매체, 메모리 디바이스 또는 정보의 저장 또는 통신을 위한 다른 저장 장치 또는 통신디바이스를 포함하고, 제한없이, 제거 가능이든 제거 불가능이든, 휘발성이든 비 휘발성이든, 메모리 집적 회로 ("IC") 또는 집적 회로의 메모리 부분 (예를 들어, 프로세서 또는 프로세서 IC 내의 상주 메모리)를 포함하고, 제한없이 RAM, FLASH, DRAM, SDRAM, SRAM, MRAM, FeRAM, ROM, EPROM 또는 E2PROM 또는 다른 형태의 메모리 디바이스 예컨대, 마그네틱 하드 드라이브, 광학 드라이브, 마그네틱 디스크 또는 테이프 드라이브, 하드 디스크 드라이브, 다른 기계 판독 가능 저장 장치 또는 플로피 디스크, CDROM, CD- RW, 디지털 다용도 디스크 (DVD) 또는 선택된 실시예에 따라, 공지되거나 공지되는 다른 광학 메모리 또는 임의의 다른 유형의 메모리, 저장 매체, 또는 데이터 저장 장치 또는 회로를 포함한다. 메모리 (125)는 다양한 룩업 테이블, 파라미터, 계수, 다른 정보 및 데이터, 프로그램 또는 명령 (본 발명의 소프트웨어의), 및 데이터베이스 테이블과 같은 다른 유형의 테이블을 저장하도록 구성될 수 있다.
상술한 바와 같이, 프로세서 (110 또는 300)는 예를 들어, 본 발명의 방법론을 수행하기 위해 본 발명의 소프트웨어 및 데이터 구조를 사용하여 하드 와이어링 또는 프로그래밍된다. 결과적으로, 다양한 명령을 포함하는 본 발명의 시스템 및 관련 방법은 예컨대, 상기에서 논의된 판독 가능한 비 일시적 컴퓨터 내에 구현된 명령 세트및/또는 메타 데이터와 같은 그러한 프로그래밍 또는 다른 명령을 제공하는 소프트웨어로 구현될 수 있다. 또한 메타 데이터는 룩업 테이블 또는 데이터 베이스의 다양한 데이터 구조를 정의하는 데 사용될 수 있다. 이러한 소프트웨어는 예를 들어, 제한없이 소스 또는 객체 코드의 형태일 수 있다. 소스 코드는 추가로 어떤 형태의 명령이나 객체 코드 (어셈블리 언어 명령 또는 구성 정보 포함)로 컴파일될 수 있다. 본 발명의 소프트웨어, 소스 코드 또는 메타 데이터는 C, C ++, Matlab, SystemC, LISA, XML, Java, Brew, SQL 및 그 변형 (예를 들어, SQL 99 또는 SQL의 독점 버전), DB2, Oracle 또는 다양한 하드웨어 정의 또는 하드웨어 모델링 언어 (예를 들어, Verilog, VHDL, RTL) 및 결과 데이터베이스 파일 (예를 들어, GDSII)을 포함하는 본 출원에 설명된 기능을 수행하는 다른 유형의 프로그래밍 언어와 같은 모든 유형의 코드로 구현될 수 있다. 결과적으로, 본 출원에서 동등하게 사용되는 "구성", "프로그램 구성", "소프트웨어 구성" 또는 "소프트웨어"는 구문 또는 시그니처가 있는 임의의 종류의 프로그래밍 언어를 의미하고 지칭하고, 이는 지정된 관련 기능 또는 방법론을 제공하거나 제공하도록 해석될 수 있다 (예를 들어, 프로세서(300)을 포함하는 프로세서 또는 컴퓨터에 인스턴스화되거나 로드되고 실행될 때).
본 발명의 소프트웨어, 메타 데이터 또는 다른 소스 코드 및 결과적인 비트 파일 (객체 코드, 데이터베이스 또는 룩업 테이블)은 예컨대, 컴퓨터 판독 가능 명령, 데이터 구조, 프로그램 모듈 또는 다른 데이터와 같은 컴퓨터 또는 기타 기계 판독 가능 데이터 저장 매체 메모리 (125)와 관련하여 위에서 논의된 예를 들어 플로피 디스크, CDROM, CD-RW, DVD, 자기 하드 드라이브, 광학 드라이브, 또는 상기에서 언급된 임의의 다른 유형의 데이터 저장 장치 또는 매체와 같은 임의의 유형의 비 일시적 저장 매체 내에 구현될 수 있다.
본 개시는 본 발명의 원리의 예시로서 고려되어야 하며, 본 발명을 예시된 특정 실시예로 한정하려는 의도는 아니다. 이와 관련하여, 본 발명은 구성의 세부 사항 및 상기 및 아래에 설명된 컴포넌트의 배열, 도면에 예시되거나 실시예에 설명된 그 애플리케이션에 한정되지 않는다는 것을 이해해야 한다. 본 발명에 따른 시스템, 방법 및 장치는 다른 실시예가 가능하고 다양한 방식으로 실행 및 수행될 수 있다.
본 발명이 특정 실시예에 대해 설명되었지만, 이들 실시예는 단지 예시 일뿐 본 발명을 한정하는 것은 아니다. 본 출원에서의 설명에서, 본 발명의 실시예에 대한 철저한 이해를 제공하기 위해 전자 컴포넌트, 전자 및 구조적 연결, 재료 및 구조적 변형의 예와 같은 수많은 특정 세부 사항이 제공된다. 그러나, 당업자는 본 발명의 실시예가 하나 이상의 특정 세부 사항없이 또는 다른 장치, 시스템, 어셈블리, 컴포넌트, 재료, 부품 등과 실시될 수 있음을 인식할 것이다. 다른 예에서, 주지의 구조, 재료 또는 동작은 본 발명의 실시예의 양태를 모호하게 하는 것을 피하기 위해 구체적으로 도시되거나 상세하게 설명되지 않는다. 추가하여, 다양한 도면들은 축척에 맞게 도시되지 않았으며 한정적인 것으로 간주되어서는 안 된다.
본 명세서 전반에 걸쳐 "하나의 실시예", "일 실시예" 또는 특정 "실시예"에 대한 언급은 실시예와 관련하여 설명 된 특정 특징, 구조 또는 특성이 본 발명의 적어도 하나의 실시예에 포함된다는 것을 의미하고, 모든 실시예에서 반드시 필요한 것은 아니며, 또한 반드시 동일한 실시예를 언급하는 것은 아니다. 더욱이, 본 발명의 임의의 특정 실시예의 특정 특징, 구조 또는 특성은 임의의 적합한 방식으로 그리고 다른 특징의 대응하는 사용없이 선택된 특징의 사용을 포함하여 하나 이상의 다른 실시예와 임의의 적합한 조합으로 결합 될 수 있다. 또한, 본 발명의 본질적인 범위 및 취지에 특정 애플리케이션, 상황 또는 재료를 적용하기 위해 많은 수정이 이루어질 수 있다. 본 명세서에 설명되고 예시된 본 발명의 실시예의 다른 변형 및 수정이 본 명세서의 교시에 비추어 가능하며 본 발명의 취지 및 범위의 일부로 간주되어야 함을 이해해야 한다.
본 명세서에서 숫자 범위의 인용을 위해, 동일한 정밀도를 갖는 그 사이의 각각의 개재 숫자가 명시적으로 고려된다. 예를 들어, 6-9 범위의 경우 6 및 9에 추가하여 숫자 7 및 8이 고려되고 범위 6.0-7.0의 경우, 숫자 6.0, 6.1, 6.2, 6.3, 6.4, 6.5, 6.6, 6.7, 6.8, 6.9 및 7.0이 명시적으로 고려된다. 또한, 범위 내의 모든 개입 서브 범위는 임의의 조합으로 고려되며 본 개시의 범위 내에 있다. 예를 들어, 5 - 10 범위의 경우, 서브 범위 5 - 6, 5 - 7, 5 - 8, 5 - 9, 6 - 7, 6 - 8, 6 - 9, 6 - 10, 7 - 8, 7 - 9, 7 - 10, 8 - 9, 8 - 10 및 9 - 10이 고려되며 개시된 범위의 범위 내에 있다.
또한, 도면에 도시된 엘리먼트 중 하나 이상은 또한 더 분리되거나 통합된 방식으로 구현될 수 있으며, 특정 애플리케이션에 따라 유용할 수 있는 특정 경우에 제거되거나 동작 불가능하게 될 수도 있음을 이해할 것이다. 일체로 형성된 컴포넌트의 조합은 또한 본 발명의 범위 내에 있으며, 특히 이산의 컴포넌트의 분리 또는 조합이 불분명하거나 식별할 수 없는 실시예에 대한 것이다. 또한, "결합"또는 "결합 가능한"과 같은 다양한 형태를 포함하여 본 출원에서 "결합된"이라는 용어의 사용은 일체로 형성된 컴포넌트 및 다른 컴포넌트를 통해 또는 다른 컴포넌트를 통해 결합되는 컴포넌트를 포함하는 임의의 직접 또는 간접 전기, 구조 또는 자기 결합, 연결 또는 부착, 또는 직접 또는 간접 전기, 구조 또는 자기 결합, 연결 또는 부착에 대한 적응 또는 기능을 포함하고 의미한다.
신호와 관련하여, 본 출원에서 주어진 메트릭을 "표현"하거나 주어진 메트릭을 "대표하는" 파라미터를 지칭하며, 여기서 메트릭은 레귤레이터 또는 그 입력 또는 출력의 적어도 일부 상태의 측정치이다. 파라미터가 메트릭과 직접적으로 관련되어있어 파라미터를 조정하면 메트릭을 만족스럽게 조정할 수 있으면 파라미터수가 메트릭을 나타내는 것으로 간주된다. 파라미터가 메트릭의 배수 또는 부분을 나타내는 경우 메트릭의 허용 가능한 표현으로 간주될 수 있다.
더욱이, 도면/도면들의 임의의 신호 화살표는 달리 구체적으로 언급되지 않는 한 한정적이지 않고 단지 예시적인 것으로 간주되어야 한다. 특히 분리 또는 조합하는 능력이 불분명하거나 예측 가능한 경우, 단계의 컴포넌트의 조합도 본 발명의 범위 내에서 고려될 것이다. 본 출원 및 다음 청구 범위 전체에서 사용되는 택일적인 용어 "또는(or)"은 일반적으로 달리 명시되지 않는 한, 결합 및 택일 의미를 모두 갖는 "및/또는"을 의미하는 것으로 의도된다 (및 "배타적 또는"의미에 한정되지 않음). 본 출원의 설명 및 후속 청구 범위 전체에서 사용되는, "a", "an"및 "the"는 문맥이 달리 명확하게 지시하지 않는 한 복수 참조를 포함한다. 또한 본 출원의 설명 및 이하의 청구 범위 전체에서 사용되는, "안에(in)"의 의미는 문맥이 명백하게 달리 지시하지 않는 한 "안에" 및 "상에(on)"를 포함한다.
발명의 요약 또는 요약에서 설명된 것을 포함하여 본 발명의 예시된 실시예에 대한 전술한 설명은 본 출원에 개시된 정확한 형태로 본 발명을 총망라하거나 한정하려는 의도가 아니다. 전술한 내용으로부터, 본 발명의 새로운 개념의 취지 및 범위를 벗어나지 않고 다양한 변형, 수정 및 대체가 의도되고 실행될 수 있음을 알 수 있을 것이다. 본 출원에 예시된 특정 방법 및 장치에 대한 제한이 의도되거나 추론되어서는 안 된다는 것을 이해해야 한다. 물론, 이는 청구 범위의 범위 내에 있는 모든 그러한 수정을 첨부된 청구 범위에 의해 포함하도록 의도된다.

Claims (22)

  1. 호스트 프로세서를 갖는 시스템에서 상호 접속 네트워크에 결합 가능한 프로세서에 있어서,
    복수의 명령을 실행하도록 적응된 프로세서 코어; 및
    상기 프로세서 코어에 결합된 코어 제어 회로를 포함하되, 상기 코어 제어 회로는,
    상기 호스트 프로세서로 하나 이상의 시스템 호출 메시지를 송신하기 위해 상기 상호 접속 네트워크에 결합 가능한 상호 접속 네트워크 인터페이스;
    복수의 레지스터를 포함하는 스레드 제어 메모리(thread control memory)로서, 상기 복수의 레지스터는 복수의 스레드 식별자를 저장하는 스레드 식별자 풀 레지스터, 수신된 프로그램 카운트를 저장하는 프로그램 카운트 레지스터, 데이터 캐시 및 수신된 인수(argument)를 저장하는 범용 레지스터를 포함하는, 상기 스레드 제어 메모리;
    상기 스레드 제어 메모리에 결합된 실행 큐(execution queue);
    상기 실행 큐에 결합된 제어 로직 및 스레드 선택 회로로서, 상기 제어 로직 및 스레드 선택 회로는 사용 가능한 스레드 식별자를 실행 스레드에 할당하고, 상기 스레드 식별자를 상기 실행 큐에 자동으로 배치하고, 상기 복수의 명령 중 상기 실행 스레드의 명령의 상기 프로세서 코어에 의한 실행을 위해 상기 스레드 식별자를 주기적으로 선택하도록 적응되고, 상기 프로세서 코어는 상기 데이터 캐시 또는 상기 범용 레지스터에 저장된 데이터를 사용하는, 상기 제어 로직 및 스레드 선택 회로;
    상기 호스트 프로세서에 상기 하나 이상의 시스템 호출 메시지를 생성하도록 적응된 시스템 호출 회로부를 포함하는, 프로세서.
  2. 제 1 항에 있어서, 상기 호스트 프로세서는 하나 이상의 시스템 호출 메시지를 수신하고, 하나 이상의 대응 결과를 생성하기 위해 하나 이상의 시스템 호출 메시지를 프로세싱하고, 리턴 작업 디스크립터 패킷을 생성하여 상기 프로세서로 송신하도록 적응된, 프로세서.
  3. 제 1 항에 있어서, 상기 상호 접속 네트워크 인터페이스는 상기 하나 이상의 시스템 호출 메시지의 하나 이상의 대응하는 결과를 갖는 리턴 작업 디스크립터 패킷을 수신 및 디코딩하고, 상기 대응하는 결과를 상기 스레드 제어 메모리에 저장하도록 적응된, 프로세서.
  4. 제 1 항에 있어서, 상기 시스템 호출 회로부는,
    임의의 미리 결정된 시간 주기에서 다수의 시스템 호출 메시지를 변조하기 위해 미리 결정된 크레딧 카운트(credit count)를 저장하는 복수의 시스템 호출 크레딧 레지스터를 더 포함하는, 프로세서.
  5. 제 1 항에 있어서, 상기 코어 제어 회로는 작업 디스크립터 데이터 패킷을 수신하기 위해 상호 접속 네트워크에 결합 가능한 상호 접속 네트워크 인터페이스를 더 포함하고, 상기 상호 접속 네트워크 인터페이스는 상기 수신된 작업 디스크립터 데이터 패킷을 초기 프로그램 카운트 및 임의의 수신된 인수를 갖는 실행 스레드로 디코딩하도록 적응된, 프로세서.
  6. 제 5 항에 있어서, 상기 상호 접속 네트워크 인터페이스는 상기 프로세서 코어에 의한 리턴 명령의 실행에 응답하여 리턴 작업 디스크립터 패킷을 생성하도록 추가로 적응된, 프로세서.
  7. 제 5 항에 있어서, 상기 상호 접속 네트워크 인터페이스는 이벤트 데이터 패킷을 수신하고, 상기 수신된 이벤트 데이터 패킷을 이벤트 식별자 및 임의의 수신된 인수로 디코딩하도록 추가로 적응된, 프로세서.
  8. 제 1 항에 있어서, 상기 상호 접속 네트워크 인터페이스는 점 대 점(point-to-point) 이벤트 데이터 메시지 및 브로드캐스트(broadcast) 이벤트 데이터 메시지를 생성하고 수신하도록 추가로 적응된, 프로세서.
  9. 제 1 항에 있어서, 상기 프로세서 코어는 파이버 생성 명령(fiber create instruction)을 실행하도록 적응되고, 상기 코어 제어 회로는 대응하는 복수의 실행 스레드의 실행을 위해 다른 프로세서 또는 하이브리드 스레딩 패브릭 회로에 하나 이상의 작업 디스크립터 데이터 패킷을 생성하도록 추가로 적응된, 프로세서.
  10. 제 9 항에 있어서, 상기 제어 로직 및 스레드 선택 회로는 리턴 인수를 저장하기 위해 스레드 제어 메모리에 미리 결정된 양의 메모리 공간을 리저브(reserve)하도록 추가로 적응된, 프로세서.
  11. 제 1 항에 있어서, 상기 제어 로직 및 스레드 선택 회로는 수신된 이벤트 데이터 패킷에 대응하는 이벤트 번호를 결정하고, 수신된 이벤트 데이터 패킷에 응답하기 위해 이벤트 마스크 레지스터(event mask register)에 저장된 이벤트 마스크를 사용하도록 추가로 적응된, 프로세서.
  12. 제 1 항에 있어서, 상기 코어 제어 회로는,
    상호 접속 네트워크 인터페이스;
    네트워크 응답 메모리;
    상기 제어 로직 및 스레드 선택 회로에 결합된 명령 캐시(instruction cache); 및
    커맨드 큐(command queue)를 더 포함하는, 프로세서.
  13. 제 1 항에 있어서, 상기 제어 로직 및 스레드 선택 회로는 유효 상태를 상기 실행 스레드의 스레드 식별자에 할당하고, 유효 상태가 유지되는 한, 상기 실행 스레드가 완료될 때까지 상기 프로세서 코어에 의한 상기 실행 스레드의 명령 실행을 위해 상기 스레드 식별자를 주기적으로 선택하고, 일시 중지 상태(pause state)일 때 상기 스레드 식별자를 상기 실행 큐에 리턴하지 않음으로써 상기 스레드 실행을 일시 중지하도록 추가로 적응된, 프로세서.
  14. 제 1 항에 있어서, 상기 스레드 제어 메모리는 스레드 상태 레지스터; 펜딩(pending) 파이버 리턴 카운트 레지스터; 리턴 인수 버퍼 또는 레지스터; 리턴 인수 링크 리스트 레지스터; 커스텀 원자 트랜잭션 식별자 레지스터(custom atomic transaction identifier register); 이벤트 수신 마스크 레지스터; 이벤트 상태 레지스터; 및 이들의 조합으로 구성된 그룹으로부터 선택된 레지스터를 더 포함하는, 프로세서.
  15. 제 1 항에 있어서, 상기 제어 로직 및 스레드 선택 회로는 상기 프로세서 코어가 메모리 로드 명령 또는 메모리 저장 명령을 실행한 것에 응답하여 상기 실행 스레드에 일시 중지 상태를 할당하도록 추가로 적응된, 프로세서.
  16. 제 1 항에 있어서, 상기 제어 로직 및 스레드 선택 회로는 대응하는 실행 스레드의 실행을 재개하기 위해 수신된 이벤트 데이터 패킷의 이벤트 번호에 응답하거나 또는 대응하는 실행 스레드의 실행을 재개하기 위해 수신된 이벤트 데이터 패킷에 응답하여 스레드 식별자의 상태를 일시 중지로부터 유효로 변경하도록 추가로 적응된, 프로세서.
  17. 제 1 항에 있어서, 상기 제어 로직 및 스레드 선택 회로는 선택된 스레드의 실행을 종료하고 상기 프로세서 코어에 의한 리턴 명령의 실행에 응답하여 상기 선택된 스레드의 대응하는 스레드 식별자를 상기 스레드 식별자 풀 레지스터(pool register)로 리턴하도록 추가로 적응된, 프로세서.
  18. 제 17 항에 있어서, 상기 제어 로직 및 스레드 선택 회로는 상기 프로세서 코어에 의한 리턴 명령의 실행에 응답하여 상기 선택된 스레드의 대응하는 스레드 식별자에 의해 인덱싱된 상기 스레드 제어 메모리의 레지스터를 클리어(clear)하도록 추가로 적응된, 프로세서.
  19. 제 1 항에 있어서, 상기 실행 큐는,
    제 1 우선 순위 큐; 및
    제 2 우선 순위 큐를 더 포함하는, 프로세서.
  20. 제 19 항에 있어서, 상기 제어 로직 및 스레드 선택 회로는,
    상기 실행 큐에 결합된 스레드 선택 제어 회로부를 더 포함하되, 상기 스레드 선택 제어 회로부는 제 1 빈도로 제 1 우선 순위 큐로부터 스레드 식별자를 선택하고, 제 2 빈도로 제 2 우선 순위 큐로부터 스레드 식별자를 선택하도록 적응되고, 상기 제 2 빈도는 제 1 빈도보다 낮은, 프로세서.
  21. 호스트 프로세서를 갖는 시스템에서 상호 접속 네트워크에 결합 가능한 프로세서에 있어서,
    복수의 명령을 실행하도록 적응된 프로세서 코어; 및
    상기 프로세서 코어에 결합된 코어 제어 회로를 포함하되, 상기 코어 제어 회로는,
    하나 이상의 시스템 호출 메시지를 상기 호스트 프로세서로 송신하고, 작업 디스크립터 데이터 패킷을 수신하고, 상기 수신된 작업 디스크립터 데이터 패킷을 초기 프로그램 카운트 및 임의의 수신된 인수를 갖는 실행 스레드로 디코딩하기 위해 상호 접속 네트워크에 결합 가능한 상호 접속 네트워크 인터페이스;
    상기 상호 접속 네트워크 인터페이스에 결합되고 복수의 레지스터를 포함하는 스레드 제어 메모리로서, 상기 복수의 레지스터는 복수의 스레드 식별자를 저장하는 스레드 식별자 풀 레지스터, 스레드 상태 레지스터, 수신된 프로그램 카운트를 저장하는 프로그램 카운트 레지스터, 데이터 캐시 및 수신된 인수를 저장하는 범용 레지스터를 포함하는, 상기 스레드 제어 메모리;
    상기 스레드 제어 메모리에 결합된 실행 큐(execution queue);
    상기 실행 큐 및 상기 스레드 제어 메모리에 결합된 제어 로직 및 스레드 선택 회로로서, 상기 제어 로직 및 스레드 선택 회로는 사용 가능한 스레드 식별자를 실행 스레드에 할당하고, 상기 스레드 식별자를 상기 실행 큐에 배치하고, 실행할 상기 스레드 식별자를 선택하고, 상기 실행 스레드에 대한 초기 프로그램 카운트를 선택하기 위한 인덱스로 상기 스레드 식별자를 사용하여 상기 스레드 제어 메모리에 액세스하도록 적응된, 상기 제어 로직 및 스레드 선택 회로; 및
    상기 프로세서 코어 및 상기 제어 로직 및 스레드 선택 회로에 결합되어 상기 초기 프로그램 카운트를 수신하고 복수의 명령의 실행을 위한 대응 명령을 상기 프로세서 코어에 제공하는 명령 캐시; 및
    상기 호스트 프로세서에 상기 하나 이상의 시스템 호출 메시지를 생성하도록 적응된 시스템 호출 회로부를 포함하는, 프로세서.
  22. 호스트 프로세서를 갖는 시스템에서 상호 접속 네트워크에 결합 가능한 프로세서에 있어서,
    코어 제어 회로를 포함하되, 상기 코어 제어 회로는,
    호출(call) 작업 디스크립터 데이터 패킷을 수신하고, 상기 수신된 작업 디스크립터 데이터 패킷을 초기 프로그램 카운트 및 임의의 수신된 인수를 갖는 실행 스레드로 디코딩하고, 하나 이상이 시스템 호출 메시지를 인코딩하여 상기 호스트 프로세서로 송신하고, 상기 하나 이상의 시스템 호출 메시지의 하나 이상의 대응하는 결과를 갖는 리턴 작업 디스크립터 패킷을 수신 및 디코딩하기 위해 상호 접속 네트워크에 결합 가능한 상호 접속 네트워크 인터페이스;
    상기 상호 접속 네트워크 인터페이스에 결합되고 복수의 레지스터를 포함하는 스레드 제어 메모리로서, 상기 복수의 레지스터는 복수의 스레드 식별자를 저장하는 스레드 식별자 풀 레지스터, 스레드 상태 레지스터, 수신된 프로그램 카운트를 저장하는 프로그램 카운트 레지스터, 및 수신된 인수를 저장하는 범용 레지스터를 포함하는, 상기 스레드 제어 메모리;
    상기 스레드 제어 메모리에 결합된 실행 큐(execution queue);
    상기 상호 접속 네트워크 인터페이스에 결합된 네트워크 응답 메모리;
    상기 실행 큐, 상기 스레드 제어 메모리 및 상기 명령 캐시에 결합된 제어 로직 및 스레드 선택 회로로서, 상기 제어 로직 및 스레드 선택 회로는 사용 가능한 스레드 식별자 및 초기 유효 상태(initial valid state)를 실행 스레드에 할당하고, 상기 스레드 식별자를 상기 실행 큐에 배치하고, 실행할 상기 스레드 식별자를 선택하고, 상기 실행 스레드에 대한 초기 프로그램 카운트를 선택하기 위한 인덱스로 상기 스레드 식별자를 사용하여 상기 스레드 제어 메모리에 액세스하도록 적응된, 상기 제어 로직 및 스레드 선택 회로;
    상기 초기 프로그램 카운트를 수신하고 실행을 위한 대응 명령을 제공하기 위해 상기 제어 로직 및 스레드 선택 회로에 결합된 명령 캐시;
    하나 이상의 작업 디스크립터 패킷의 생성을 위한 하나 이상의 커맨드를 저장하는 커맨드 큐;
    상기 호스트 프로세서에 상기 하나 이상의 시스템 호출 메시지를 생성하도록 적응된 시스템 호출 회로부; 및
    상기 코어 제어 회로의 상기 커맨드 큐 및 상기 명령 캐시에 결합된 프로세서 코어로서, 상기 프로세서 코어는 대응하는 명령을 실행하도록 적응된, 상기 프로세서 코어를 포함하는, 프로세서.
KR1020207034876A 2018-05-07 2019-05-06 사용자 모드, 멀티 스레드, 자체 스케줄링 프로세서 내 시스템 호출 관리 KR102481667B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201862667717P 2018-05-07 2018-05-07
US62/667,717 2018-05-07
US16/399,702 US11068305B2 (en) 2018-05-07 2019-04-30 System call management in a user-mode, multi-threaded, self-scheduling processor
US16/399,702 2019-04-30
PCT/US2019/030880 WO2019217298A1 (en) 2018-05-07 2019-05-06 System call management in a user-mode, muti-threaded, self-scheduling processor

Publications (2)

Publication Number Publication Date
KR20210005946A true KR20210005946A (ko) 2021-01-15
KR102481667B1 KR102481667B1 (ko) 2022-12-28

Family

ID=68384175

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207034876A KR102481667B1 (ko) 2018-05-07 2019-05-06 사용자 모드, 멀티 스레드, 자체 스케줄링 프로세서 내 시스템 호출 관리

Country Status (5)

Country Link
US (2) US11068305B2 (ko)
EP (1) EP3791267A1 (ko)
KR (1) KR102481667B1 (ko)
CN (1) CN112088357A (ko)
WO (1) WO2019217298A1 (ko)

Families Citing this family (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11474861B1 (en) * 2019-11-27 2022-10-18 Meta Platforms Technologies, Llc Methods and systems for managing asynchronous function calls
US11418455B2 (en) 2020-08-31 2022-08-16 Micron Technology, Inc. Transparent packet splitting and recombining
US11362939B2 (en) 2020-08-31 2022-06-14 Micron Technology, Inc. Flow control for a multiple flow control unit interface
US11588745B2 (en) 2020-08-31 2023-02-21 Micron Technology, Inc. Early credit return for credit-based flow control
US11539623B2 (en) 2020-08-31 2022-12-27 Micron Technology, Inc. Single field for encoding multiple elements
US11412075B2 (en) 2020-08-31 2022-08-09 Micron Technology, Inc. Multiple protocol header processing
US11356378B2 (en) 2020-08-31 2022-06-07 Micron Technology, Inc. Combined write enable mask and credit return field
US11296995B2 (en) 2020-08-31 2022-04-05 Micron Technology, Inc. Reduced sized encoding of packet length field
US11580044B2 (en) 2020-08-31 2023-02-14 Micron Technology, Inc. Network credit return mechanisms
US11360920B2 (en) 2020-08-31 2022-06-14 Micron Technology, Inc. Mapping high-speed, point-to-point interface channels to packet virtual channels
US11614942B2 (en) 2020-10-20 2023-03-28 Micron Technology, Inc. Reuse in-flight register data in a processor
US11586443B2 (en) 2020-10-20 2023-02-21 Micron Technology, Inc. Thread-based processor halting
US11614891B2 (en) 2020-10-20 2023-03-28 Micron Technology, Inc. Communicating a programmable atomic operator to a memory controller
US11586439B2 (en) 2020-10-20 2023-02-21 Micron Technology, Inc. Detecting infinite loops in a programmable atomic transaction
US11379365B2 (en) 2020-10-20 2022-07-05 Micron Technology, Inc. Memory access bounds checking for a programmable atomic operator
US11431653B2 (en) 2020-10-20 2022-08-30 Micron Technology, Inc. Packet arbitration for buffered packets in a network device
US11526361B2 (en) 2020-10-20 2022-12-13 Micron Technology, Inc. Variable pipeline length in a barrel-multithreaded processor
US11436187B2 (en) 2020-10-20 2022-09-06 Micron Technology, Inc. Method of notifying a process or programmable atomic operation traps
US11507453B2 (en) 2020-10-20 2022-11-22 Micron Technology, Inc. Low-latency register error correction
US11693690B2 (en) 2020-10-20 2023-07-04 Micron Technology, Inc. Method of completing a programmable atomic transaction by ensuring memory locks are cleared
US11740929B2 (en) 2020-10-20 2023-08-29 Micron Technology, Inc. Registering a custom atomic operation with the operating system
US11403023B2 (en) 2020-10-20 2022-08-02 Micron Technology, Inc. Method of organizing a programmable atomic unit instruction memory
US11409533B2 (en) 2020-10-20 2022-08-09 Micron Technology, Inc. Pipeline merging in a circuit
US11409539B2 (en) 2020-10-20 2022-08-09 Micron Technology, Inc. On-demand programmable atomic kernel loading
US11294848B1 (en) 2020-10-20 2022-04-05 Micron Technology, Inc. Initialization sequencing of chiplet I/O channels within a chiplet system
US11803391B2 (en) 2020-10-20 2023-10-31 Micron Technology, Inc. Self-scheduling threads in a programmable atomic unit
US11907718B2 (en) 2020-12-31 2024-02-20 Micron Technology, Inc. Loop execution in a reconfigurable compute fabric using flow controllers for respective synchronous flows
US11698853B2 (en) 2020-12-31 2023-07-11 Micron Technology, Inc. Saturating local cache in memory-compute systems
US11740800B2 (en) 2021-06-22 2023-08-29 Micron Technology, Inc. Alleviating memory hotspots on systems with multiple memory controllers
US11762661B2 (en) 2021-07-28 2023-09-19 Micron Technology, Inc. Counter for preventing completion of a thread including a non-blocking external device call with no-return indication
US11768626B2 (en) 2021-08-11 2023-09-26 Micron Technology, Inc. Stencil data access from tile memory
US11604650B1 (en) 2021-08-11 2023-03-14 Micron Technology, Inc. Packing conditional branch operations
US11861366B2 (en) 2021-08-11 2024-01-02 Micron Technology, Inc. Efficient processing of nested loops for computing device with multiple configurable processing elements using multiple spoke counts
WO2023018470A1 (en) 2021-08-13 2023-02-16 Micron Technology, Inc. Undo capability for memory devices
US11782725B2 (en) 2021-08-16 2023-10-10 Micron Technology, Inc. Mask field propagation among memory-compute tiles in a reconfigurable architecture
US11709796B2 (en) 2021-08-16 2023-07-25 Micron Technology, Inc. Data input/output operations during loop execution in a reconfigurable compute fabric
US11704130B2 (en) 2021-08-16 2023-07-18 Micron Technology, Inc. Indexing external memory in a reconfigurable compute fabric
US11841823B2 (en) 2021-08-16 2023-12-12 Micron Technology, Inc. Connectivity in coarse grained reconfigurable architecture
US11853216B2 (en) 2021-08-16 2023-12-26 Micron Technology, Inc. High bandwidth gather cache
US11507493B1 (en) 2021-08-18 2022-11-22 Micron Technology, Inc. Debugging dataflow computer architectures
US11675588B2 (en) 2021-08-20 2023-06-13 Micron Technology, Inc. Tile-based result buffering in memory-compute systems
US11860800B2 (en) 2021-08-20 2024-01-02 Micron Technology, Inc. Kernel mapping to nodes in compute fabric
US11899953B1 (en) 2022-08-30 2024-02-13 Micron Technology, Inc. Method of efficiently identifying rollback requests
US11960403B2 (en) 2022-08-30 2024-04-16 Micron Technology, Inc. Variable execution time atomic operations
US11940919B2 (en) 2022-08-30 2024-03-26 Micron Technology, Inc. Recall pending cache line eviction

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030014669A1 (en) * 2001-07-10 2003-01-16 Caceres Maximiliano Gerardo Automated computer system security compromise
US20040015684A1 (en) * 2002-05-30 2004-01-22 International Business Machines Corporation Method, apparatus and computer program product for scheduling multiple threads for a processor
US20120230341A1 (en) * 2009-04-27 2012-09-13 Lsi Corporation Multi-threaded processing with hardware accelerators

Family Cites Families (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4503499A (en) * 1982-09-14 1985-03-05 Eaton Corporation Controlled work flow system
US5430850A (en) 1991-07-22 1995-07-04 Massachusetts Institute Of Technology Data processing system with synchronization coprocessor for multiple threads
JP3169779B2 (ja) 1994-12-19 2001-05-28 日本電気株式会社 マルチスレッドプロセッサ
WO1997024671A1 (en) 1995-12-29 1997-07-10 Powertv, Inc. Event filtering feature for a computer operating system in a home communications terminal
US6131155A (en) 1997-11-07 2000-10-10 Pmc Sierra Ltd. Programmer-visible uncached load/store unit having burst capability
US6807632B1 (en) * 1999-01-21 2004-10-19 Emc Corporation Content addressable information encapsulation, representation, and transfer
US6223258B1 (en) 1998-03-31 2001-04-24 Intel Corporation Method and apparatus for implementing non-temporal loads
US6182246B1 (en) * 1999-01-21 2001-01-30 Bsquare Corporation Protocol acknowledgment between homogeneous system
US7137116B2 (en) 1999-11-09 2006-11-14 Microsoft Corporation Method and system for performing a task on a computer
US6973650B1 (en) 1999-11-09 2005-12-06 Microsoft Corporation Method of pipelined processing of program data
WO2003102758A1 (en) 2002-05-31 2003-12-11 University Of Delaware Method and apparatus for real-time multithreading
US20040034759A1 (en) 2002-08-16 2004-02-19 Lexra, Inc. Multi-threaded pipeline with context issue rules
US7467377B2 (en) 2002-10-22 2008-12-16 Intel Corporation Methods and apparatus for compiler managed first cache bypassing
US7463590B2 (en) * 2003-07-25 2008-12-09 Reflex Security, Inc. System and method for threat detection and response
US7441101B1 (en) 2003-12-10 2008-10-21 Cisco Technology, Inc. Thread-aware instruction fetching in a multithreaded embedded processor
US7310722B2 (en) 2003-12-18 2007-12-18 Nvidia Corporation Across-thread out of order instruction dispatch in a multithreaded graphics processor
US8607235B2 (en) * 2004-12-30 2013-12-10 Intel Corporation Mechanism to schedule threads on OS-sequestered sequencers without operating system intervention
US8345053B2 (en) * 2006-09-21 2013-01-01 Qualcomm Incorporated Graphics processors with parallel scheduling and execution of threads
US8108659B1 (en) 2006-11-03 2012-01-31 Nvidia Corporation Controlling access to memory resources shared among parallel synchronizable threads
US8032711B2 (en) 2006-12-22 2011-10-04 Intel Corporation Prefetching from dynamic random access memory to a static random access memory
GB2447907B (en) 2007-03-26 2009-02-18 Imagination Tech Ltd Processing long-latency instructions in a pipelined processor
WO2009063536A1 (ja) * 2007-11-16 2009-05-22 Netcleus Systems Corporation タスク処理装置
US20100162265A1 (en) * 2008-12-23 2010-06-24 Marco Heddes System-On-A-Chip Employing A Network Of Nodes That Utilize Logical Channels And Logical Mux Channels For Communicating Messages Therebetween
US8423972B2 (en) 2009-02-27 2013-04-16 International Business Machines Corporation Collecting profile-specified performance data on a multithreaded data processing system
US8514874B2 (en) 2010-03-12 2013-08-20 Lsi Corporation Thread synchronization in a multi-thread network communications processor architecture
WO2010131579A1 (ja) * 2009-05-11 2010-11-18 日本電気株式会社 端末装置、該端末装置に用いられるコミュニケーション方法及びコミュニケーション制御プログラム
GB2471067B (en) 2009-06-12 2011-11-30 Graeme Roy Smith Shared resource multi-thread array processor
US8732711B2 (en) 2010-09-24 2014-05-20 Nvidia Corporation Two-level scheduler for multi-threaded processing
US8752064B2 (en) 2010-12-14 2014-06-10 Advanced Micro Devices, Inc. Optimizing communication of system call requests
KR101620676B1 (ko) * 2011-03-25 2016-05-23 소프트 머신즈, 인크. 분할가능한 엔진에 의해 인스턴스화된 가상 코어를 이용한 코드 블록의 실행을 지원하는 레지스터 파일 세그먼트
JP5909871B2 (ja) 2011-04-28 2016-04-27 セイコーエプソン株式会社 記録装置
US10235205B2 (en) * 2012-05-24 2019-03-19 Citrix Systems, Inc. Remote management of distributed datacenters
US9286118B2 (en) 2012-06-15 2016-03-15 Freescale Semiconductor, Inc. System and method for improved job processing to reduce contention for shared resources
US8902902B2 (en) * 2012-07-18 2014-12-02 Netronome Systems, Incorporated Recursive lookup with a hardware trie structure that has no sequential logic elements
US9329870B2 (en) * 2013-02-13 2016-05-03 International Business Machines Corporation Extensible execution unit interface architecture with multiple decode logic and multiple execution units
US9898341B2 (en) * 2016-02-25 2018-02-20 Western Digital Technologies, Inc. Adjustable priority ratios for multiple task queues
WO2019089816A2 (en) * 2017-10-31 2019-05-09 Micron Technology, Inc. System having a hybrid threading processor, a hybrid threading fabric having configurable computing elements, and a hybrid interconnection network

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030014669A1 (en) * 2001-07-10 2003-01-16 Caceres Maximiliano Gerardo Automated computer system security compromise
US20040015684A1 (en) * 2002-05-30 2004-01-22 International Business Machines Corporation Method, apparatus and computer program product for scheduling multiple threads for a processor
US20120230341A1 (en) * 2009-04-27 2012-09-13 Lsi Corporation Multi-threaded processing with hardware accelerators

Also Published As

Publication number Publication date
US20210294650A1 (en) 2021-09-23
US11068305B2 (en) 2021-07-20
WO2019217298A1 (en) 2019-11-14
US20190340020A1 (en) 2019-11-07
CN112088357A (zh) 2020-12-15
EP3791267A1 (en) 2021-03-17
KR102481667B1 (ko) 2022-12-28

Similar Documents

Publication Publication Date Title
KR102465201B1 (ko) 멀티 스레드, 자체 스케줄링 프로세서
KR102481669B1 (ko) 네트워크 혼잡을 관리하기 위한 멀티 스레드, 자체 스케줄링 프로세서에 의한 로드 액세스 크기의 조정
KR102439726B1 (ko) 자체 스케줄링 프로세서에 작업 디스크립터 패킷을 이용한 스레드 개시
KR102482310B1 (ko) 멀티 스레드, 자체 스케줄링 프로세서 내 스레드 우선 순위 관리
KR102481667B1 (ko) 사용자 모드, 멀티 스레드, 자체 스케줄링 프로세서 내 시스템 호출 관리
KR102483678B1 (ko) 자체 스케줄링 프로세서 및 하이브리드 스레딩 패브릭을 갖는 시스템내 이벤트 메시징
KR20210005719A (ko) 멀티 스레드, 자체 스케줄링 프로세서내 메모리 요청 크기 관리
KR20210003263A (ko) 자체 스케줄링 프로세서 및 하이브리드 스레딩 패브릭을 갖는 시스템의 작업 디스크립터 패킷을 이용한 스레드 개시 및 완료
KR20210003269A (ko) 멀티 스레드, 자체 스케줄링 프로세서에 의한 로컬 또는 원격 컴퓨팅 엘리먼트 상에 스레드 생성
KR20210003267A (ko) 멀티 스레드, 자체 스케줄링 프로세서를 갖는 시스템의 스레드 상태 모니터링
KR102439728B1 (ko) 멀티 스레드, 자체 스케줄링 프로세서를 갖는 시스템에 캐싱되지 않은 로드 및 저장