KR20210011451A - 하드웨어 가속을 위한 하드웨어 리소스들의 임베디드 스케줄링 - Google Patents

하드웨어 가속을 위한 하드웨어 리소스들의 임베디드 스케줄링 Download PDF

Info

Publication number
KR20210011451A
KR20210011451A KR1020207037180A KR20207037180A KR20210011451A KR 20210011451 A KR20210011451 A KR 20210011451A KR 1020207037180 A KR1020207037180 A KR 1020207037180A KR 20207037180 A KR20207037180 A KR 20207037180A KR 20210011451 A KR20210011451 A KR 20210011451A
Authority
KR
South Korea
Prior art keywords
command
controller
compute unit
slot
compute
Prior art date
Application number
KR1020207037180A
Other languages
English (en)
Inventor
소렌 티. 소
이드리스 아이. 타르왈라
우망 파레크
소날 산탄
헴 씨. 니마
Original Assignee
자일링크스 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 자일링크스 인코포레이티드 filed Critical 자일링크스 인코포레이티드
Publication of KR20210011451A publication Critical patent/KR20210011451A/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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • 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
    • G06F9/30101Special purpose registers
    • G06F9/3855
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/509Offload

Abstract

집적 회로(IC)[150]가 하드웨어 가속을 위한 스케줄러[160]를 포함할 수도 있다. 스케줄러는, IC[150]의 컴퓨트 유닛들에 의한 실행을 위해 호스트 프로세서[105]로부터 오프로딩되는 커맨드들을 저장하도록 구성되고 복수의 슬롯들을 갖는 커맨드 큐[165]를 포함할 수도 있다. 스케줄러[160]는, 커맨드 큐[165]의 슬롯들에 대응하는 비트 위치들을 갖는 스테이터스 레지스터[170]를 포함할 수도 있다. 스케줄러[160]는, 커맨드 큐[165] 및 스테이터스 레지스터[170]에 커플링되는 제어기[175]를 또한 포함할 수도 있다. 제어기[175]는 IC[150]의 컴퓨트 유닛들을 스케줄링하여 커맨드 큐[165]의 슬롯들에 저장된 커맨드들을 실행하고 스테이터스 레지스터[170]의 비트 위치들을 업데이트하여 커맨드 큐[165]로부터의 어느 커맨드들이 실행이 종료되는지를 표시하도록 구성될 수도 있다.

Description

하드웨어 가속을 위한 하드웨어 리소스들의 임베디드 스케줄링
본 개시내용은 집적 회로(integrated circuit)(IC)들에 관한 것으로, 더 구체적으로는, 하드웨어 가속을 용이하게 하기 위한 하드웨어 리소스들의 임베디드 스케줄링(embedded scheduling)에 관한 것이다.
이종 컴퓨팅 플랫폼(heterogeneous computing platform)(HCP)은, 호스트 프로세서 및 하나 이상의 다른 상이한 프로세싱 디바이스들을 포함하는 한 타입의 데이터 프로세싱 시스템을 지칭한다. 호스트 프로세서는 전형적으로 중앙 프로세싱 유닛(central processing unit)(CPU)으로서 구현된다. 호스트 프로세서는 인터페이스 회로부를 통해 다른 프로세싱 디바이스들에 커플링된다. 다른 프로세싱 디바이스들은 호스트 프로세서와는 아키텍처에 있어서 상이하다. 그럼에도 불구하고, 프로세싱 디바이스들은 호스트 프로세서로부터 오프로딩된(offloaded) 동작들을 수행하고 동작들의 결과들을 호스트 프로세서에 이용가능하게 하는 것이 가능하다.
일부 HCP들 내에서, 프로세싱 디바이스들은 프로그램 코드를 실행하도록 적응(adapt)된다. 그러한 프로세싱 디바이스들은 통상적으로, 호스트와는 상이한 명령어 세트 아키텍처를 갖고 있다. 이들 다른 프로세서들의 예들은 그래픽 프로세싱 유닛(graphics processing unit)(들)(GPU들), 디지털 신호 프로세서(digital signal processor)(들)(DSP들) 등을 포함하지만, 이에 제한되지 않는다.
다른 HCP들에서, 호스트 프로세서로부터 오프로딩된 동작들을 수행하는 프로세싱 디바이스들은, 하드웨어 가속 프로그램 코드에 적응된 디바이스들을 포함한다. 이들 프로세싱 디바이스들은, 오프로딩된 동작을 구현하는 회로부를 포함한다. 회로부는, 프로세서(예를 들어, CPU)에 의해 실행될 때, 오프로딩된 동작을 수행하는 것이 가능한 프로그램 코드와 기능적으로 동등하다. 하드웨어 가속이 가능한 프로세싱 디바이스들의 예들은 프로그래밍가능 집적 회로(IC)들, 예컨대, 필드 프로그래밍가능 게이트 어레이(field programmable gate array)(FPGA)들, 부분적 프로그래밍가능 IC들, 주문형 IC(application specific IC)(ASIC)들 등을 포함한다. 인식가능하게, HCP는 프로세싱 디바이스들의 조합을 포함할 수도 있는데, 여기서 하나 이상이 프로그램 코드를 실행하도록 적응되고 하나 이상의 다른 것들이 하드웨어 가속 프로그램 코드에 적응된다.
호스트 프로세서에는 프로세싱 디바이스들에게 동작들을 오프로딩하고 프로세싱 디바이스들로부터의 결과들을 검색하는 임무가 부여된다. 프로세싱 디바이스들로 그리고 이들로부터 필요한 데이터를 효율적으로 이동시키는 호스트 프로세서의 능력은 HCP의 전체 효율 및 성능에 상당히 영향을 미칠 수 있다.
하나 이상의 실시예들은 하드웨어 가속을 위한 스케줄러를 포함하는 집적 회로(IC)에 관한 것이다. 스케줄러는, IC의 컴퓨트 유닛(compute unit)들에 의한 실행을 위해 호스트 프로세서로부터 오프로딩되는 커맨드들을 저장하도록 구성되고 복수의 슬롯들을 갖는 커맨드 큐(command queue)를 포함할 수도 있다. 스케줄러는, 커맨드 큐의 슬롯들에 대응하는 비트 위치들을 갖는 스테이터스 레지스터(status register)를 포함할 수도 있다. 스케줄러는, 커맨드 큐 및 스테이터스 레지스터에 커플링되는 제어기를 또한 포함할 수도 있다. 제어기는 IC의 컴퓨트 유닛들을 스케줄링하여 커맨드 큐의 슬롯들에 저장된 커맨드들을 실행하고 스테이터스 레지스터의 비트 위치들을 업데이트하여 커맨드 큐로부터의 어느 커맨드들이 실행이 종료되는지를 표시하도록 구성될 수도 있다.
일부 실시예들에서, 스테이터스 레지스터는 판독되는 것에 응답하여 내부에 저장된 콘텐트들을 제거(clear)하도록 구성될 수도 있다.
일부 실시예들에서, 스케줄러는, 통신 링크를 통해 호스트 프로세서와 통신하고 커맨드 큐의 이용가능 슬롯들 내에 커맨드들을 저장하도록 구성되는 인터페이스를 더 포함할 수도 있다.
일부 실시예들에서, 커맨드 큐에 저장된 커맨드들은, 개개의 커맨드들을 실행하기 위해 컴퓨트 유닛들에 의해 사용되는 인수(argument)들을 포함할 수도 있다.
일부 실시예들에서, 각각의 커맨드는 컴퓨트 유닛들 중 어느 것이 커맨드를 실행할 수 있는지를 특정할 수도 있다.
일부 실시예들에서, 제어기는 컴퓨트 유닛들 중 어느 것이 각각의 개개의 커맨드를 실행할 수 있고 유휴 상태(idle)인지에 기초하여 컴퓨트 유닛들에 커맨드들을 할당하도록 구성될 수도 있다.
일부 실시예들에서, 제어기는, 프로그램 코드를 실행하도록 구성되는 프로세서일 수도 있다.
일부 실시예들에서, 프로세서는, 집적 회로의 프로그래밍가능 회로부를 사용하여 구현되는 소프트 프로세서(soft processor)일 수도 있다.
일부 실시예들에서, 제어기는 선택된 커맨드가 실행될 수 있는 선택된 컴퓨트 유닛이 유휴 상태라는 것을 결정하고, 실행을 위해 선택된 커맨드의 인수들을 선택된 컴퓨트 유닛에 전송하고, 선택된 컴퓨트 유닛을 시작하도록 구성될 수도 있다.
일부 실시예들에서, 제어기는, 선택된 커맨드가 실행이 종료된다는 결정에 응답하여, 선택된 커맨드를 포함하는 슬롯에 대응하는 스테이터스 레지스터에서의 비트 위치에 기입하여, 슬롯이 비어 있음을 표시하도록 구성될 수도 있다.
하나 이상의 실시예들은 IC를 사용하여 하드웨어 가속을 위한 커맨드들을 스케줄링하는 방법에 관한 것이다. 이 방법은, IC 내의 커맨드 큐의 슬롯 내에, 호스트 프로세서로부터 수신된 커맨드를 저장하는 단계를 포함할 수도 있고, 여기서 커맨드는 IC의 컴퓨트 유닛에 의한 실행을 위해 호스트 프로세서로부터 오프로딩된다. 이 방법은, 제어기를 사용하여, 커맨드 큐의 슬롯에 저장된 커맨드를 실행하도록 컴퓨트 유닛을 스케줄링하는 단계를 포함할 수도 있다. 이 방법은, 커맨드가 실행이 종료된다는 결정에 응답하여, IC 내의 스테이터스 레지스터에 비트 위치를 기입하는 단계를 포함할 수도 있고, 여기서 비트 위치는, 커맨드를 저장하는 커맨드 큐의 슬롯에 대응한다.
일부 실시예들에서, 이 방법은, 제어기 내에서, 커맨드 큐의 슬롯들에 저장된 커맨드들의 헤더들의 로컬로 캐싱된 카피들(locally cached copies)을 유지하는 단계, 및 헤더들의 로컬로 캐싱된 카피들의 값들을 업데이트함으로써 슬롯들의 스테이터스를 업데이트하는 단계를 더 포함할 수도 있다.
일부 실시예들에서, 이 방법은, 스테이터스 레지스터가 판독되는 것에 응답하여 스테이터스 레지스터에 저장된 콘텐트들을 제거하는 단계를 더 포함할 수도 있다.
일부 실시예들에서, 커맨드 큐에 저장된 커맨드들은, 커맨드를 실행하기 위해 컴퓨트 유닛들에 의해 사용될 수도 있는 인수들을 포함한다.
일부 실시예들에서, 이 방법은, 각각의 커맨드로부터, 컴퓨트 유닛들 중 어느 것이 커맨드를 실행할 수 있는지를 결정하는 단계를 더 포함할 수도 있다.
일부 실시예들에서, 이 방법은, 컴퓨트 유닛들 중 어느 것이 각각의 개개의 커맨드를 실행할 수 있고 유휴 상태인지에 기초하여 컴퓨트 유닛들에 커맨드들을 할당하는 단계를 더 포함할 수도 있다.
일부 실시예들에서, 이 방법은, 선택된 커맨드가 실행될 수 있는 선택된 컴퓨트 유닛이 유휴 상태라는 것을 결정하는 단계, 실행을 위해 선택된 커맨드의 인수들을 선택된 컴퓨트 유닛에 전송하는 단계, 및 선택된 컴퓨트 유닛을 시작하는 단계를 더 포함할 수도 있다.
일부 실시예들에서, 비트 위치의 기입은, 슬롯이 비어 있음을 표시할 수도 있다.
일부 실시예들에서, 이 방법은, 선택된 컴퓨트 유닛으로부터 인터럽트를 수신함으로써 선택된 컴퓨트 유닛이 선택된 커맨드의 실행이 종료된다는 것을 결정하는 단계를 더 포함할 수도 있다.
일부 실시예들에서, 이 방법은, 선택된 컴퓨트 유닛을 폴링(polling)함으로써 선택된 컴퓨트 유닛이 선택된 커맨드의 실행이 종료된다는 것을 결정하는 단계를 더 포함할 수도 있다.
이 발명의 내용 섹션은 청구된 대상물의 임의의 핵심 또는 필수 피처(feature)들을 식별하기 위한 것이 아니라 단지 특정 개념들을 소개하기 위해 제공된다. 본 발명의 어레인지먼트(arrangement)들의 다른 피처들은 첨부 도면들로부터 그리고 다음의 상세한 설명으로부터 명백해질 것이다.
본 발명의 어레인지먼트들은 첨부 도면들에서 예로서 예시된다. 그러나, 도면들은 본 발명의 어레인지먼트들을 단지 도시된 특정 구현들로만 제한하는 것으로 해석되어서는 안 된다. 다음의 상세한 설명의 검토 시에 그리고 도면들에 대한 참조 시에 다양한 양태들 및 이점들이 명백해질 것이다.
도 1은 본 개시내용 내에서 설명되는 하나 이상의 실시예들에서의 사용을 위한 이종 컴퓨팅 플랫폼의 예를 예시한다.
도 2는 호스트 프로세서로부터의 커맨드를 오프로딩하는 예시적인 방법을 예시한다.
도 3은 스케줄러에 의해 수행되는 바와 같이 호스트 프로세서로부터의 커맨드들을 프로세싱하는 방법을 예시한다.
도 4는 스케줄러에 의해 수행되는 바와 같이 호스트 프로세서로부터의 커맨드들을 프로세싱하는 다른 예시적인 방법을 예시한다.
도 5는 컴퓨트 유닛들의 스테이터스를 결정하는 예시적인 방법을 예시한다.
도 6은 집적 회로(IC)에 대한 예시적인 아키텍처를 예시한다.
본 개시내용은 신규한 피처들을 정의하는 청구범위로 종결되지만, 본 개시내용 내에서 설명되는 다양한 피처들은 도면들과 관련된 설명을 고려함으로써 더 잘 이해될 것으로 생각된다. 본 명세서에서 설명되는 프로세스(들), 머신(들), 제조(들) 및 이들의 임의의 변형들은 예시의 목적들을 위해 제공된다. 본 개시내용 내에서 설명되는 특정 구조적 및 기능적 세부사항들이 제한적인 것으로서 해석되어서는 안 되고, 단지 청구범위에 대한 기초로서 그리고 사실상 임의의 적절하게 상세한 구조체로 설명되는 피처들을 다양하게 채용하도록 본 기술분야의 통상의 기술자에게 교시하기 위한 대표적인 기초로서 해석되어야 한다. 추가로, 본 개시내용 내에서 사용되는 용어들 및 어구들은 제한하려는 것이 아니라, 오히려 설명된 피처들의 이해가능한 설명을 제공하려는 것으로 의도된다.
본 개시내용은 집적 회로(IC)들에 관한 것으로, 더 구체적으로는, 하드웨어 가속을 용이하게 하기 위한 하드웨어 리소스들의 임베디드 스케줄링에 관한 것이다. 본 개시내용 내에서 설명되는 본 발명의 어레인지먼트들에 따르면, 하드웨어 스케줄러가 하드웨어 가속을 위해 사용되는 IC 내에 임베딩된다. 하드웨어 스케줄러는 이종 컴퓨팅 플랫폼(HCP)의 호스트 프로세서로부터 IC 내의 하드웨어 리소스들로의 동작들의 오프로딩을 지원한다. 본 개시내용 내에서, 하드웨어 리소스들은 "컴퓨트 유닛들"이라고 지칭된다. 하드웨어 스케줄러는 컴퓨트 유닛들의 동작을 관리 및 추적하는 것이 가능하다.
종래의 HCP들에서, 스케줄링은 소프트웨어 프로세스가 호스트 프로세서에 의해 실행되는 것으로서 구현된다. 호스트 프로세서에는 컴퓨트 유닛이 동작을 수행하는 것에 이용가능할 때를 결정하기 위해 IC의 개별 컴퓨트 유닛들을 연속적으로 폴링하는 태스크가 부과된다. 컴퓨트 유닛들의 폴링은 상당한 양의 호스트 프로세서 시간을 소비한다. 추가로, 스케줄러가 호스트 프로세서에서 실행되기 때문에, 호스트 프로세서는 IC에 커맨드를 전송하기 전에 컴퓨트 유닛들이 이용가능할 때까지 기다려야 한다. 호스트 프로세서는 단지 컴퓨트 유닛이 커맨드를 실행하는 것에 이용가능하다는 결정에만 응답하여 커맨드를 전송한다. 이와 같이, 컴퓨트 유닛이 이용가능하게 되는 시간과 컴퓨트 유닛이 커맨드에 대한 실행을 시작하는 것이 가능한 시간 사이에 딜레이가 발생된다. 이 딜레이는, 호스트 프로세서로부터 컴퓨트 유닛을 포함하는 IC로, 컴퓨트 유닛에 의해 필요로 하게 되는 데이터를 포함하여, 커맨드를 전송하는 데 필요한 시간을 포함한다.
본 명세서에서 설명되는 본 발명의 어레인지먼트들에 따르면, 하드웨어 스케줄러는 컴퓨트 유닛들(예를 들어, 호스트 프로세서로부터 오프로딩된 실제 동작들을 수행하는 하드웨어 리소스들)을 포함하는 동일한 IC에서 구현된다. 하드웨어 스케줄러는 IC 내의 컴퓨트 유닛들의 가용성을 추적하는 것이 가능하다. 하드웨어 스케줄러는 호스트 프로세서로부터 전송된 커맨드들(예를 들어, 동작들)을 수신하는 것이 또한 가능하다. 하드웨어 스케줄러는 컴퓨트 유닛이 커맨드(들)를 실행하는 것에 이용가능하게 되는 그러한 시간까지 커맨드 큐에 커맨드들을 저장하는 것이 가능하다. 이와 같이, 호스트 프로세서는 이용가능 컴퓨트 유닛에 대해 연속적으로 폴링하거나 그리고/또는 커맨드를 IC에 전송하기 전에 컴퓨트 유닛이 이용가능하게 되기를 기다릴 필요 없이 커맨드들을 전송하고 다른 태스크들을 계속하는 것이 가능하다.
일단 커맨드가 하드웨어 스케줄러 내에서 큐잉되고(queued) 컴퓨트 유닛이 이용가능하게 되면, 컴퓨트 유닛으로의 커맨드의 전송이 어떠한 호스트 프로세서 관여도 요구하지 않는다. 하드웨어 스케줄러는 커맨드를 컴퓨트 유닛에 전송한다. 하드웨어 스케줄러와 컴퓨트 유닛이 동일한 IC에 있기 때문에, 커맨드를 컴퓨트 유닛에 전송하기 위한 시간이 비교적 짧다. 이와 같이, 컴퓨트 유닛이 이용가능하게 되는 시간과 컴퓨트 유닛이 커맨드의 실행을 시작하는 시간 사이의 딜레이가 감소된다.
하드웨어 스케줄러는 커맨드들이 실행이 종료될 때를 결정하는 것이 추가로 가능하다. 커맨드가 실행이 종료되었다는 결정에 응답하여, 하드웨어 스케줄러는 호스트 프로세서에 통지하는 것이 가능하다. 예를 들어, 하드웨어 스케줄러는 커맨드가 실행이 종료되었다는 결정에 응답하여 하드웨어 스케줄러 자체 내에 포함되는 스테이터스 레지스터에 기입하는 것이 가능하다. 스테이터스 레지스터는 실행을 종료한 특정 커맨드들 및 커맨드들의 스테이터스를 확인하기 위해 호스트 프로세서에 의해 판독될 수도 있다. 스테이터스 레지스터의 사용은 IC의 컴퓨트 유닛들 각각을 개별적으로 관리하는 것과는 대조적으로 호스트 프로세서가 "커맨드" 레벨에서 동작하게 한다.
본 발명의 어레인지먼트들의 추가의 양태들이 도면들을 참조하여 아래에 더욱 상세히 설명된다. 예시의 단순성 및 명확성의 목적들을 위해, 도면들에 도시된 요소들은 반드시 일정한 비율로 그려진 것은 아니다. 예를 들어, 일부 요소들의 치수들은 명확성을 위해 다른 요소들에 비해 과장될 수도 있다. 추가로, 적절한 것으로 간주되는 경우, 대응하거나 유사하거나 또는 동일한 피처들을 표시하기 위해 도면들 간에 참조 번호들이 반복된다.
도 1은 이종 컴퓨팅 플랫폼(HCP)(100)의 예를 예시한다. 예시적인 도 1에서, HCP(100)는, 하드웨어 가속 디바이스로서 사용되는 IC(150) 및 호스트 시스템(102)을 포함한다.
호스트 시스템(102)은 서버 또는 컴퓨터와 같은 데이터 프로세싱 시스템으로서 구현될 수도 있다. 호스트 시스템(102)은, 메모리(110)에 커플링되는 호스트 프로세서(105), 및 인터페이스 회로부(115)를 통한 하나 이상의 입/출력(I/O) 디바이스들을 포함한다. 호스트 시스템(102)은 메모리(110) 내에 컴퓨터 판독가능 명령어들(프로그램 코드)을 저장하는 것이 가능하다. 메모리(110)는 컴퓨터 판독가능 저장 매체들의 예이다. 호스트 프로세서(105)는 인터페이스 회로부(115)를 통해 메모리(110)로부터 액세스되는 프로그램 코드를 실행하는 것이 가능하다.
메모리(110)는, 예를 들어, 로컬 메모리 및 벌크 저장 디바이스와 같은 하나 이상의 물리적 메모리 디바이스들을 포함할 수도 있다. 로컬 메모리는, 프로그램 코드의 실제 실행 동안 일반적으로 사용되는 비영구적 메모리 디바이스(들)를 지칭한다. 로컬 메모리의 예들은 랜덤 액세스 메모리(random-access memory)(RAM) 및/또는 프로그램 코드의 실행 동안 프로세서에 의한 사용에 적합한 임의의 다양한 타입들의 RAM(예를 들어, 동적 RAM 또는 "DRAM" 또는 정적 RAM 또는 "SRAM")을 포함한다. 벌크 저장 디바이스는 영구적 데이터 저장 디바이스를 지칭한다. 벌크 저장 디바이스들의 예들은 하드 디스크 드라이브(hard disk drive)(HDD), 솔리드 스테이트 드라이브(solid-state drive)(SSD), 플래시 메모리, 판독 전용 메모리(read-only memory)(ROM), 소거가능 프로그래밍가능 판독 전용 메모리(erasable programmable read-only memory)(EPROM), 전기적 소거가능 프로그래밍가능 판독 전용 메모리(electrically erasable programmable read-only memory)(EEPROM), 또는 다른 적합한 메모리를 포함하지만, 이에 제한되지 않는다. 호스트 시스템(102)은, 실행 동안 벌크 저장 디바이스로부터 프로그램 코드가 검색되어야 하는 횟수를 감소시키기 위해 적어도 일부 프로그램 코드의 임시 저장을 제공하는 하나 이상의 캐시 메모리들(도시되지 않음)을 또한 포함할 수도 있다.
인터페이스 회로부(115)의 예들은 시스템 버스 및 입/출력(I/O) 버스를 포함하지만, 이에 제한되지 않는다. 인터페이스 회로부(115)는 다양한 버스 아키텍처들 중 임의의 것을 사용하여 구현될 수도 있다. 버스 아키텍처들의 예들은 향상 산업 표준 아키텍처(Enhanced Industry Standard Architecture)(EISA) 버스, 가속 그래픽 포트(Accelerated Graphics Port)(AGP), 비디오 전자 표준 위원회(Video Electronics Standards Association)(VESA) 로컬 버스, 범용 직렬 버스(Universal Serial Bus)(USB), 및 주변기기 컴포넌트 인터커넥트 익스프레스(Peripheral Component Interconnect Express)(PCIe) 버스를 포함할 수도 있지만, 이에 제한되지 않는다.
I/O 디바이스들(120)은 호스트 시스템(102), 예를 들어, 인터페이스 회로부(115)에 직접적으로 또는 개재된 I/O 제어기들을 통해 커플링될 수도 있다. I/O 디바이스들(120)의 예들은 키보드, 디스플레이 디바이스, 포인팅 디바이스, 하나 이상의 통신 포트들, 및 네트워크 어댑터를 포함하지만, 이에 제한되지 않는다. 네트워크 어댑터는, 호스트 시스템(102)이 개재된 사설 또는 공용 네트워크들을 통해 다른 시스템들, 컴퓨터 시스템들, 원격 프린터들, 및/또는 원격 저장 디바이스들에 커플링되게 하는 것을 가능하게 하는 회로부를 지칭한다. 모뎀들, 케이블 모뎀들, 이더넷 카드들, 및 무선 트랜시버들은, 호스트 시스템(102)에서 사용될 수도 있는 상이한 타입들의 네트워크 어댑터들의 예들이다.
하나 이상의 실시예들에서, 메모리(110)는, 호스트 프로세서(105)에 의해 실행될 수도 있는 하나 이상의 애플리케이션들(도시되지 않음) 및 운영 체제(도시되지 않음)를 저장한다. 런타임 라이브러리가 또한 호스트 프로세서(102)에 의해 실행될 수도 있다. 하나 이상의 실시예들에서, 런타임 라이브러리는 호스트 프로세서(105)에 의해 실행되는 애플리케이션(들)과 링크되거나 또는 그렇지 않으면 통합될 수도 있다. 런타임 라이브러리는, IC(150)와 통신하는 데 사용되는 기능들을 포함한다.
호스트 시스템(102)은, 구현되는 특정 타입의 디바이스 및/또는 시스템에 따라 도시된 것보다 더 적은 컴포넌트들 또는 도 1에 예시되지 않은 부가적인 컴포넌트들을 포함할 수도 있다. 부가적으로, 포함된 특정 운영 체제, 애플리케이션(들), 및/또는 I/O 디바이스들은 시스템 타입에 기초하여 다를 수도 있다. 추가로, 예시적인 컴포넌트들 중 하나 이상이 다른 컴포넌트 내에 통합되거나, 또는 그렇지 않으면 다른 컴포넌트의 일 부분을 형성할 수도 있다. 예를 들어, 프로세서는 적어도 일부 메모리를 포함할 수도 있다. 호스트 시스템(102)은 도 1의 아키텍처 또는 이와 유사한 아키텍처를 사용하여 각각이 구현되는 복수의 네트워킹된 또는 상호연결된 컴퓨터들 또는 단일 컴퓨터를 구현하는 데 사용될 수도 있다.
IC(150)는 통신 링크(125)를 통해 호스트 시스템(102)에 통신가능하게 링크된다. 예를 들어, IC(150)는 호스트 시스템(102) 내에 포함될 수도 있는 회로 보드에 커플링될 수도 있다. 하나 이상의 실시예들에서, 통신 링크(125)는 PCIe 링크이다. 그러나, 통신 링크(125)가 다양한 상이한 커넥션들 및/또는 통신 프로토콜들 중 임의의 것을 사용하여 구현될 수도 있고 제공된 예들이 제한들로서 의도되지 않는다는 것이 인식되어야 한다.
IC(150)는, 통신 링크(125)를 통해 호스트 시스템(102)과 통신하는 것이 가능한 인터페이스(155)를 포함한다. 특정 실시예들에서, 인터페이스(155)는, 직접 메모리 액세스(direct memory access)(DMA) 회로를 포함하는 PCIe 인터페이스이다. 인터페이스(155)의 DMA 부분은 메모리 제어기(185)를 통해 커맨드 큐(165), 스테이터스 레지스터(170), 및/또는 메모리(130)와 같은 하나 이상의 메모리들을 판독하거나 그리고/또는 이들에 기입하는 것이 가능하여 그에 의해 호스트 시스템(102)이 그러한 메모리들을 판독하게 하거나 그리고/또는 이들에 기입하게 한다.
스케줄러(160)는 커맨드 큐(165), 스테이터스 레지스터(170), 및 제어기(175)를 더 포함할 수도 있다. 별개로 도시되었지만, 하나 이상의 다른 실시예들에서, 인터페이스(155)는 스케줄러(160)의 일부로 간주될 수도 있다.
커맨드 큐(165)는 메모리로서 구현될 수도 있다. 예를 들어, 커맨드 큐(165)는 랜덤 액세스 메모리(RAM)로서 구현될 수도 있다. 하나 이상의 실시예들에서, 커맨드 큐(165)는 IC(150) 내의 하나 이상의 블록 RAM(Block RAM)(BRAM)들로서 구현된다. 커맨드 큐(165)는 (예를 들어, 런타임 라이브러리를 실행함에 있어서) 호스트 프로세서(105)에 의해 기입되고 제어기(175)에 의해 판독될 수도 있다. 커맨드 큐(165)는 "슬롯들"이라고 지칭되는 고정된 사이즈의 복수의 구역들로 분할될 수도 있다. 각각의 슬롯은 호스트 프로세서(105)로부터의 커맨드(예를 들어, 하나의 커맨드)를 저장하는 것이 가능하다.
특정 실시예들에서, 각각의 슬롯은 동일한 사이즈이다. 하나의 양태에서, 슬롯들의 사이즈는 스케줄러(160)에 의해 핸들링될 가장 큰 커맨드의 사이즈가 알려져 있기 때문에 스케줄러(160)를 포함하는 회로 설계의 컴파일 시간에 구성될 수도 있다. 슬롯들은 스케줄러(160)에 의해 핸들링되는 가장 큰 커맨드를 저장하도록 사이징될 수도 있다. 하나 이상의 다른 실시예들에서, 슬롯들의 사이즈는 호스트 프로세서(105)에 의해 실행되는 런타임 라이브러리에 의해 구성될 수도 있다. 어떤 경우라도, 호스트 프로세서(105)는 새로운 커맨드들을 커맨드 큐(165)의 이용가능 슬롯들 내에 기입하는 것이 가능하다.
스테이터스 레지스터(170)는 메모리로서 구현될 수도 있다. 스테이터스 레지스터(170)는 커맨드 큐(165)에 포함되는 슬롯들의 수 이상인 수의 비트들을 포함하도록 사이징될 수도 있다. 이와 같이, 스테이터스 레지스터(170)의 각각의 비트 포지션은 커맨드 큐(165)의 슬롯에 대응할 수도 있다. 스테이터스 레지스터에서의 비트 포지션은, 대응하는 슬롯에 저장된 커맨드가 실행을 종료하였는지 여부를 표시한다. 예를 들어, 스테이터스 레지스터(170)에서의 비트 포지션 "X"에 기입된 "1"은, 커맨드 큐(165)의 슬롯 "X"에 저장된 커맨드가 실행을 완료하였음을 표시한다. 호스트 프로세서(105)는, 런타임 라이브러리의 실행에 의해, 커맨드 큐(165)로부터 임의의 커맨드들이 실행을 종료하였는지 여부 그리고/또는 어느 커맨드들이 실행을 종료하였는지를 결정하기 위해 커맨드 큐(165)에서의 비트들을 판독하는 것이 가능하다.
제어기(175)는 커맨드 큐(165) 내의 슬롯들(및 내부에 저장된 커맨드들)의 스테이터스를 추적하고, 컴퓨트 유닛들(180)의 스테이터스를 추적하고, 커맨드 큐(165)로부터의 커맨드들이 실행을 종료하였음을 표시하기 위해 스테이터스 레지스터(170)에 기입하는 것이 가능하다. 하나 이상의 실시예들에서, 제어기(175)는, IC(150)에 임베딩되고 프로그램 코드를 실행하는 것이 가능한 프로세서로서 구현된다. 특정 실시예들에서, 프로세서는 하드와이어링된다(hardwired). 다른 실시예들에서, 프로세서는, IC(150)의 프로그래밍가능 회로부를 사용하여 구현되는 "소프트 프로세서"이다. 제어기(175)는, 제어기(175)로 하여금 본 명세서에서 설명되는 다양한 동작들을 수행하게 하는 펌웨어를 실행할 수도 있다.
컴퓨트 유닛들(180)은 하드웨어 가속을 위해 사용된다. 컴퓨트 유닛들(180)은 호스트 시스템(102)으로부터 그리고, 더 구체적으로는, 호스트 프로세서(105)로부터 오프로딩된 동작들을 수행하는 데 사용될 수도 있다. 도 1의 예에서, 컴퓨트 유닛들(180)은 제어기(175)에 커플링된다. 제어기(175)는 커맨드 큐(165)로부터의 커맨드들을 판독하고 커맨드들을 컴퓨트 유닛들(180) 중 이용가능 컴퓨트 유닛들에게 제공하는 것이 가능하다. 하나 이상의 실시예들에서, 제어기(175)는 각각의 개개의 컴퓨트 유닛(180)이 사용 중(busy)인지 또는 유휴 상태인지 여부를 결정하기 위해 컴퓨트 유닛들(180)을 폴링하는 것이 가능하다. 하나 이상의 다른 실시예들에서, 컴퓨트 유닛들(180)은 컴퓨트 유닛이 커맨드의 실행을 종료하였음을 표시하기 위해 제어기(175)에 대한 인터럽트들을 생성하는 것이 가능하다.
하나 이상의 실시예들에서, 제어기(175)는 온-칩 인터커넥트(on-chip interconnect)(도시되지 않음)를 통해 컴퓨트 유닛들(180)에 커플링된다. 인터페이스(155)는 또한 온-칩 인터커넥트(도시되지 않음)를 통해 커맨드 큐(165)에 그리고 스테이터스 레지스터(170)에 커플링될 수도 있다. 온-칩 인터커넥트의 예는 진보된 마이크로제어기 버스 아키텍처(Advanced Microcontroller Bus Architecture)(AMBA) 확장가능 인터페이스(eXtensible Interface)(AXI) 버스이다. AMBA AXI 버스는, 회로 블록들 및/또는 시스템들 사이의 온-칩 커넥션들을 확립함에 있어서의 사용을 위한 임베디드 마이크로제어기 버스 인터페이스이다. AXI는 인터페이스의 예시적인 예로서 제공되고, 본 개시내용 내에서 설명되는 실시예들의 제한으로서 의도되지 않는다. 제어기(175)와 컴퓨트 유닛들(180)을 커플링하는 데 사용되는 인터페이스들의 다른 예들은 다른 타입들의 버스들, 네트워크-온-칩(network-on-chip)(NoC), 크로스-바, 또는 다른 타입의 스위치를 포함할 수도 있지만, 이에 제한되지 않는다.
메모리(130)는, 메모리 제어기(185)를 통해 컴퓨트 유닛들(180) 및/또는 제어기(175)에 의해 액세스(예를 들어, 판독 및/또는 기입)될 수도 있는 오프-칩 메모리로서 포함될 수도 있다. 하나 이상의 실시예들에서, 호스트 프로세서(105)는 또한 메모리 제어기(185)를 통해 메모리(130)에 액세스(예를 들어, 판독 및/또는 기입)할 수도 있다. 메모리(130)는 IC(150)가 커플링되는 회로 보드에 커플링될 수도 있다. 따라서, 특정 실시예들에서, 컴퓨트 유닛들(180)은 실행된 커맨드들의 결과들을 메모리(130)에 저장할 수도 있다. 그 후에, 호스트 프로세서(105)는 메모리(130)로부터의 결과들을 검색할 수도 있다.
예시의 편의 및 설명의 목적들을 위해, "개방형 컴퓨팅 언어(Open Computing Language)" 또는 "OpenCL™" 전문용어가 본 출원 전반에 걸쳐 사용된다. HCP들을 지원하는 다양한 상이한 프레임워크들 및/또는 언어들 중 임의의 것이 사용될 수도 있다는 것이 인식되어야 한다. 이와 같이, 본 발명의 어레인지먼트들은 OpenCL로 제한되도록 의도되지 않는다. 오히려, 본 개시내용 내에서 설명되는 실시예들은 다양한 적합하고 상이한 HCP 프레임워크들 중 임의의 것에서 사용될 수도 있다. 본 개시내용 내에서 설명되는 실시예들에서 사용될 수도 있는 다른 HCP 및/또는 하드웨어 가속 프레임워크들의 예들은 개방형 멀티-프로세싱(Open Multi-Processing)(OpenMP®) 및 CUDA®를 포함하지만, 이에 제한되지 않는다.
도 2는 도 1과 관련하여 설명된 HCP(100)의 호스트 프로세서(105)에 의해 수행되는 바와 같이 커맨드를 오프로딩하는 예시적인 방법(200)을 예시한다. 방법(200)은 HCP(100)가 동작하고 있는 상태에서 시작할 수도 있다. 호스트 프로세서(105)는, 적어도 부분적으로, IC(150) 및 내부에 포함된 스케줄러(160)와 통신하기 위한 기능들을 제공하는 런타임 라이브러리의 실행을 통해, 도 2를 참조하여 설명되는 동작들을 수행하는 것이 가능하다. 하나 이상의 실시예들에서, 호스트 프로세서(105)는, 런타임 라이브러리를 실행함에 있어서, 전용 커맨드 스레드를 실행한다. 호스트 프로세서(105)는, 커맨드 스레드를 실행함에 있어서, 도 2에 설명된 동작들을 수행하는 것이 가능하다.
블록 205에서, 호스트 프로세서는 커널 이벤트가 수신되었는지 여부를 결정하는 것이 가능하다. 커널 이벤트는 호스트 프로세서에 의해 실행되는 애플리케이션으로부터 수신될 수도 있고 하드웨어 가속기에 기능의 오프로딩을 요청한다. 커널 이벤트가 수신되는 경우, 방법(200)은 블록 210으로 계속된다. 커널 이벤트가 수신되지 않은 경우, 방법(200)은 블록 205를 통해 계속 루핑(loop)하여 커널 이벤트의 발생을 기다린다.
예를 들어, 호스트 프로세서는 커널 호출과 연관된 각각의 워크 그룹에 대해 스케줄러의 커맨드 큐에 커맨드를 기입하는 것이 가능하다. 별개의 커널 호출들(예를 들어, 커널 이벤트들)이 병렬로 실행되는 것이 가능하다. 호스트 프로세서는 각각의 커널 이벤트를 체크하여, 실행될 워크그룹들이 더 있는지 여부 또는 모든 워크그룹들이 그 특정 커널 이벤트에 대해 스케줄링되었는지를 결정하는 것이 가능하다.
블록 210에서, 호스트 프로세서는 커널 이벤트에 대해 스케줄링될 임의의 더 많은 워크그룹들이 있는지 여부를 결정하는 것이 가능하다. 예를 들어, 호스트 프로세서는, 커널 이벤트에 의해 나타낸 바와 같이, 수행될 기능을 하나 이상의 워크그룹들로 분할하는 것이 가능하다. 프로세싱될 하나 이상의 워크그룹들이 남아있는 경우, 방법(200)은 블록 215로 계속된다. 프로세싱될 추가의 워크그룹들이 남아있지 않은 경우, 방법(200)은 블록 240으로 진행한다.
일반적으로, 호스트 프로세서는 실행 중인 호스트 프로세서 애플리케이션마다 그러한 기능들이 실행될 준비가 될 때 즉시 기능들을 스케줄링하는 것이 가능하다. 논의된 바와 같이, 호스트 프로세서는 컴퓨트 유닛들이 준비가 되어 있는지 여부를 체크하기 위해 어떠한 폴링도 수행할 필요가 없다. 유사하게, 호스트 프로세서는 컴퓨팅 유닛들의 시작을 담당하지 않는다.
블록 215에서, 호스트 프로세서는 커맨드 큐에서의 슬롯을 획득하기 위해 스케줄러의 스테이터스 레지스터를 판독하는 것이 가능하다. 언급된 바와 같이, 스테이터스 레지스터에서의 각각의 비트는 커맨드 큐에서의 슬롯에 대응한다. 이에 따라, 판독할 때 "1"의 값을 갖는 스테이터스 레지스터의 임의의 비트 포지션들은, 비트 포지션에 대응하는 커맨드 큐의 슬롯에 저장된 커맨드가 실행을 완료하였음을 표시한다. 이와 같이, 그 슬롯은 호스트 프로세서로부터의 새로운 커맨드를 수신하는 것에 이용가능하거나 또는 비어 있다.
블록 220에서, 호스트 프로세서는 커맨드 큐에서의 슬롯이 이용가능한지 여부를 결정한다. 예를 들어, 호스트 프로세서가 스테이터스 레지스터로부터 하나 이상의 "1" 값들을 판독하는 경우, 그러면 스테이터스 레지스터로부터 판독된 "1" 값들의 수와 동일한 수의, 커맨드 큐 내의 슬롯들이 이용가능하다. 추가로, 호스트 프로세서는 판독된 "1" 값들의 비트 포지션들에 기초하여 커맨드 큐의 어느 슬롯들이 이용가능한지를 알고 있다. 커맨드 큐에서의 슬롯이 이용가능한 경우, 방법(200)은 블록 225로 계속된다. 호스트 프로세서가, 스테이터스 레지스터를 판독한 후에, 커맨드 큐에서의 어떠한 슬롯들도 이용가능하지 않다고 결정하는 경우(예를 들어, 스테이터스 레지스터가 "0" 값들을 모두 포함하는 경우), 방법(200)은 프로세싱을 계속하기 위해 블록 205로 루핑 백할 수도 있다. 호스트 프로세서는 계속 루핑하고 커맨드 큐 내의 슬롯을 획득하려고 시도하여, 수신된 이벤트를 프로세싱할 수도 있다. 특정 실시예들에서, 커맨드 큐는 컴퓨트 유닛들보다 더 많은 슬롯들을 포함할 수도 있다. 이와 관련하여, 컴퓨트 유닛의 가용성은 추가의 커맨드들을 저장하기 위해 커맨드 큐가 룸(room)(예를 들어, 비어 있는 슬롯들)을 갖고 있는지 여부에 대해 결정적이지 않다.
하나 이상의 실시예들에서, 스테이터스 레지스터는 판독 시 제거(clear-on-read)하도록 구현된다. 이와 같이, 스케줄러는 호스트 프로세서가 스테이터스 레지스터를 판독하는 일 없이 스테이터스 레지스터에 다수 회 기입하는 것이 가능하다. 스테이터스 레지스터가, 예를 들어, 호스트 프로세서에 의해 판독되는 것에 응답하여, 스테이터스 레지스터는 내부에 저장된 콘텐트들을 자동으로 제거하도록 구성된다.
블록 225에서, 호스트 프로세서는 커맨드 큐 내의 비어 있는 슬롯에 대한 어드레스를 컴퓨팅하는 것이 가능하다. 예를 들어, 스테이터스 레지스터를 판독한 후에, 호스트 프로세서는 커맨드 큐에서의 어느 슬롯들이 이용가능한지를 알고 있다. 각각의 슬롯은 고정된 사이즈를 갖기 때문에, 호스트 프로세서는 커맨드를 저장하기 위해 커맨드 큐에서의 이용가능 슬롯에 대한 어드레스를 컴퓨팅하는 것이 가능하다. 하나 이상의 실시예들에서, 호스트 프로세서는 커맨드를 저장하기 위해 커맨드 큐에서 제1 이용가능 슬롯을 선정하는 것이 가능하다. 그 경우에, 호스트 프로세서는 커맨드 큐에서의 제1 이용가능 슬롯에 대한 어드레스를 컴퓨팅한다.
블록 230에서, 호스트 프로세서는 다음 워크그룹에 대한 커맨드를 생성하는 것이 가능하다. 커맨드는 헤더 및 하나 이상의 인수들을 포함할 수도 있다. 커맨드의 헤더는, 커맨드의 타입을 표시하는 opcode, 및 IC의 컴퓨트 유닛들 중 어느 것이 커맨드를 실행하는 데 사용될 수도 있는지를 특정하는 비트 마스크를 포함할 수도 있다. 커맨드의 인수들은 레지스터 맵이라고 지칭되는 커맨드의 일 부분에 포함될 수도 있다. 커맨드의 인수들은, 커맨드를 실행함에 있어서 컴퓨트 유닛(들)에 의해 프로세싱되는 데이터이다. 상이한 타입들의 커맨드들이 상이한 수들의 다양한 사이즈의 인수들을 포함할 수도 있다.
하나 이상의 실시예들에서, 호스트 프로세서는 각각의 커맨드 내의 하나의 워크그룹을 포함한다. 하나 이상의 다른 실시예들에서, 호스트 프로세서는 커맨드에 하나 초과의 워크그룹을 포함시키는 것이 가능하다.
예시적이고 비제한적인 예로서, 하나의 타입의 커맨드는 START_KERNEL 커맨드이다. START_KERNEL 커맨드는, 커맨드의 타입을 표시하는 고유 opcode를 갖는다. 각각의 커널 이벤트에 응답하여, 호스트 프로세서는 커널 이벤트의 각각의 워크그룹에 대해 START_KERNEL 커맨드를 생성하는 것이 가능하다. 언급된 바와 같이, 다른 실시예들에서, START_KERNEL 커맨드는 하나 초과의 워크그룹을 포함할 수도 있다. START_KERNEL 커맨드는, opcode, 어느 컴퓨트 유닛들이 커맨드를 실행하는 데 사용될 수도 있는지를 표시하는 컴퓨트 유닛 비트 마스크, 및 인수들을 포함하는 레지스터 맵 부분을 포함한다. 인수들은, 주어진 커맨드에 대한 컴퓨트 유닛들을 시작하는 데 필요한 데이터를 포함한다.
START_KERNEL 커맨드 이외의 다른 커맨드들(예를 들어, opcode들)이 사용될 수도 있다는 것이 인식되어야 한다. 그러한 다른 커맨드들은 스케줄러에 의해 지원되는 다양한 상이한 목적들을 위한 것일 수도 있다. 예를 들어, 호스트 프로세서는, 컴퓨트 유닛 실행 진행의 디버깅을 구현하거나 IC 내의 하드웨어 리소스들에 관한 정보를 검색하거나 그리고/또는 전력 모니터링을 수행하는, 스케줄러가 실행할 커맨드들을 생성할 수도 있다.
블록 235에서, 호스트 프로세서는 블록 230에서 생성된 커맨드를 스케줄러의 커맨드 큐에 기입하는 것이 가능하다. 예를 들어, 호스트 프로세서는 블록 225에서 컴퓨팅된 어드레스를 갖는 커맨드 큐에서의 슬롯에 통신 링크를 통해 커맨드를 기입하는 것이 가능하다. 이와 같이, 커맨드는 커맨드 큐 상으로 효과적으로 푸시된다. 커맨드 큐가 이용가능 슬롯들을 갖고 있는 한, 호스트 프로세서는 슬롯들 내에 커맨드를 계속 저장할 수도 있다.
블록 240에서, 프로세싱할 추가의 워크그룹들이 없는 경우에, 호스트 프로세서는 커널 이벤트와 연관된 워크그룹들이 실행을 종료하였는지 여부를 체크하는 것이 가능하다. 스케줄러는 실행을 종료한 커맨드를 저장하는 커맨드 큐의 슬롯에 대응하는 스테이터스 레지스터에서의 비트 위치에 "1"의 값을 기입함으로써 커맨드가 실행을 종료하였음을 호스트 프로세서에게 통지하는 것이 가능하다.
하나 이상의 실시예들에서, 호스트 프로세서는 스테이터스 레지스터를 폴링하는 것(예를 들어, 스테이터스 레지스터를 주기적으로 판독하는 것)이 가능하다. 하나 이상의 다른 실시예들에서, 스케줄러는 스테이터스 레지스터가 기입되었음 그리고 호스트 프로세서가 스테이터스 레지스터를 판독해야 함을 표시하는 인터럽트를 호스트 프로세서에 생성하는 것이 가능하다.
어떤 경우라도, 블록 240에서, 호스트 프로세서는 커널 이벤트에 대한 워크그룹들에 대한 커맨드들이 실행을 종료하였는지 여부를 결정하기 위해 스테이터스 레지스터를 판독하는 것이 가능하다. 호스트 프로세서가 워크그룹들이 실행을 완료하지 않았다고 결정하는 경우, 방법(200)은 프로세싱을 계속하기 위해 블록 205로 루핑 백할 수도 있다. 호스트 프로세서가 워크그룹들이 실행을 완료하였다고 결정하는 경우, 방법(200)은 블록 245로 계속될 수도 있다. 블록 245에서, 호스트 프로세서는 커널 이벤트가 완료된 것으로서 마킹하는 것이 가능하다.
하나 이상의 실시예들에서, 호스트 프로세서가 스테이터스 레지스터를 판독할 때마다, 호스트 프로세서는 완료한 커맨드들 및 비어 있는 슬롯들의 스테이터스를 저장하는 것이 가능하다. 이와 관련하여, 도 2는 예시의 목적들을 위해 제공된다. 설명된 동작들의 특정 순서가 달라질 수도 있는데, 이는 호스트 프로세서가 슬롯들의 스테이터스를 저장하는 것이 가능하기 때문이다. 커맨드 큐의 슬롯은 슬롯을 마지막으로 점유한 커맨드가 프로세싱 또는 실행될 때까지 추가의 커맨드를 저장하기 위해 재사용될 수 없다.
도 3은 도 1과 관련하여 설명된 스케줄러(160)에 의해 수행되는 바와 같이 호스트 프로세서로부터의 커맨드들을 프로세싱하는 방법(300)을 예시한다. 방법(300)은 호스트 프로세서로부터의 커맨드들을 프로세싱하기 위해 스케줄러에 의해 수행될 수도 있는 동작들의 단순화된 버전이다. 예를 들어, 도 3은 도 4를 참조하여 더욱 상세히 설명되는 바와 같이 사용될 수도 있는 커맨드 큐에서의 슬롯들의 상이한 스테이터스들 각각을 예시하지 않는다.
방법(300)은 호스트 프로세서가 IC(150)에 커맨드를 전송한 상태에서 시작할 수도 있다. 블록 305에서, 커맨드가 호스트 프로세서로부터 수신되고 커맨드 큐의 슬롯에 저장된다. 예를 들어, IC 내의 인터페이스가 통신 링크를 통해 호스트 프로세서로부터 커맨드를 수신하는 것이 가능하다. 인터페이스는 호스트 프로세서에 의해 특정된 커맨드 큐의 어드레스에 커맨드를 저장한다. 논의된 바와 같이, 호스트 프로세서는 커맨드 큐의 슬롯들 중 어느 것이 비어 있는지를 결정하고 비어 있는 슬롯의 어드레스에의 커맨드의 기입을 개시하는 것이 가능하다.
블록 310에서, 스케줄러의 제어기는 새로운 커맨드를 검출하는 것이 가능하다. 하나 이상의 실시예들에서, 제어기는 커맨드 큐에서의 슬롯들 각각을 체크하고 기입된 바와 같은 호스트 프로세서로부터의 임의의 새로운 커맨드들을 검출하는 것이 가능하다. 특정 실시예들에서, 커맨드 큐의 슬롯들은 4개의 상이한 상태들 중 임의의 것으로 존재할 수도 있다. 예를 들어, 슬롯들은 비어 있음, 새로운 것, 큐잉됨, 또는 실행 중일 수도 있다. 제어기가 슬롯에서 새로운 커맨드를 검출할 때, 제어기는 커맨드 큐로부터 커맨드의 헤더를 판독하고 제어기 내에서 로컬로 헤더를 캐싱하는 것이 가능하다. 제어기가 슬롯(예를 들어, 및/또는 슬롯에 저장된 커맨드)의 스테이터스를 변경할 때, 제어기는 프로세싱 시간을 감소시키기 위해 커맨드 큐에 저장된 헤더와는 대조적으로 로컬로 캐싱된 헤더를 업데이트하는 것이 가능하다.
블록 315에서, 제어기는 IC 내의 컴퓨트 유닛들의 가용성을 추적하는 것이 가능하다. 예를 들어, 제어기는 컴퓨트 유닛들이 사용 중인지 또는 유휴 상태인지 여부를 결정하는 것이 가능하다. 블록 320에서, 제어기는 커맨드 큐에 저장된 커맨드를 실행하도록, 이용가능한, 예를 들어, 유휴 상태인 컴퓨트 유닛을 스케줄링하는 것이 가능하다. 하나 이상의 실시예들에서, 스케줄링된 컴퓨트 유닛은, 유휴 상태인 것이고 또한 커맨드의 헤더 내에 포함된 비트 마스크당 커맨드를 실행하도록 허용된 것이다. 블록 325에서, 제어기는 커맨드를 컴퓨트 유닛에 제공하고 컴퓨트 유닛을 시작하는 것이 가능하다. 블록 325에서, 예를 들어, 제어기는 커맨드의 인수들을 컴퓨트 유닛에 제공하고 컴퓨트 유닛을 시작한다.
블록 330에서, 제어기가 컴퓨트 유닛이 커맨드의 실행을 종료하였다고 결정하는 것에 응답하여, 제어기는 실행을 종료한 커맨드가 판독되게 한 커맨드 큐의 슬롯에 대응하는 스테이터스 레지스터에서의 비트 위치에 "1"의 값을 기입하는 것이 가능하다. 예를 들어, 실행을 종료한 커맨드가 커맨드 큐의 슬롯 3에 저장된 경우, 제어기는 커맨드 큐의 슬롯 3에 대응하는 스테이터스 레지스터에서의 비트 포지션에 "1"의 값을 기입한다. 블록 335에서, 제어기는 슬롯의 스테이터스를 비어 있음으로 업데이트하는 것이 가능하다. 언급된 바와 같이, 제어기는 커맨드의 헤더의 로컬로 캐싱된 카피를 업데이트함으로써 슬롯의 스테이터스를 업데이트할 수도 있다.
도 4는 도 1과 관련하여 설명된 스케줄러(160)에 의해 수행되는 바와 같이 호스트 프로세서로부터의 커맨드들을 프로세싱하는 다른 예시적인 방법(400)을 예시한다. 방법(400)은 호스트 프로세서로부터의 커맨드들을 프로세싱하기 위해 스케줄러에 의해 수행될 수도 있는 동작들의 더 상세한 버전을 예시한다. 방법(400)은 제어기가 커맨드 큐의 슬롯들을 통해 루핑하는 것이 가능한 예를 예시한다. 방법(400)은 제어기가 커맨드 큐의 슬롯들을 추적하고 이에 따라 슬롯들의 스테이터스들을 업데이트하는 방법을 추가로 예시한다.
블록 405에서, 제어기는 프로세싱할 임의의 추가 슬롯들이 있는지 여부를 결정하는 것이 가능하다. 프로세싱될 하나 이상의 슬롯들이 남아있다는 결정에 응답하여, 방법(400)은 블록 410으로 계속된다. 그렇지 않으면, 방법(400)이 종료될 수도 있다. 방법(400)은 주기적으로 또는 특정 이벤트들에 응답하여 커맨드 큐의 슬롯들을 프로세싱하기 위해 제어기에 의해 새로 시작될 수도 있다는 것이 인식되어야 한다.
블록 410에서, 제어기는 슬롯, 예를 들어, 현재 선택된 슬롯에 대한 헤더의 스테이터스를 체크하는 것이 가능하다. 예를 들어, 제어기는 슬롯에 대한 캐싱된 헤더에 저장된 값을 판독하는 것이 가능하다. 제어기에 의해 체크된 값은 슬롯의 스테이터스가 비어 있음, 새로운 것, 큐잉됨, 또는 실행 중인 것으로서 표시한다.
그 값이 슬롯이 비어 있음을 표시하는 것에 응답하여, 방법(400)은 블록 415로 계속된다. 블록 415에서, 제어기는 커맨드 큐로부터 직접적으로 슬롯에 대한 헤더를 판독하는 것이 가능하다. 논의된 바와 같이, 헤더를 판독함에 있어서, 제어기는 슬롯에 대한 헤더의 새로운 로컬로 캐싱된 카피를 저장하는 것이 가능하다. 블록 420에서, 제어기는 새로운 커맨드가 슬롯에서 수신되었는지 여부를 결정한다. 하나의 예에서, 제어기는 새로운 커맨드가 슬롯에 저장되었는지 여부를 결정하기 위해 새롭게 캐싱된 헤더를 앞서 캐싱된 헤더와 비교하는 것이 가능하다.
새로운 커맨드가 커맨드 큐의 슬롯에 저장된다는 결정에 응답하여, 방법(400)은 블록 425로 계속된다. 슬롯이 새로운 커맨드를 저장하지 않는다는 결정에 응답하여, 방법(400)은 추가의 슬롯들을 계속 프로세싱하기 위해 블록 405로 루핑 백한다. 블록 425에서, 제어기는 슬롯이 새로운 것임을 표시하기 위해 헤더의 로컬로 캐싱된 카피의 값을 설정하는 것이 가능하다.
방법(400)은 블록 425로부터 또는 제어기가 (블록 410에서의) 슬롯의 스테이터스가 새로운 것이라고 결정하는 경우에는 블록 410으로부터 블록 430으로 계속될 수도 있다. 블록 430에서, 제어기는 IC의 컴퓨트 유닛들 중 어느 것이 커맨드를 실행하는 데 사용될 수도 있는지를 결정한다. 예를 들어, 제어기 내에 캐싱된 커맨드의 헤더는, 어느 컴퓨트 유닛들이 커맨드를 실행하는 데 사용될 수도 있는지를 표시하는 하나 이상의 비트들을 포함할 수도 있다. 제어기는 이들 비트들을 판독하여, 컴퓨트 유닛들(예를 들어, 특정 컴퓨트 유닛들 및 컴퓨트 유닛들의 수) 중 어느 것이 커맨드를 실행하는 것이 가능한지(예를 들어, 실행하도록 허용되는지)를 결정하는 것이 가능하다.
하나 이상의 실시예들에서, 커맨드에 의해 사용될 수도 있는 컴퓨트 유닛들은 커맨드의 헤더 내의 비트 마스크로서 인코딩될 수도 있다. 비트 마스크는, 제어기에 의해 유지되는 컴퓨트 유닛 인덱스에 대응하는 포지션들에서의 비트들을 포함할 수도 있다(예를 들어, 여기서 각각의 컴퓨트 유닛은 대응하는 컴퓨트 유닛 인덱스에 의해 식별될 수도 있다). 하나 이상의 실시예들에서, 컴퓨트 유닛 어드레스들은 비연속적일 수도 있고 임의의 어드레스 범위들에 의해 분리될 수도 있다. 이와 같이, 제어기는 컴퓨트 유닛 인덱스를 컴퓨트 유닛에 대한 어드레스에 매핑시키는 룩업 테이블로 구성될 수도 있다. 제어기는, 컴퓨트 유닛 인덱스를, 컴퓨트 유닛 인덱스에 의해 식별되는 컴퓨트 유닛의 어드레스에 매핑시키기 위해 룩업 테이블을 사용함으로써 비트 마스크에 의해 특정되는 컴퓨트 유닛의 어드레스를 결정하는 것이 가능하다.
하나 이상의 다른 실시예들에서, 컴퓨트 유닛 어드레스들은 연속적일 수도 있고 고정된 어드레스 범위들에 의해 분리될 수도 있다. 그 경우에, 제어기는 커맨드의 헤더로부터 판독되는 비트 마스크에 기초하여 커맨드를 실행하는 데 사용될 수도 있는 컴퓨트 유닛들 각각의 어드레스를 결정하는 것이 가능하다. 특정 실시예들에서, 고정된 어드레스 범위는 4k일 수도 있다. 그 경우에, 제어기는 인덱스를 왼쪽으로 12(4k) 비트들만큼 시프트시킴으로써 컴퓨트 유닛 어드레스를 결정할 수도 있다.
블록 435에서, 제어기는 커맨드의 인수(들)의 어드레스를 결정한다. 특정 실시예들에서, 각각의 컴퓨트 유닛은, 인수들이 기입될 수도 있는 레지스터 맵(예를 들어, 레지스터 맵 인터페이스)을 갖는다. 컴퓨트 유닛의 레지스터 맵은, 커맨드의 페이로드에 저장되는 커맨드의 레지스터 맵 부분과의 일대일 대응을 가질 수도 있다. 블록 435에서, 제어기는 커맨드의 페이로드에서의 레지스터 맵의 위치에 대해 커맨드 큐로 오프셋시킴으로써 커맨드의 레지스터 맵의 어드레스를 결정하는 것이 가능하다.
블록 440에서, 제어기는 커맨드의 인수들의 사이즈를 판독하는 것이 가능하다. 블록 445에서, 제어기는 슬롯이 큐잉됨을 표시하기 위해 헤더 값을 설정하는 것이 가능하다. 논의된 바와 같이, 제어기는 헤더의 로컬로 캐싱된 카피 내의 헤더 값을 업데이트하고, 실제 커맨드 큐의 슬롯 내의 헤더가 방해받지 않은 채로 두는 것이 가능하다.
방법(400)은 블록 445로부터 또는 제어기가 (블록 410에서) 슬롯의 스테이터스가 큐잉된다고 결정하는 경우에는 블록 410으로부터 블록 450으로 계속될 수도 있다. 슬롯의 큐잉된 스테이터스는, 슬롯이, 컴퓨트 유닛에 의해 수행될 준비가 된 커맨드를 포함한다는 것을 의미한다. 이에 따라, 블록 450에서, 제어기는 비트 마스크당 커맨드를 실행하는 데 사용될 수도 있는 컴퓨트 유닛(들)의 스테이터스를 결정하는 것이 가능하다. 비트 마스크에 의해 특정되는 컴퓨트 유닛(들)이 사용 중이라는 결정에 응답하여, 방법(400)은 현재 슬롯 내의 커맨드가 컴퓨트 유닛에 오프로딩되지 않을 수도 있기 때문에 커맨드 큐의 다른 슬롯에 대해 프로세싱하기 위해 블록 405로 루핑 백한다. 컴퓨트 유닛(들) 중 하나 이상이 유휴 상태라는 결정에 응답하여, 방법(400)은 블록 455로 계속된다.
블록 455에서, 제어기는 블록 450에서 결정된 컴퓨트 유닛에 현재 프로세싱되고 있는 슬롯의 커맨드의 인수들을 기입한다. 하나 이상의 실시예들에서, 제어기는 블록 450에서 결정된 것들 중 제1 이용가능 컴퓨트 유닛을 선택한다. 예를 들어, 제어기는 메모리 카피를 수행하여, 커맨드 큐에서의 커맨드의 레지스터 맵(예를 들어, 페이로드)으로부터 선택된 컴퓨트 유닛의 레지스터 맵으로 인수(들)를 전송하는 것이 가능하다. 예를 들어, 제어기는 컴퓨트 유닛의 어드레스(예를 들어, 블록 430을 참조하여 설명된 바와 같이 결정된 컴퓨트 유닛의 레지스터 맵에 대한 기본 어드레스)에 기입함으로써 커맨드의 레지스터 맵의 콘텐트들을 컴퓨트 유닛에 카피할 수도 있다.
블록 460에서, 커맨드의 인수들을 컴퓨트 유닛에 기입한 후에, 제어기는 컴퓨트 유닛을 시작하는 것이 가능하다. 블록 465에서, 제어기는 실행 중인 스테이터스를 표시하기 위해 커맨드의 헤더의 로컬로 캐싱된 카피 내의 값을 설정하는 것이 가능하다. 실행 중인 스테이터스는, 커맨드가 하나 이상의 컴퓨트 유닛들에 의해 현재 실행 중임을 표시한다.
방법(400)은 블록 465로부터 또는 제어기가 (블록 410에서) 슬롯의 스테이터스가 실행 중이라고 결정하는 경우에는 블록 410으로부터 블록 470으로 계속될 수도 있다. 도 4는 제어기가 각각의 컴퓨트 유닛이 사용 중 상태에 있는지 또는 유휴 상태에 있는지 여부를 결정하기 위해 컴퓨트 유닛을 폴링하도록 구성되는 예시적인 구현을 예시한다. 이에 따라, 블록 470에서, 제어기는 컴퓨트 유닛의 스테이터스를 결정한다. 예를 들어, 제어기는 컴퓨트 유닛을 폴링하여, 컴퓨트 유닛이 사용 중인지 또는 유휴 상태인지 여부를 결정한다. 이에 응답하여, 컴퓨트 유닛은 현재 스테이터스를 사용 중 또는 유휴 상태로서 표시하는 신호를 제공할 수도 있다.
컴퓨트 유닛이 사용 중이라는 결정에 응답하여, 방법(400)은 커맨드 큐의 다음 슬롯의 스테이터스를 체크하기 위해 블록 405로 루핑 백한다. 컴퓨트 유닛이 유휴 상태라는 결정에 응답하여, 제어기는 스테이터스 레지스터를 업데이트함으로써 호스트 프로세서에 통지하는 것이 가능하다. 예를 들어, 제어기는 컴퓨트 유닛에 의해 실행된 커맨드를 포함하는 슬롯에 대응하는 스테이터스 레지스터의 비트 포지션에 "1"의 값을 기입할 수도 있다. 블록 480에서, 제어기는 비어 있는 스테이터스를 표시하기 위해 헤더 값을 설정한다. 논의된 바와 같이, 제어기는 실제 커맨드 큐 내의 헤더와는 대조적으로 커맨드의 헤더의 로컬로 캐싱된 카피 내의 헤더 값을 업데이트하는 것이 가능하다.
도 5는 컴퓨트 유닛들의 스테이터스를 결정하는 예시적인 방법(500)을 예시한다. 하나 이상의 실시예들에서, 컴퓨트 유닛들은 스테이터스의 변화를 표시하기 위해 인터럽트들을 생성하도록 구성될 수도 있다. 그러한 경우들에서, 제어기는 스테이터스를 결정하기 위해 컴퓨트 유닛들을 폴링할 필요가 없다. 도 5는 컴퓨트 유닛들이 그러한 인터럽트들을 생성하도록 구성되는 실시예들에서 제어기에 의해 수행될 수도 있는 동작들을 예시한다. 예를 들어, 도 5의 방법(500)은 컴퓨트 유닛들이 인터럽트들을 생성하도록 구성되고 제어기가 스테이터스에 대해 컴퓨트 유닛들을 폴링하지 않는 실시예들에서 도 4의 예에서의 블록들 470, 475, 및 480 대신에 사용될 수도 있다.
블록 505에서, 제어기는 컴퓨트 유닛으로부터의 인터럽트가 수신되었는지 여부를 결정한다. 예를 들어, 컴퓨트 유닛들에 의해 생성된 인터럽트들은 컴퓨트 유닛이 동작을 완료하였고 유휴 상태에 진입하였음을 표시할 수도 있다. 인터럽트가 컴퓨트 유닛으로부터 수신되지 않았다는 결정에 응답하여, 방법(500)은 컴퓨트 유닛으로부터의 수신된 인터럽트를 계속 체크하기 위해 블록 505로 루핑 백할 수도 있다. 컴퓨트 유닛으로부터의 인터럽트가 수신되었다는 결정에 응답하여, 방법(500)은 블록 510으로 계속될 수도 있다.
블록 510에서, 제어기는 어느 컴퓨트 유닛이 인터럽트를 트리거하였는지를 결정한다. 하나 이상의 실시예들에서, 제어기는, 동작을 완료한 각각의 컴퓨트 유닛에 대해 비트 세트를 갖는 비트 마스크를 수신하는 인터럽트 핸들러 루틴을 실행하는 것이 가능하다. 이와 같이, 인터럽트 핸들러 루틴은 한 번의 호출로 비트 마스크에 특정된 컴퓨트 유닛들 각각을 프로세싱하는 것이 가능하다. 방법(500)이 하나 초과의 컴퓨트 유닛으로부터의 인터럽트들을 프로세싱할 수도 있지만, 예시의 목적들을 위해, 컴퓨트 유닛으로부터의 단일 인터럽트의 핸들링이 설명된다.
블록 515에서, 제어기는 블록 505에서 인터럽트가 검출된 특정 라인 상의 인터럽트를 디스에이블시키는 것이 가능하다. 블록 520에서, 제어기는 인터럽트를 제거하기 위해 인터럽트를 생성한 컴퓨트 유닛에서의 스테이터스 레지스터를 제거하는 것이 가능하다. 블록 525에서, 제어기는 컴퓨트 유닛에 의해 실행되는 커맨드를 저장하는 커맨드 큐의 슬롯이 이제 비어 있음을 표시하기 위해 컴퓨트 유닛에 의해 실행되는 커맨드의 헤더의 로컬로 캐싱된 카피 내의 헤더 값을 업데이트하는 것이 가능하다.
블록 530에서, 제어기는 커맨드 큐의 대응하는 슬롯에 저장되는 커맨드가 실행을 종료하였음을 표시하기 위해 스테이터스 레지스터 내의 적절한 비트를 업데이트하는 것이 가능하다. 논의된 바와 같이, 스테이터스 레지스터에 기입하면, 스케줄러가, 커맨드가 실행을 완료하였음을 호스트 시스템에 통지하게 한다. 블록 535에서, 제어기는 컴퓨트 유닛에 대응하는 라인 상의 인터럽트들을 인에이블시키는 것이 가능하다.
본 개시내용은 실행이 완료되었음을 스케줄러에 통지하기 위해 컴퓨트 유닛들이 인터럽트들을 생성하는 것이 가능한 실시예들(인터럽트 모드) 및 실행이 종료되는지 여부를 결정하기 위해 스케줄러가 컴퓨트 유닛들을 폴링하는 것이 가능한 실시예들(폴링 모드)을 설명한다. 일부 경우들에서, 컴퓨트 유닛 폴링은 스케줄러에 의해 구현될 수도 있다. 다른 경우들에서, 컴퓨트 유닛들은 설명된 바와 같이 인터럽트들을 생성하도록 구성될 수도 있다. 인터럽트 모드를 사용할 때, 컴퓨트 유닛들을 폴링하기 위해 호스트 프로세서에 의해 실행되는 스레드는 커맨드 큐가 새로운 커맨드들을 저장할 룸을 가질 때에만 단지 실행되는 순수한 스케줄링 스레드로서 실행되도록 구성될 수도 있다.
또 다른 경우들에서, 폴링과 컴퓨트 유닛 생성 인터럽트들 양측 모두가 조합하여 사용될 수도 있다. 예를 들어, 인터럽트 핸들링은 다수의 커널들이 동시에 실행 중일 때 폴링보다 개선된 성능을 제공할 수도 있다. 폴링 모드에서는, 실행 중인 커맨드들 각각에 대해 컴퓨트 유닛 스테이터스 레지스터가 판독되어야 한다. 인터럽트 모드에서는, 컴퓨트 유닛이 완료된 실행을 알리기 위해 스케줄러를 인터럽트하지 않는 한 컴퓨트 유닛 스테이터스 레지스터가 판독되지 않는다. 이와 같이, 제한된 수의 컴퓨트 유닛들이 실행 중인 경우들에서, 폴링 모드가 인터럽트 모드보다 더 빠를 수도 있다. 실행 중인 컴퓨트 유닛들의 수가 임계 수를 초과함에 따라, 실시예들은 인터럽트 모드로 전이시킬 수도 있다. 실시예들은 실행된 컴퓨트 유닛들의 수가 컴퓨트 유닛들의 임계 수와 비교한 것에 기초하여 폴링 모드와 인터럽트 모드 사이에서 전이시킬 수도 있다.
본 명세서에서 설명되는 본 발명의 어레인지먼트들에 따르면, 스케줄러는 커맨드에 특정되는 컴퓨트 유닛들 중 임의의 것 상으로 워크그룹들을 스케줄링하는 것이 가능하다. 스케줄러는 유휴 컴퓨트 유닛들 상에서 가능한 한 많은 워크그룹들을 스케줄링하고, 추가의 워크그룹들을 스케줄링하기 전에 컴퓨트 유닛들이 다시 유휴 상태가 되기를 기다릴 수도 있다.
특정 실시예들에서, 커맨드 큐가 가득 찬 경우들에서, 호스트 프로세서는 커맨드 큐가 더 많은 커맨드들을 위한 룸을 갖고 있다는 통지를 기다릴 수도 있다. 통지는 호스트 프로세서가 스케줄러를 폴링하는 것에 의해 또는 스케줄러(예를 들어, 제어기)가 커맨드 큐 내의 이용가능한 공간을 표시하는 프로세서에 대한 인터럽트를 생성하는 것에 의해 구현될 수도 있다.
도 6은 IC에 대한 예시적인 아키텍처(600)를 예시한다. 하나의 양태에서, 아키텍처(600)는 프로그래밍가능 IC 내에서 구현될 수도 있다. 예를 들어, 아키텍처(600)는 FPGA를 구현하는 데 사용될 수도 있다. 아키텍처(600)는 또한 시스템-온-칩(system-on-chip)(SOC) 타입의 IC를 나타낼 수도 있다. SOC는, 프로그램 코드를 실행하는 프로세서 및 하나 이상의 다른 회로들을 포함하는 IC이다. 다른 회로들은 하드와이어드 회로부, 프로그래밍가능 회로부, 및/또는 이들의 조합으로서 구현될 수도 있다. 회로들은 서로와 그리고/또는 프로세서와 협력하여 동작할 수도 있다.
도시된 바와 같이, 아키텍처(600)는 몇몇 상이한 타입들의 프로그래밍가능 회로, 예를 들어, 로직, 블록들을 포함한다. 예를 들어, FPGA 아키텍처(600)는, 멀티-기가비트 트랜시버(multi-gigabit transceiver)(MGT)들(601), 구성가능 로직 블록(configurable logic block)(CLB)들(602), 랜덤 액세스 메모리 블록(BRAM)들(603), 입/출력 블록(input/output block)(IOB)들(604), 구성 및 클록킹 로직(CONFIG/CLOCKS)(605), 디지털 신호 프로세싱 블록(DSP)들(606), 특수 I/O 블록들(607)(예를 들어, 구성 포트들 및 클록 포트들), 및 다른 프로그래밍가능 로직(608) 예컨대 디지털 클록 관리자들, 아날로그-디지털 컨버터(analog-to-digital converter)들, 시스템 모니터링 로직 등을 포함하는 다수의 상이한 프로그래밍가능 타일들을 포함할 수도 있다.
일부 IC들에서, 각각의 프로그래밍가능 타일은, 각각의 인접한 타일에서 대응하는 INT(611)로의 그리고 그로부터의 표준화된 커넥션들을 갖는 프로그래밍가능 인터커넥트 요소(INT)(611)를 포함한다. 그에 따라, 함께 취해진 INT들(611)은, 예시된 IC에 대한 프로그래밍가능 인터커넥트 구조체를 구현한다. 각각의 INT(611)는, 도 6의 상부에 포함된 예들에 의해 도시된 바와 같이, 동일한 타일 내의 프로그래밍가능 로직 요소로의 그리고 그로부터의 커넥션들을 또한 포함한다.
예를 들어, CLB(602)는, 단일 INT(611)에 더하여 사용자 로직을 구현하도록 프로그래밍될 수도 있는 구성가능 로직 요소(configurable logic element)(CLE)(612)를 포함할 수도 있다. BRAM(603)은, 하나 이상의 INT들(611)에 부가적으로 BRAM 로직 요소(BRAM logic element)(BRL)(613)를 포함할 수도 있다. 전형적으로, 타일에 포함된 INT들(611)의 수는 타일의 높이에 좌우된다. 그려진 바와 같이, BRAM 타일은 5개의 CLB들과 동일한 높이를 갖지만, 다른 수들(예를 들어, 4개)이 또한 사용될 수도 있다. DSP 타일(606)은 적절한 수의 INT들(611)에 부가적으로 DSP 로직 요소(DSP logic element)(DSPL)(614)를 포함할 수도 있다. IOB(604)는 INT(611)의 하나의 인스턴스에 부가적으로, 예를 들어, I/O 로직 요소(I/O logic element)(IOL)(615)의 2개의 인스턴스들을 포함할 수도 있다. IOL(615)에 연결되는 실제 I/O 패드들이 IOL(615)의 영역에 국한되지 않을 수도 있다.
도 6에 그려진 예에서, 예를 들어, 구역들(605, 607, 및 608)로 형성되는 다이의 중심 근처의 컬럼 영역은 구성, 클록, 및 다른 제어 로직에 대해 사용될 수도 있다. 이 컬럼으로부터 연장되는 수평 영역들(609)은 프로그래밍가능 IC의 폭에 걸쳐 클록들 및 구성 신호들을 분배하는 데 사용될 수도 있다.
도 6에 예시된 아키텍처를 이용하는 일부 IC들은, IC의 큰 부분을 구성하는 정규 컬럼 구조체를 방해하는 부가적인 로직 블록들을 포함한다. 부가적인 로직 블록들은 프로그래밍가능 블록들 및/또는 전용 회로부일 수도 있다. 예를 들어, PROC(610)로서 도시된 프로세서 블록이 CLB들 및 BRAM들의 몇몇 컬럼들에 걸쳐 있다.
하나의 양태에서, PROC(610)는 IC의 프로그래밍가능 회로부를 구현하는 다이의 일부로서 제작되는 전용 회로부로서, 예를 들어, 하드와이어드 프로세서로서 구현될 수도 있다. PROC(610)는 개별 프로세서, 예를 들어, 프로그램 코드를 실행하는 것이 가능한 단일 코어로부터, 하나 이상의 코어들, 모듈들, 코-프로세서들, 인터페이스들, 또는 이와 유사한 것을 갖는 전체 프로세서 시스템에 이르기까지의 복잡도의 범위에 있는 다양한 상이한 프로세서 타입들 및/또는 시스템들 중 임의의 것을 나타낼 수도 있다.
다른 양태에서, PROC(610)는 아키텍처(600)로부터 생략될 수도 있고, 설명된 프로그래밍가능 블록들의 다른 변종들 중 하나 이상으로 대체될 수도 있다. 추가로, 그러한 블록들은, 프로그래밍가능 회로부의 다양한 블록들이 PROC(610)의 경우와 같이 프로그램 코드를 실행할 수 있는 프로세서를 형성하는 데 사용될 수도 있다는 점에서, "소프트 프로세서"를 형성하는 데 이용될 수도 있다.
"프로그래밍가능 회로부(programmable circuitry)"라는 어구는 IC 내의 프로그래밍가능 회로 요소들, 예를 들어, 본 명세서에서 설명되는 다양한 프로그래밍가능 또는 구성가능 회로 블록들 또는 타일들뿐만 아니라, IC 내로 로딩되는 구성 데이터에 따라 다양한 회로 블록들, 타일들, 및/또는 요소들을 선택적으로 커플링하는 인터커넥트 회로부를 지칭한다. 예를 들어, CLB들(602) 및 BRAM들(603)과 같은, PROC(610) 외부에 있는 도 6에 도시된 회로 블록들이 IC의 프로그래밍가능 회로부로 간주된다.
일반적으로, 프로그래밍가능 회로부의 기능성은 구성 데이터가 IC 내로 로딩될 때까지 확립되지 않는다. 한 세트의 구성 비트들은 FPGA와 같은 IC의 프로그래밍가능 회로부를 프로그래밍하는 데 사용될 수도 있다. 구성 비트(들)는 전형적으로 "구성 비트스트림"이라고 지칭된다. 일반적으로, 프로그래밍가능 회로부는 구성 비트스트림을 IC 내로 먼저 로딩하는 일 없이는 동작 또는 기능하지 않는다. 구성 비트스트림은 프로그래밍가능 회로부 내의 특정 회로 설계를 효과적으로 구현한다. 예를 들어, 회로 설계는, 프로그래밍가능 회로 블록들의 기능적 양태들 및 다양한 프로그래밍가능 회로 블록들 간의 물리적 연결성을 특정한다.
"하드와이어링된" 또는 "경화된", 즉, 프로그래밍가능하지 않은, 회로부가 IC의 일부로서 제조된다. 프로그래밍가능 회로부와는 달리, 하드와이어드 회로부 또는 회로 블록들은 구성 비트스트림의 로딩을 통해 IC의 제조 후에 구현되지 않는다. 하드와이어드 회로부는 일반적으로, 예를 들어, 구성 비트스트림을 IC, 예를 들어, PROC(610) 내로 먼저 로딩하는 일 없이 기능하는 전용 회로 블록들 및 인터커넥트들을 갖는 것으로 간주된다.
일부 경우들에서, 하드와이어드 회로부는, IC 내의 하나 이상의 메모리 요소들에 저장되는 레지스터 설정들 또는 값들에 따라 설정 또는 선택될 수 있는 하나 이상의 동작 모드들을 가질 수도 있다. 동작 모드들은, 예를 들어, IC 내로의 구성 비트스트림의 로딩을 통해, 설정될 수도 있다. 이 능력에도 불구하고, 하드와이어드 회로부가 프로그래밍가능 회로부로 간주되지 않는데, 이는 하드와이어드 회로부가 IC의 일부로서 제조될 때 동작가능하고 특정 기능을 갖기 때문이다.
SOC의 경우에, 구성 비트스트림은 PROC(610) 또는 소프트 프로세서에 의해 실행되어야 하는 프로그램 코드 및 프로그래밍가능 회로부 내에서 구현되어야 하는 회로부를 특정할 수도 있다. 일부 경우들에서, 아키텍처(600)는, 구성 비트스트림을 적절한 구성 메모리 및/또는 프로세서 메모리로 로딩하는 전용 구성 프로세서를 포함한다. 전용 구성 프로세서는 사용자-특정된 프로그램 코드를 실행하지 않는다. 다른 경우들에서, 아키텍처(600)는 PROC(610)를 이용하여 구성 비트스트림을 수신하거나, 구성 비트스트림을 적절한 구성 메모리 내로 로딩하거나, 그리고/또는 실행을 위해 프로그램 코드를 추출할 수도 있다.
스케줄러(160)는 도 6과 관련하여 설명된 바와 같은 아키텍처를 갖는 IC를 사용하여 구현될 수도 있다. 예를 들어, BRAM들이 커맨드 큐를 구현하는 데 사용될 수도 있다. PROC(610)는 제어기(175)를 구현하는 데 사용될 수도 있다. IC의 프로그래밍가능 회로부 내의 레지스터들은 스테이터스 레지스터(170)를 구현하는 데 사용될 수도 있다. 프로그래밍가능 회로부는 인터페이스(155) 및 컴퓨트 유닛들(180)을 구현하는 데 사용될 수도 있다. 특정 실시예들에서, 메모리 제어기(185)는 하드와이어링된다. 다른 실시예들에서, 메모리 제어기(185)는 또한 프로그래밍가능 회로부를 사용하여 구현된다.
도 6은 프로그래밍가능 회로부, 예를 들어, 프로그래밍가능 패브릭을 포함하는 IC를 구현하는 데 사용될 수도 있는 예시적인 아키텍처를 예시하도록 의도된 것이다. 예를 들어, 컬럼에서의 로직 블록들의 수들, 컬럼들의 상대적 폭, 컬럼들의 수 및 순서, 컬럼들에 포함된 로직 블록들의 타입들, 로직 블록들의 상대적 사이즈들, 및 도 6의 상부에 포함된 인터커넥트/로직 구현들은 순전히 예시적인 것이다. 예를 들어, 실제 IC에서는, 사용자 회로 설계의 효율적인 구현을 용이하게 하기 위해, CLB들이 나타나는 곳 어디에나 하나 초과의 인접한 컬럼의 CLB들이 전형적으로 포함된다. 그러나, 인접한 CLB 컬럼들의 수는 IC의 전체 사이즈에 따라 달라질 수도 있다. 추가로, IC 내의 PROC(610)와 같은 블록들의 사이즈 및/또는 포지셔닝은 단지 예시의 목적들을 위한 것이고 제한들로서 의도되지 않는다.
설명의 목적들을 위해, 본 명세서에 개시된 다양한 본 발명의 개념들의 완전한 이해를 제공하기 위해 특정 명명법이 제시된다. 그러나, 본 명세서에서 사용되는 전문용어는 단지 본 발명의 어레인지먼트들의 특정 양태들을 설명할 목적을 위한 것이고 제한하려는 것으로 의도되지 않는다.
본 명세서에서 정의되는 바와 같이, 문맥상 명확히 달리 표시하지 않는 한, 단수형들 "a", "an", 및 "the"는 복수형들도 또한 포함하도록 의도된다.
본 명세서에서 정의되는 바와 같이, "적어도 하나(at least one)", "하나 이상(one or more)", 및 "및/또는(and/or)"이라는 용어들은 달리 명시적으로 언급되지 않는 한 동작에 있어서의 결합(conjunctive)과 분리(disjunctive) 양측 모두인 개방형 표현(open-ended expression)들이다. 예를 들어, "A, B, 및 C 중 적어도 하나", "A, B, 또는 C 중 적어도 하나", "A, B, 및 C 중 하나 이상", "A, B, 또는 C 중 하나 이상", 및/또는 "A, B, 및/또는 C"라는 표현들 각각은 A만을 단독으로, B만을 단독으로, C만을 단독으로, A와 B를 함께, A와 C를 함께, B와 C를 함께, 또는 A, B 및 C를 함께를 의미한다.
본 명세서에서 정의되는 바와 같이, "자동으로(automatically)"라는 용어는 사용자 개입이 없다는 것을 의미한다. 본 명세서에서 정의되는 바와 같이, "사용자(user)"라는 용어는 인간이라는 것을 의미한다.
본 명세서에서 정의되는 바와 같이, "컴퓨터 판독가능 저장 매체(computer readable storage medium)"라는 용어는, 명령어 실행 시스템, 장치, 또는 디바이스에 의해 또는 이와 관련하여 사용하기 위한 프로그램 코드를 포함 또는 저장하는 저장 매체를 의미한다. 본 명세서에서 정의되는 바와 같이, "컴퓨터 판독가능 저장 매체"는 그 자체가 일시적 전파 신호가 아니다. 컴퓨터 판독가능 저장 매체는 전자 저장 디바이스, 자기 저장 디바이스, 광학 저장 디바이스, 전자기 저장 디바이스, 반도체 저장 디바이스, 또는 전술한 것의 임의의 적합한 조합일 수도 있지만, 이에 제한되지 않는다. 본 명세서에서 설명되는 바와 같은 다양한 형태들의 메모리는 컴퓨터 판독가능 저장 매체들의 예들이다. 컴퓨터 판독가능 저장 매체의 더 구체적인 예들의 비포괄적인 리스트는: 휴대용 컴퓨터 디스켓, 하드 디스크, RAM, 판독 전용 메모리(ROM), 소거가능 프로그래밍가능 판독 전용 메모리(EPROM 또는 플래시 메모리), 전자적 소거가능 프로그래밍가능 판독 전용 메모리(electronically erasable programmable read-only memory)(EEPROM), 정적 랜덤 액세스 메모리(static random-access memory)(SRAM), 휴대용 콤팩트 디스크 판독 전용 메모리(compact disc read-only memory)(CD-ROM), 디지털 다목적 디스크(digital versatile disk)(DVD), 메모리 스틱, 플로피 디스크, 또는 이와 유사한 것을 포함할 수도 있다.
본 명세서에서 정의되는 바와 같이, "~인 경우(if)"라는 용어는 맥락에 따라 "~일 때(when)" 또는 "~시에(upon)" 또는 "~에 응답하여(in response to)" 또는 "~에 응답하는(responsive to)"을 의미한다. 따라서, "그것이 결정되는 경우" 또는 "[언급된 조건 또는 이벤트]가 검출되는 경우"라는 어구는 맥락에 따라 "결정 시에" 또는 "결정에 응답하여" 또는 "[언급된 조건 또는 이벤트]의 검출 시에" 또는 "[언급된 조건 또는 이벤트]의 검출에 응답하여" 또는 "[언급된 조건 또는 이벤트]의 검출에 응답하는"을 의미하는 것으로 해석될 수도 있다.
본 명세서에서 정의되는 바와 같이, 용어 "~에 응답하는" 및 상술된 것과 유사한 언어, 예를 들어, "~인 경우", "~일 때", 또는 "~시에"는 액션 또는 이벤트에 쉽게 응답 또는 반응하는 것을 의미한다. 응답 또는 반응은 자동으로 수행된다. 따라서, 두 번째 액션이 첫 번째 액션"에 응답하여" 수행되는 경우, 첫 번째 액션의 발생과 두 번째 액션의 발생 사이에 인과 관계가 있다. "~에 응답하는"이라는 용어는 인과 관계를 표시한다.
본 명세서에서 정의되는 바와 같이, 용어들 "하나의 실시예(one embodiment)", "일 실시예(an embodiment)", "하나 이상의 실시예들(one or more embodiments)", "특정 실시예들(particular embodiments)", 또는 유사한 언어는, 실시예와 관련하여 설명되는 특정 피처, 구조체, 또는 특성이 본 개시내용 내에서 설명되는 적어도 하나의 실시예에 포함된다는 것을 의미한다. 따라서, 본 개시내용 전반에 걸친 어구들 "하나의 실시예에서(in one embodiment)", "일 실시예에서(in an embodiment)", "하나 이상의 실시예들에서(in one or more embodiments)", "특정 실시예들에서(in particular embodiments)", 및 유사한 언어의 출현들은 모두가 동일한 실시예를 지칭할 수도 있지만, 반드시 그러한 것은 아니다. "실시예(embodiment)" 및 "어레인지먼트(arrangement)"라는 용어들은 본 개시내용 내에서 상호교환가능하게 사용된다.
본 명세서에서 정의되는 바와 같이, "프로세서(processor)"라는 용어는 적어도 하나의 하드웨어 회로를 의미한다. 하드웨어 회로는 프로그램 코드에 포함되는 명령어들을 수행하도록 구성될 수도 있다. 하드웨어 회로는 집적 회로일 수도 있다. 프로세서의 예들은 중앙 프로세싱 유닛(CPU), 어레이 프로세서, 벡터 프로세서, 디지털 신호 프로세서(DSP), FPGA, 프로그래밍가능 로직 어레이(PLA), ASIC, 프로그래밍가능 로직 회로부, 및 제어기를 포함하지만, 이에 제한되지 않는다.
본 명세서에서 정의되는 바와 같이, "출력(output)"이라는 용어는 물리적 메모리 요소들, 예를 들어, 디바이스들에 저장하는 것, 디스플레이 또는 다른 주변기기 출력 디바이스에 기입하는 것, 다른 시스템으로 전송 또는 송신하는 것, 엑스포팅(exporting)하는 것, 또는 이와 유사한 것을 의미한다.
본 명세서에서 정의되는 바와 같이, "실시간(real time)"이라는 용어는, 사용자 또는 시스템이 특정 프로세스 또는 결정이 이루어지도록 충분히 즉각적으로 감지하거나, 또는 프로세서가 일부 외부 프로세스를 따라갈 수 있게 하는 프로세싱 응답도의 레벨을 의미한다.
본 명세서에서 정의되는 바와 같이, "실질적으로(substantially)"라는 용어는, 언급된 특성, 파라미터, 또는 값이 정확하게 달성될 필요는 없지만, 예를 들어, 허용오차들, 측정 에러, 측정 정확도 한계들, 및 본 기술분야의 통상의 기술자에게 알려진 다른 인자들을 포함하는 편차들 또는 변동들이, 특성이 제공하려고 의도된 효과를 배제하지 않는 양(amount)들로 발생할 수도 있다는 것을 의미한다.
제1, 제2 등의 용어들은 다양한 요소들을 설명하기 위해 본 명세서에서 사용될 수도 있다. 이들 요소들은 이들 용어들에 의해 제한되어서는 안 되는데, 이는 이들 용어들이, 달리 언급되지 않거나 또는 문맥상 명확히 달리 표시하지 않는 한, 하나의 요소를 다른 요소와 구별하기 위해서만 단지 사용되기 때문이다.
컴퓨터 프로그램 제품은, 프로세서로 하여금 본 명세서에서 설명되는 본 발명의 어레인지먼트들의 양태들을 수행하게 하기 위한 컴퓨터 판독가능 프로그램 명령어들을 갖는 컴퓨터 판독가능 저장 매체(또는 매체들)를 포함할 수도 있다. 본 개시내용 내에서, "프로그램 코드(program code)"라는 용어는 "컴퓨터 판독가능 프로그램 명령어들(computer readable program instructions)"이라는 용어와 상호교환가능하게 사용된다. 본 명세서에서 설명되는 컴퓨터 판독가능 프로그램 명령어들은 컴퓨터 판독가능 저장 매체로부터 개개의 컴퓨팅/프로세싱 디바이스들로 또는 네트워크, 예를 들어, 인터넷, LAN, WAN 및/또는 무선 네트워크를 통해 외부 컴퓨터 또는 외부 저장 디바이스로 다운로드될 수도 있다. 네트워크는, 구리 송신 케이블들, 광 송신 섬유들, 무선 송신, 라우터들, 방화벽들, 스위치들, 게이트웨이 컴퓨터들 및/또는 에지 서버들을 포함하는 에지 디바이스들을 포함할 수도 있다. 각각의 컴퓨팅/프로세싱 디바이스에서의 네트워크 어댑터 카드 또는 네트워크 인터페이스는 네트워크로부터 컴퓨터 판독가능 프로그램 명령어들을 수신하고 개개의 컴퓨팅/프로세싱 디바이스 내의 컴퓨터 판독가능 저장 매체에의 저장을 위해 컴퓨터 판독가능 프로그램 명령어들을 포워딩한다.
본 명세서에서 설명되는 본 발명의 어레인지먼트들에 대한 동작들을 수행하기 위한 컴퓨터 판독가능 프로그램 명령어들은, 어셈블러 명령어들, 명령어 세트 아키텍처(instruction-set-architecture)(ISA) 명령어들, 머신 명령어들, 머신 종속 명령어들, 마이크로코드, 펌웨어 명령어들, 또는 객체 지향 프로그래밍 언어 및/또는 절차적 프로그래밍 언어들을 포함하는 하나 이상의 프로그래밍 언어들의 임의의 조합으로 작성된 소스 코드 또는 개체 코드 중 어느 하나일 수도 있다. 컴퓨터 판독가능 프로그램 명령어들은 상태 설정 데이터를 포함할 수도 있다. 컴퓨터 판독가능 프로그램 명령어들은 사용자의 컴퓨터 상에서 전체적으로, 사용자의 컴퓨터 상에서 부분적으로, 독립형 소프트웨어 패키지로서, 사용자의 컴퓨터 상에서 부분적으로 그리고 원격 컴퓨터 상에서 부분적으로 또는 원격 컴퓨터 또는 서버 상에서 전체적으로 실행할 수도 있다. 후자의 시나리오에서, 원격 컴퓨터는 LAN 또는 WAN을 포함하는 임의의 타입의 네트워크를 통해 사용자의 컴퓨터에 연결될 수도 있거나, 또는 (예를 들어, 인터넷 서비스 제공자를 사용하는 인터넷을 통해) 외부 컴퓨터에 연결이 이루어질 수도 있다. 일부 경우들에서, 예를 들어, 프로그래밍가능 로직 회로부, FPGA, 또는 PLA를 포함하는 전자 회로부는 본 명세서에서 설명되는 본 발명의 어레인지먼트들의 양태들을 수행하기 위해, 컴퓨터 판독가능 프로그램 명령어들의 상태 정보를 이용하여 전자 회로부를 개인화함으로써 컴퓨터 판독가능 프로그램 명령어들을 실행할 수도 있다.
본 발명의 어레인지먼트들의 특정 양태들은 방법들, 장치(시스템들), 및 컴퓨터 프로그램 제품들의 흐름도 예시들 및/또는 블록도들을 참조하여 본 명세서에서 설명된다. 흐름도 예시들 및/또는 블록도들의 각각의 블록, 및 흐름도 예시들 및/또는 블록도들에서의 블록들의 조합들은, 컴퓨터 판독가능 프로그램 명령어들, 예를 들어, 프로그램 코드에 의해 구현될 수도 있다는 것이 이해될 것이다.
이들 컴퓨터 판독가능 프로그램 명령어들은 범용 컴퓨터, 특수 목적 컴퓨터, 또는 다른 프로그래밍가능 데이터 프로세싱 장치의 프로세서에 제공되어, 컴퓨터 또는 다른 프로그래밍가능 데이터 프로세싱 장치의 프로세서를 통해 실행되는 명령어들이 흐름도 및/또는 블록도의 블록 또는 블록들에 특정된 기능들/작용들을 구현하기 위한 수단을 생성하도록 하는 머신을 생성할 수도 있다. 이들 컴퓨터 판독가능 프로그램 명령어들은 또한, 컴퓨터, 프로그래밍가능 데이터 프로세싱 장치, 및/또는 다른 디바이스들이 특정 방식으로 기능하도록 지시할 수 있는 컴퓨터 판독가능 저장 매체에 저장될 수도 있어서, 내부에 저장되는 명령어들을 갖는 컴퓨터 판독가능 저장 매체가, 흐름도 및/또는 블록도의 블록 또는 블록들에 특정된 동작들의 양태들을 구현하는 명령어들을 포함하는 제조 물품을 포함하도록 한다.
컴퓨터 판독가능 프로그램 명령어들은 또한, 컴퓨터, 다른 프로그래밍가능 데이터 프로세싱 장치, 또는 다른 디바이스 상에 로딩되어 일련의 동작들이 컴퓨터, 다른 프로그래밍가능 장치 또는 다른 디바이스 상에서 수행되게 하여, 컴퓨터, 다른 프로그래밍가능 장치, 또는 다른 디바이스 상에서 실행하는 명령어들이 흐름도 및/또는 블록도의 블록 또는 블록들에 특정된 기능들/작용들을 구현하도록 하는 컴퓨터 구현 프로세스를 생성할 수도 있다.
도면들의 흐름도 및 블록도들은 본 발명의 어레인지먼트들의 다양한 양태들에 따른 시스템들, 방법들 및 컴퓨터 프로그램 제품들의 가능한 구현들의 아키텍처, 기능성, 및 동작을 예시한다. 이와 관련하여, 흐름도 또는 블록도들에서의 각각의 블록은, 특정된 동작들을 구현하기 위한 하나 이상의 실행가능 명령어들을 포함하는 모듈, 세그먼트, 또는 명령어들의 부분을 나타낼 수도 있다.
일부 대안적인 구현들에서, 블록들에 언급된 동작들은 도면들에 언급된 순서를 벗어나 발생할 수도 있다. 예를 들어, 연속적으로 도시된 2개의 블록들은 실질적으로 동시에 실행될 수도 있거나, 또는 블록들은 때때로, 관련된 기능성에 따라, 역순으로 실행될 수도 있다. 다른 예들에서, 블록들은 일반적으로 증가하는 숫자 순서로 수행될 수도 있는 한편, 또 다른 예들에서는, 하나 이상의 블록들이 다양한 순서로 수행될 수도 있는데, 이때 그 결과들이, 바로 뒤따르지 않는 후속 또는 다른 블록들에 저장 및 활용된다. 블록도들 및/또는 흐름도 예시의 각각의 블록, 및 블록도들 및/또는 흐름도 예시에서의 블록들의 조합들은, 특정된 기능들 또는 작용들을 수행하거나 또는 특수 목적 하드웨어 및 컴퓨터 명령어들의 조합들을 수행하는 특수 목적 하드웨어 기반 시스템들에 의해 구현될 수도 있다는 것에 또한 주목할 것이다.
하기의 청구범위에서 발견될 수도 있는 모든 수단 또는 단계 플러스 기능 요소들의 대응하는 구조체들, 재료들, 작용들, 및 동등물들은, 구체적으로 청구되는 바와 같은 다른 청구된 요소들과 조합하여 기능을 수행하기 위한 임의의 구조체, 재료, 또는 작용을 포함하도록 의도된다.
하나 이상의 실시예들은 하드웨어 가속을 위한 스케줄러를 포함하는 집적 회로(IC)에 관한 것이다. 스케줄러는, IC의 컴퓨트 유닛들에 의한 실행을 위해 호스트 프로세서로부터 오프로딩되는 커맨드들을 저장하도록 구성되고 복수의 슬롯들을 갖는 커맨드 큐를 포함할 수도 있다. 스케줄러는, 커맨드 큐의 슬롯들에 대응하는 비트 위치들을 갖는 스테이터스 레지스터를 포함할 수도 있다. 스케줄러는, 커맨드 큐 및 스테이터스 레지스터에 커플링되는 제어기를 또한 포함할 수도 있다. 제어기는 IC의 컴퓨트 유닛들을 스케줄링하여 커맨드 큐의 슬롯들에 저장된 커맨드들을 실행하고 스테이터스 레지스터의 비트 위치들을 업데이트하여 커맨드 큐로부터의 어느 커맨드들이 실행이 종료되는지를 표시하도록 구성될 수도 있다.
일 양태에서, 스테이터스 레지스터는 판독되는 것에 응답하여 내부에 저장된 콘텐트들을 제거하도록 구성될 수도 있다.
다른 양태에서, 스케줄러는, 통신 링크를 통해 호스트 프로세서와 통신하고 커맨드 큐의 이용가능 슬롯들 내에 커맨드들을 저장하도록 구성되는 인터페이스를 포함할 수도 있다.
다른 양태에서, 커맨드 큐에 저장된 커맨드들은, 개개의 커맨드들을 실행하기 위해 컴퓨트 유닛들에 의해 사용되는 인수들을 포함할 수도 있다.
다른 양태에서, 각각의 커맨드는 컴퓨트 유닛들 중 어느 것이 커맨드를 실행하도록 허용되는지를 특정할 수도 있다.
다른 양태에서, 제어기는 컴퓨트 유닛들 중 어느 것이 유휴 상태이고 각각의 개개의 커맨드를 실행하도록 허용되는지에 기초하여 컴퓨트 유닛들에 커맨드들을 할당하도록 구성될 수도 있다.
다른 양태에서, 제어기는, 프로그램 코드를 실행하도록 구성되는 프로세서일 수도 있다. 프로세서는, IC의 프로그래밍가능 회로부를 사용하여 구현되는 소프트 프로세서일 수도 있다.
다른 양태에서, 제어기는 선택된 커맨드가 실행되는 것이 가능한 선택된 컴퓨트 유닛이 유휴 상태라는 것을 결정하고, 실행을 위해 선택된 커맨드의 인수들을 선택된 컴퓨트 유닛에 전송하고, 선택된 컴퓨트 유닛을 시작하도록 구성될 수도 있다.
다른 양태에서, 제어기는, 선택된 커맨드가 실행이 종료된다는 결정에 응답하여, 선택된 커맨드를 포함하는 슬롯에 대응하는 스테이터스 레지스터에서의 비트 위치에 기입하여, 슬롯이 비어 있음을 표시하도록 구성될 수도 있다.
하나 이상의 실시예들은 IC를 사용하여 하드웨어 가속을 위한 커맨드들을 스케줄링하는 방법에 관한 것이다. 이 방법은, IC 내의 커맨드 큐의 슬롯 내에, 호스트 프로세서로부터 수신된 커맨드를 저장하는 단계를 포함할 수도 있고, 여기서 커맨드는 IC의 컴퓨트 유닛에 의한 실행을 위해 호스트 프로세서로부터 오프로딩된다. 이 방법은, 제어기를 사용하여, 커맨드 큐의 슬롯에 저장된 커맨드를 실행하도록 컴퓨트 유닛을 스케줄링하는 단계를 포함할 수도 있다. 이 방법은, 커맨드가 실행이 종료된다는 결정에 응답하여, IC 내의 스테이터스 레지스터에 비트 위치를 기입하는 단계를 포함할 수도 있고, 여기서 비트 위치는, 커맨드를 저장하는 커맨드 큐의 슬롯에 대응한다.
일 양태에서, 이 방법은, 제어기 내에서, 커맨드 큐의 슬롯들에 저장된 커맨드들의 헤더들의 로컬로 캐싱된 카피들을 유지하는 단계, 및 헤더들의 로컬로 캐싱된 카피들의 값들을 업데이트함으로써 슬롯들의 스테이터스를 업데이트하는 단계를 포함할 수도 있다.
다른 양태에서, 이 방법은, 스테이터스 레지스터가 판독되는 것에 응답하여 스테이터스 레지스터에 저장된 콘텐트들을 제거하는 단계를 포함할 수도 있다.
다른 양태에서, 커맨드 큐에 저장된 커맨드들은, 커맨드를 실행하기 위해 컴퓨트 유닛들에 의해 사용되는 인수들을 포함할 수도 있다.
다른 양태에서, 이 방법은, 각각의 커맨드로부터, 컴퓨트 유닛들 중 어느 것이 커맨드를 실행하도록 허용되는지를 결정하는 단계를 포함할 수도 있다.
다른 양태에서, 이 방법은, 컴퓨트 유닛들 중 어느 것이 유휴 상태이고 각각의 개개의 커맨드를 실행하도록 허용되는지에 기초하여 컴퓨트 유닛들에 커맨드들을 할당하는 단계를 포함할 수도 있다.
다른 양태에서, 이 방법은, 선택된 커맨드가 실행되는 것이 가능한 선택된 컴퓨트 유닛이 유휴 상태라는 것을 결정하는 단계, 실행을 위해 선택된 커맨드의 인수들을 선택된 컴퓨트 유닛에 전송하는 단계, 및 선택된 컴퓨트 유닛을 시작하는 단계를 포함할 수도 있다.
다른 양태에서, 비트 위치의 기입은, 슬롯이 비어 있음을 표시할 수도 있다.
다른 양태에서, 이 방법은, 선택된 컴퓨트 유닛으로부터 인터럽트를 수신함으로써 선택된 컴퓨트 유닛이 선택된 커맨드의 실행이 종료된다는 것을 결정하는 단계를 포함할 수도 있다.
다른 양태에서, 이 방법은, 선택된 컴퓨트 유닛을 폴링함으로써 선택된 컴퓨트 유닛이 선택된 커맨드의 실행이 종료된다는 것을 결정하는 단계를 포함할 수도 있다.
본 명세서에서 제공되는 본 발명의 어레인지먼트들의 설명은 예시의 목적들을 위한 것이고, 개시된 형태 및 예들로 제한되거나 또는 포괄하는 것으로 의도되지 않는다. 본 명세서에서 사용되는 전문용어는 본 발명의 어레인지먼트들의 원리들, 시장에서 발견되는 기술들에 대한 실질적인 적용 또는 기술적 개선을 설명하거나, 그리고/또는 본 기술분야의 통상의 기술자가 본 명세서에 개시된 본 발명의 어레인지먼트들을 이해할 수 있게 하도록 선정되었다. 설명된 본 발명의 어레인지먼트들의 범주 및 사상으로부터 벗어남이 없이 수정들 및 변형들이 본 기술분야의 통상의 기술자에게 명백할 수도 있다. 이에 따라, 그러한 피처들 및 구현들의 범주를 표시하는 것으로서, 전술한 개시내용에 대한 것보다는 오히려, 다음의 청구범위에 대해 참조가 이루어져야 한다.

Claims (15)

  1. 하드웨어 가속을 위한 스케줄러를 포함하는 집적 회로로서,
    상기 스케줄러는:
    상기 집적 회로의 컴퓨트 유닛(compute unit)에 의한 실행을 위해 호스트 프로세서로부터 오프로딩되는(offloaded) 커맨드를 저장하도록 구성되고 복수의 슬롯을 갖는 커맨드 큐(command queue);
    상기 커맨드 큐의 슬롯에 대응하는 비트 위치를 갖는 스테이터스 레지스터(status register); 및
    상기 커맨드 큐 및 상기 스테이터스 레지스터에 커플링되는 제어기
    를 포함하고,
    상기 제어기는 상기 집적 회로의 컴퓨트 유닛을 스케줄링하여 상기 커맨드 큐의 슬롯에 저장된 커맨드를 실행하고 상기 스테이터스 레지스터의 비트 위치를 업데이트하여 상기 커맨드 큐로부터의 어느 커맨드가 실행이 종료되는지를 표시하도록 구성되는, 집적 회로.
  2. 제1항에 있어서,
    상기 스테이터스 레지스터는 판독되는 것에 응답하여 내부에 저장된 콘텐트를 제거(clear)하도록 구성되는, 집적 회로.
  3. 제1항 또는 제2항에 있어서,
    상기 커맨드 큐에 저장된 커맨드는, 개개의 커맨드를 실행하기 위해 상기 컴퓨트 유닛에 의해 사용되는 인수(argument)를 포함하는 것인, 집적 회로.
  4. 제1항 내지 제3항 중 어느 한 항에 있어서,
    각각의 커맨드는 상기 컴퓨트 유닛 중 어느 것이 상기 커맨드를 실행할 수 있는지를 특정하는, 집적 회로.
  5. 제1항 내지 제4항 중 어느 한 항에 있어서,
    상기 제어기는 상기 컴퓨트 유닛 중 어느 것이 각각의 개개의 커맨드를 실행할 수 있고 유휴 상태(idle)인지에 기초하여 상기 컴퓨트 유닛에 커맨드를 할당하도록 구성되는, 집적 회로.
  6. 제1항 내지 제5항 중 어느 한 항에 있어서,
    상기 제어기는, 프로그램 코드를 실행하도록 구성되는 프로세서인 것인, 집적 회로.
  7. 제1항 내지 제6항 중 어느 한 항에 있어서,
    상기 제어기는, 선택된 커맨드가 실행될 수 있는 선택된 컴퓨트 유닛이 유휴 상태라는 것을 결정하고, 실행을 위해 상기 선택된 커맨드의 인수를 상기 선택된 컴퓨트 유닛에 전송하고, 상기 선택된 컴퓨트 유닛을 시작하도록 구성되는 것인, 집적 회로.
  8. 제7항에 있어서,
    상기 제어기는, 상기 선택된 커맨드가 실행이 종료된다는 결정에 응답하여, 상기 선택된 커맨드를 포함하는 슬롯에 대응하는 상기 스테이터스 레지스터에서의 비트 위치에 기입하여, 상기 슬롯이 비어 있음을 표시하도록 구성되는 것인, 집적 회로.
  9. 집적 회로를 사용하여 하드웨어 가속을 위한 커맨드를 스케줄링하는 방법으로서,
    상기 집적 회로 내의 커맨드 큐의 슬롯 내에, 호스트 프로세서로부터 수신된 커맨드를 저장하는 단계 - 상기 커맨드는 상기 집적 회로의 컴퓨트 유닛에 의한 실행을 위해 상기 호스트 프로세서로부터 오프로딩됨 -;
    제어기를 사용하여, 상기 커맨드 큐의 슬롯에 저장된 커맨드를 실행하도록 상기 컴퓨트 유닛을 스케줄링하는 단계; 및
    상기 커맨드가 실행이 종료된다는 결정에 응답하여, 상기 집적 회로 내의 스테이터스 레지스터에 비트 위치를 기입하는 단계
    를 포함하고,
    상기 비트 위치는, 상기 커맨드를 저장하는 상기 커맨드 큐의 슬롯에 대응하는, 방법.
  10. 제9항에 있어서,
    상기 제어기 내에서, 상기 커맨드 큐의 슬롯에 저장된 커맨드의 헤더의 로컬로 캐싱된 카피들(locally cached copies)을 유지하는 단계; 및
    상기 헤더의 로컬로 캐싱된 카피들의 값을 업데이트함으로써 슬롯의 스테이터스를 업데이트하는 단계
    를 더 포함하는, 방법.
  11. 제9항 또는 제10항에 있어서,
    상기 스테이터스 레지스터가 판독되는 것에 응답하여 상기 스테이터스 레지스터에 저장된 콘텐트를 제거하는 단계를 더 포함하는, 방법.
  12. 제9항 내지 제11항 중 어느 한 항에 있어서,
    각각의 커맨드로부터, 상기 컴퓨트 유닛 중 어느 것이 상기 커맨드를 실행할 수 있는지를 결정하는 단계를 더 포함하는, 방법.
  13. 제9항 내지 제12항 중 어느 한 항에 있어서,
    상기 컴퓨트 유닛 중 어느 것이 각각의 개개의 커맨드를 실행할 수 있고 유휴 상태인지에 기초하여 상기 컴퓨트 유닛에 커맨드를 할당하는 단계를 더 포함하는, 방법.
  14. 제9항 내지 제13항 중 어느 한 항에 있어서,
    선택된 커맨드가 실행될 수 있는 선택된 컴퓨트 유닛이 유휴 상태라는 것을 결정하는 단계;
    실행을 위해 상기 선택된 커맨드의 인수를 상기 선택된 컴퓨트 유닛에 전송하는 단계; 및
    상기 선택된 컴퓨트 유닛을 시작하는 단계
    를 더 포함하고;
    상기 비트 위치의 기입은, 상기 슬롯이 비어 있음을 표시하는, 방법.
  15. 제14항에 있어서,
    상기 선택된 컴퓨트 유닛으로부터 인터럽트를 수신함으로써 또는 상기 선택된 컴퓨트 유닛을 폴링함으로써 상기 선택된 컴퓨트 유닛이 상기 선택된 커맨드의 실행이 종료된다는 것을 결정하는 단계를 더 포함하는, 방법.
KR1020207037180A 2018-05-24 2019-05-09 하드웨어 가속을 위한 하드웨어 리소스들의 임베디드 스케줄링 KR20210011451A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/988,900 US10877766B2 (en) 2018-05-24 2018-05-24 Embedded scheduling of hardware resources for hardware acceleration
US15/988,900 2018-05-24
PCT/US2019/031443 WO2019226355A1 (en) 2018-05-24 2019-05-09 Embedded scheduling of hardware resources for hardware acceleration

Publications (1)

Publication Number Publication Date
KR20210011451A true KR20210011451A (ko) 2021-02-01

Family

ID=66641498

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207037180A KR20210011451A (ko) 2018-05-24 2019-05-09 하드웨어 가속을 위한 하드웨어 리소스들의 임베디드 스케줄링

Country Status (6)

Country Link
US (1) US10877766B2 (ko)
EP (1) EP3803588A1 (ko)
JP (1) JP7313381B2 (ko)
KR (1) KR20210011451A (ko)
CN (1) CN112204524A (ko)
WO (1) WO2019226355A1 (ko)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10761992B2 (en) * 2018-10-31 2020-09-01 Advanced Micro Devices, Inc. Shared loads at compute units of a processor
US10705993B2 (en) 2018-11-19 2020-07-07 Xilinx, Inc. Programming and controlling compute units in an integrated circuit
KR20200072854A (ko) * 2018-12-13 2020-06-23 에스케이하이닉스 주식회사 데이터 처리 시스템 및 그것의 동작방법
US11443018B2 (en) * 2019-03-12 2022-09-13 Xilinx, Inc. Locking execution of cores to licensed programmable devices in a data center
US11294992B2 (en) * 2019-03-12 2022-04-05 Xilinx, Inc. Locking execution of cores to licensed programmable devices in a data center
US10996950B2 (en) * 2019-06-28 2021-05-04 Nxp B.V. Apparatuses and methods involving selective disablement of side effects caused by accessing register sets
US11010323B2 (en) 2019-06-28 2021-05-18 Nxp B.V. Apparatuses and methods involving disabling address pointers
US10999097B2 (en) 2019-06-28 2021-05-04 Nxp B.V. Apparatuses and methods involving first type of transaction registers mapped to second type of transaction addresses
US11500901B2 (en) 2019-06-28 2022-11-15 Nxp B.V. Apparatuses and methods involving synchronization using data in the data/address field of a communications protocol
US10985759B2 (en) 2019-06-28 2021-04-20 Nxp B.V. Apparatuses and methods involving a segmented source-series terminated line driver
KR20210080009A (ko) * 2019-12-20 2021-06-30 삼성전자주식회사 가속기, 가속기의 동작 방법 및 가속기를 포함한 디바이스
CN112783506B (zh) * 2021-01-29 2022-09-30 展讯通信(上海)有限公司 一种模型运行方法及相关装置
US11561733B2 (en) 2021-02-05 2023-01-24 Micron Technology, Inc. Interrupt mode or polling mode for memory devices
CN113032010B (zh) * 2021-03-12 2022-09-20 歌尔科技有限公司 命令的传输控制方法、终端及计算机可读存储介质
US11861010B2 (en) 2022-02-14 2024-01-02 Xilinx, Inc. Extensible device hosted root of trust architecture for integrated circuits
CN115168081B (zh) * 2022-09-08 2022-11-15 井芯微电子技术(天津)有限公司 转换电路和报文转换方法
CN115292053B (zh) * 2022-09-30 2023-01-06 苏州速显微电子科技有限公司 移动端cnn的cpu、gpu、npu统一调度方法

Family Cites Families (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4245306A (en) 1978-12-21 1981-01-13 Burroughs Corporation Selection of addressed processor in a multi-processor network
US6243736B1 (en) * 1998-12-17 2001-06-05 Agere Systems Guardian Corp. Context controller having status-based background functional task resource allocation capability and processor employing the same
US6360243B1 (en) * 1998-03-10 2002-03-19 Motorola, Inc. Method, device and article of manufacture for implementing a real-time task scheduling accelerator
US8913667B2 (en) * 1999-11-09 2014-12-16 Broadcom Corporation Video decoding system having a programmable variable-length decoder
US20100146256A1 (en) 2000-01-06 2010-06-10 Super Talent Electronics Inc. Mixed-Mode ROM/RAM Booting Using an Integrated Flash Controller with NAND-Flash, RAM, and SD Interfaces
JP2003526269A (ja) 2000-03-03 2003-09-02 テノー ネットワークス, インコーポレイテッド 内部プロセッサメモリ領域を用いる高速データ処理
US6477598B1 (en) 2000-07-20 2002-11-05 Lsi Logic Corporation Memory controller arbitrating RAS, CAS and bank precharge signals
US6829697B1 (en) * 2000-09-06 2004-12-07 International Business Machines Corporation Multiple logical interfaces to a shared coprocessor resource
WO2006031157A1 (en) 2004-09-16 2006-03-23 Telefonaktiebolaget Lm Ericsson (Publ) Routing based on transmission utilization
US7743176B1 (en) * 2005-03-10 2010-06-22 Xilinx, Inc. Method and apparatus for communication between a processor and hardware blocks in a programmable logic device
US7669037B1 (en) * 2005-03-10 2010-02-23 Xilinx, Inc. Method and apparatus for communication between a processor and hardware blocks in a programmable logic device
US7428603B2 (en) 2005-06-30 2008-09-23 Sigmatel, Inc. System and method for communicating with memory devices via plurality of state machines and a DMA controller
JP4936517B2 (ja) * 2006-06-06 2012-05-23 学校法人早稲田大学 ヘテロジニアス・マルチプロセッサシステムの制御方法及びマルチグレイン並列化コンパイラ
US7934113B2 (en) 2007-05-21 2011-04-26 Texas Instruments Incorporated Self-clearing asynchronous interrupt edge detect latching register
US8250578B2 (en) * 2008-02-22 2012-08-21 International Business Machines Corporation Pipelining hardware accelerators to computer systems
US7673087B1 (en) * 2008-03-27 2010-03-02 Xilinx, Inc. Arbitration for an embedded processor block core in an integrated circuit
US7737725B1 (en) * 2008-04-04 2010-06-15 Xilinx, Inc. Device control register for a processor block
US9547535B1 (en) 2009-04-30 2017-01-17 Nvidia Corporation Method and system for providing shared memory access to graphics processing unit processes
JP5521403B2 (ja) 2009-06-23 2014-06-11 ソニー株式会社 情報処理装置とリソース管理方法およびプログラム
US8056080B2 (en) * 2009-08-31 2011-11-08 International Business Machines Corporation Multi-core/thread work-group computation scheduler
US8423799B2 (en) * 2009-11-30 2013-04-16 International Business Machines Corporation Managing accelerators of a computing environment
DE102010028227A1 (de) * 2010-04-27 2011-10-27 Robert Bosch Gmbh Coprozessor mit Ablaufsteuerung
US8914805B2 (en) * 2010-08-31 2014-12-16 International Business Machines Corporation Rescheduling workload in a hybrid computing environment
US9405550B2 (en) 2011-03-31 2016-08-02 International Business Machines Corporation Methods for the transmission of accelerator commands and corresponding command structure to remote hardware accelerator engines over an interconnect link
CN102902581B (zh) * 2011-07-29 2016-05-11 国际商业机器公司 硬件加速器及方法、中央处理单元、计算设备
CN104205042B (zh) * 2012-03-30 2019-01-08 英特尔公司 用于具有通用cpu核心和紧密耦合的加速器的处理核心的上下文切换机制
US9582321B2 (en) * 2013-11-08 2017-02-28 Swarm64 As System and method of data processing
US10031773B2 (en) 2014-02-20 2018-07-24 Nxp Usa, Inc. Method to communicate task context information and device therefor
GB2525002B (en) * 2014-04-09 2021-06-09 Advanced Risc Mach Ltd Data processing systems
US9785473B2 (en) * 2014-07-14 2017-10-10 Nxp Usa, Inc. Configurable per-task state counters for processing cores in multi-tasking processing systems
US9022291B1 (en) 2014-07-24 2015-05-05 Apple Inc. Invisible optical label for transmitting information between computing devices
US9665509B2 (en) * 2014-08-20 2017-05-30 Xilinx, Inc. Mechanism for inter-processor interrupts in a heterogeneous multiprocessor system
KR102111229B1 (ko) * 2014-10-05 2020-05-14 아마존 테크놀로지스, 인크. 에뮬레이션된 엔드포인트 구성
EP3218827B1 (en) * 2014-11-12 2020-05-27 Xilinx, Inc. Heterogeneous multiprocessor program compilation targeting programmable integrated circuits
US9846660B2 (en) * 2014-11-12 2017-12-19 Xilinx, Inc. Heterogeneous multiprocessor platform targeting programmable integrated circuits
JP6897574B2 (ja) * 2016-01-29 2021-06-30 日本電気株式会社 アクセラレータ制御装置、アクセラレータ制御方法およびプログラム
WO2018125250A1 (en) * 2016-12-31 2018-07-05 Intel Corporation Systems, methods, and apparatuses for heterogeneous computing
US10235736B2 (en) 2017-04-21 2019-03-19 Intel Corporation Intelligent graphics dispatching mechanism

Also Published As

Publication number Publication date
CN112204524A (zh) 2021-01-08
WO2019226355A1 (en) 2019-11-28
EP3803588A1 (en) 2021-04-14
US20190361708A1 (en) 2019-11-28
JP7313381B2 (ja) 2023-07-24
US10877766B2 (en) 2020-12-29
JP2021525420A (ja) 2021-09-24

Similar Documents

Publication Publication Date Title
JP7313381B2 (ja) ハードウェアアクセラレーションのためのハードウェアリソースの埋込みスケジューリング
US20140040532A1 (en) Stacked memory device with helper processor
US10402223B1 (en) Scheduling hardware resources for offloading functions in a heterogeneous computing system
CN110678847A (zh) 用于gpu任务调度的连续分析任务
US10459773B2 (en) PLD management method and PLD management system
US10459771B2 (en) Lightweight thread synchronization using shared memory state
US10705993B2 (en) Programming and controlling compute units in an integrated circuit
EP3407184A2 (en) Near memory computing architecture
TW201303870A (zh) 利用快閃記憶體介面的方法及裝置
US20070130386A1 (en) DMA chain
US8862786B2 (en) Program execution with improved power efficiency
KR102205899B1 (ko) 메모리의 뱅크 충돌을 방지하기 위한 방법 및 장치
EP4035016A1 (en) Processor and interrupt controller therein
CN111095228A (zh) 具有一个存储器通道的第一启动
CN114328350A (zh) 一种基于axi总线的通讯方法、装置以及介质
US11163605B1 (en) Heterogeneous execution pipeline across different processor architectures and FPGA fabric
US11392406B1 (en) Alternative interrupt reporting channels for microcontroller access devices
KR20230091861A (ko) 하드웨어 가속을 위한 높은 처리량 회로 아키텍처
JP7470685B2 (ja) 集積回路中の算出ユニットをプログラムおよび制御すること
CN102929819A (zh) 用于处理计算机系统中的存储设备的中断请求的方法
JP2010146117A (ja) 情報処理装置、情報処理方法および情報処理プログラム
US11112999B2 (en) Optimizing I/O latency by software stack latency reduction in a cooperative thread processing model
CN117112136A (zh) 中断虚拟化的方法、装置、操作系统、设备及存储介质
US20180157540A1 (en) Control device and control method
KR20240017740A (ko) 소프트 플로트 함수 회로를 포함하는 시스템-온-칩

Legal Events

Date Code Title Description
A201 Request for examination
AMND Amendment
E701 Decision to grant or registration of patent right
AMND Amendment
X701 Decision to grant (after re-examination)