KR20180089273A - 비순차적 리소스 할당을 구현하는 방법 및 장치 - Google Patents

비순차적 리소스 할당을 구현하는 방법 및 장치 Download PDF

Info

Publication number
KR20180089273A
KR20180089273A KR1020170152500A KR20170152500A KR20180089273A KR 20180089273 A KR20180089273 A KR 20180089273A KR 1020170152500 A KR1020170152500 A KR 1020170152500A KR 20170152500 A KR20170152500 A KR 20170152500A KR 20180089273 A KR20180089273 A KR 20180089273A
Authority
KR
South Korea
Prior art keywords
resources
node
nodes
resource
allocation
Prior art date
Application number
KR1020170152500A
Other languages
English (en)
Other versions
KR102594657B1 (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 KR20180089273A publication Critical patent/KR20180089273A/ko
Application granted granted Critical
Publication of KR102594657B1 publication Critical patent/KR102594657B1/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/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5022Mechanisms to release resources
    • 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/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/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and 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/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/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • 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/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multi Processors (AREA)
  • Information Transfer Between Computers (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Advance Control (AREA)

Abstract

비순차적(out-of-order) 리소스 할당(resource allocation)을 구현하는 디바이스에 있어서, 복수의 하드웨어 리소스, 하나 이상의 작업을 수행하기 위해 하나 이상의 프로그램을 구현하는 하나 이상의 프로세서 및 복수의 하드웨어 리소스를 하드웨어 스레드 세트(a set of hardware threads)로 할당하는, 리소스 할당을 구현하는 리소스 할당자(resource allocator)를 포함할 수 있다. 리소스 할당자는, 복수의 노드들을 포함하는 연결 리스트(linked list)를 구현하는데, 상기 복수의 노드들 각각은 다음 노드(next node) 또는 이전 노드(previous node) 중 적어도 하나에 관한 정보를 포함하며, 제 1 순서로서, 복수의 하드웨어 리소스의 자유 리소스들의 하나 이상의 범위(one or more ranges of free resources)를, 복수의 노드들의 하나 이상의 노드에 할당하며, 제 1 순서와 구별되는 제 2 순서로서, 할당된 하나 이상의 노드를 비순차적으로 해제(release)하는 디바이스가 개시된다.

Description

비순차적 리소스 할당을 구현하는 방법 및 장치{METHOD AND APPARATUS FOR IMPLEMENTING OUT-OF-ORDER RESOURCE ALLOCATION}
본 개시는 비순차적 리소스 할당을 수행하는 방법 및 장치를 제공한다.
그래픽 처리 장치(GPU)는 컴퓨터 그래픽을 조작하고 범용 계산을 위해 컴퓨터 시스템에서 널리 사용된다. 이러한 컴퓨터 시스템 중 많은 수는, 레지스터 할당 설계의 영향을 받는 매우 제한된 하드웨어 리소스를 관리해야 한다. 이러한 시스템에서 링 할당자(ring allocator)와 같은 순차적 할당자(in-order allocator)는 단순성 때문에 리소스 할당에 사용되기도 한다. 일부 GPU는 그래픽 및 파이프라인을 계산하기 위해 여러 종류의 셰이더를 병렬로 구현한다. 또한 각 유형의 여러 다른 셰이더가 언제든지 활성화 될 수 있다. 이러한 조건에서, 순차적 할당자는 리소스를 할당하는 가장 효율적인 방법이 아닐 수 있다.
비순차적 리소스 할당을 구현하는 방법 및 장치를 제공하는 것이다. 본 실시예가 이루고자 하는 기술적 과제는 상기된 바와 같은 기술적 과제들로 한정되지 않으며, 이하의 실시예들로부터 또 다른 기술적 과제들이 유추될 수 있다.
상술한 기술적 과제를 달성하기 위한 기술적 수단으로서, 본 개시의 제1 측면은, 비순차적(out-of-order) 리소스 할당(resource allocation)을 구현하는 디바이스에 있어서, 복수의 하드웨어 리소스; 하나 이상의 작업을 수행하기 위해 하나 이상의 프로그램을 구현하는 하나 이상의 프로세서; 및 상기 복수의 하드웨어 리소스를 하드웨어 스레드 세트(a set of hardware threads)로 할당하는, 리소스 할당을 구현하는 리소스 할당자(resource allocator);를 포함하고, 상기 리소스 할당자는, 복수의 노드들을 포함하는 연결 리스트(linked list)를 구현하는데, 상기 복수의 노드들 각각은 다음 노드(next node) 또는 이전 노드(previous node) 중 적어도 하나에 관한 정보를 포함하며, 제 1 순서로서, 상기 복수의 하드웨어 리소스의 자유 리소스들의 하나 이상의 범위(one or more ranges of free resources)를, 상기 복수의 노드들의 하나 이상의 노드에 할당하며, 상기 제 1 순서와 구별되는 제 2 순서로서, 상기 할당된 하나 이상의 노드를 비순차적으로 해제(release)하는, 디바이스를 제공할 수 있다.
또한, 본 개시의 제 2 측면은, 비순차(out-of-order) 리소스 할당(resource allocation)을 구현하는 방법에 있어서, 복수의 노드들 각각은 다음 노드(next node) 또는 이전 노드(previous node) 중 적어도 하나에 관한 정보를 포함하며, 상기 복수의 노드들을 포함하는 연결 리스트(linked list)를 구현하는 단계; 제 1 순서로서, 상기 복수의 하드웨어 리소스의 자유 리소스들의 하나 이상의 범위(one or more ranges of free resources)를, 상기 복수의 노드들의 하나 이상의 노드에 할당하는 단계; 및 상기 제 1 순서와 구별되는 제 2 순서로서, 상기 할당된 하나 이상의 노드를 비순차적으로 해제(release)하는 단계;를 포함하는, 방법을 제공할 수 있다.
또한, 본 개시의 제 3 측면은, 제 2 측면의 방법을 컴퓨터에서 구현시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체를 제공할 수 있다.
도 1은 일 실시예에 따른 컴퓨팅 시스템의 예시를 설명하는 도면이다.
도 2 및 도 3은 일 실시예에 따른 컴퓨팅 시스템 내의 디바이스의 예시를 나타낸다.
도 4는 일 실시예에 따른 링 버퍼 할당의 예시를 설명하는 도면이다.
도 5는 일 실시예에 따른 이중-연결 큐(queue) 노드의 예시를 설명하는 도면이다.
도 6은 일 실시예에 따른 할당 테이블의 예시를 설명하는 도면이다.
도 7은 일 실시예에 따른 할당 프로세스의 예시를 설명하는 흐름도이다.
이하에서 논의되는 도 1 내지 도 7 및 본 개시에서 사용된 다양한 실시예는 단지 예시를 위한 것이며 본 발명의 범위를 제한하는 것으로 해석되어서는 안 된다. 통상의 기술자는 본 개시의 원리가 임의의 적절히 배열된 장치 또는 시스템에서 구현될 수 있다는 것을 이해할 것이다.
또한, 이하에서 사용되는 '시스템'이란 용어는 단일 디바이스, 복수의 디바이스, 또는 단일/복수의 디바이스 및 서버를 포함하는 것으로 해석될 수 있으나, 이에 제한되지 않는다.
GPU(Graphics Processing Units)의 핵심 해결과제 중 하나는 컴퓨터 아키텍처에서 ALU(Arithmetic Logic Unit)라고 불리는 GPU의 프로그래밍 가능 부품 (프로그래밍 가능 하드웨어)에 대한 리소스 할당에 관한 것이며, 이 하드웨어는 PE(Processing Elements)라고 지칭된다. PE는 메모리 로드/저장, if-then-else와 같은 조건문, goto와 같은 점프문 등의 기본적인 산술 연산 외에 많은 연산을 제공할 수 있다. 최신 API에 따라 병렬 계산을 가능하게 하기 위해, PE에는 다양한 처리량, 대기 시간(latency) 및 액세스 특성의 유한 스토리지(finite storage)가 포함될 수 있다. 유한 스토리지에는 가장 빠른 처리가 가능한 레지스터, 가장 느리게 처리되는 전역 메모리(global memory)/개인 메모리(private memory), 그리고 중간 속도로 처리되며 스레드에 거쳐 인터렉션이 가능한 공유/로컬 메모리가 포함될 수 있다.
마지막으로, PE는 장벽(barrier)과 펜스(fence)와 같은 동기화 기본 요소를 제공하여 최신의 병렬 프로그램을 지원할 수 있다. 이러한 모든 종류의 저장소 및 다른 프리미티브는 본질적으로 유한하며 하드웨어 스레드 세트 간에 확률적으로 분할되지 않기 때문에, 수요에 기초하여 저장소 및 다른 프리미티브의 최적의 사용을 가능하게 하기 위해 효율적으로 할당할 것이 요구된다.
이러한 리소스에는 다음이 포함되지만 이에 제한되지 않을 수 있다.
1) 단일 셰이더 코드를 구현하는 스레드 세트를 설명하는 개체(entity)인 워프(warps). PE는 다수의 워프를 병렬로 구현하거나, 알려지지 않았거나 임의의 세분성(granularity)에서 다수의 워프를 서로 스위치할 수 있다. 예를 들어, 몇 가지 규칙 집합에 기초하는 알려지지 않거나 임의의 수의 명령어 이후에 스위치할 수 있다.
2) 다양한 종류의 레지스터 - 워프에 의해 액세스되는 작업 세트 데이터를 저장하는데 이용되는 고속 메모리.
3) 일부 계산을 집합적으로 수행하기 위해, 워프 내 또는 워프에 걸친 스레드에 의해 이용되는 로컬 스크래치 공간(local scratch space)인, 공유/로컬 메모리. 다만, 공유/로컬 메모리는 전역 메모리로 에뮬레이트 될 수 있지만 OpenCL과 같은 일부 API는 공유/로컬 메모리가 필요할 수 있으므로, 일반적으로 전용 하드웨어로 구현될 수 있다.
4) 다른 유한 리소스는 GPU에 따라 다를 수 있다. 이러한 리소스의 공통된 특성은 다음과 같을 수 있다. 리소스는 제한적이긴 하나 그 수가 많을 수 있고, 리소스의 할당 세분성은 1보다 클 수 있으므로 리소스의 서브 세트가 하나의 요청으로 할당될 수 있다.
이러한 리소스 할당의 경우, 하드웨어에서 일반적으로 사용되는 접근법은 링 할당자(ring allocator)와 같은 간단한 순차적 할당자를 사용하는 것일 수 있다. 순차적 할당자를 사용하는 것은 구현 및 디버그가 간단하고 설계자가 직관적으로 알 수 있는 예측 가능성이 높은 행동을 하기 때문에 선호될 수 있다.
순차적 할당자는 작업의 성격과 수명이 다수의 워프에서 동일하거나 거의 동일할 때 잘 작동할 수 있다. 그러나 최신 GPU는 그래픽에 대해 병렬적인 다양한 종류의 셰이더를 구현하고, 파이프라인을 계산해야 할 수 있다. 또한, 각 유형의 다수의 상이한 셰이더가 언제든지 활성화되어, PE에서 활성화되는 다양한 종류의 워프를 생성할 수 있다. 순차적 할당자는 비효율적일 수 있다. 즉, 워프가 구현되어야 하지만 할당가능 영역 내 리소스가 존재하지 않아 구현되지 않을 수 있다.
링 할당자를 이용하여 할당 및 해제가 순차적으로 일어나는 것을 설명할 수 있는데, 임의의 리소스를 링으로 가정할 때, 링의 헤드에서 할당되고 링의 테일에서부터 해제될 수 있다. 예를 들어, 2개의 워프가 할당되면, 워프는 0과 1의 순서로 할당되고, 그 다음에 3번째 워프에 대한 요청이 할당될 수 있다.
사용 가능한 모든 PE 리소스가 워프 0 및 워프 1에 의해 소비될 때, 워프 1은 워프 0 이전에 완료되고, 워프 2에 대한 리소스 요구사항은 워프 0 및 워프 1 각각의 요구 사항의 서브 세트이고, 워프 1이 완료되고 워프 0이 동작 중일 때, 워프 1에 대한 리소스가 워프 0에 대한 리소스 이후에만 해제될 수 있기 때문에, 워프 2는 순차적 할당자에 의해 할당될 수 없다. 즉, 워프 1은 워프 0 이후에 할당되었으므로 워프 0이 먼저 해제되어야 하며, 워프 1은 워프 0 보다 앞서 해제될 수 없다.
이러한 시나리오는 향상된 성능을 위해 비순차적 할당이 이용될 수 있다. 워프 슬롯과 같은 리소스의 경우, 한 번에 하나의 리소스만을 할당하고 해제하면 될 수 있다. 리소스가 슬롯 자체이며, 레지스터 및 공유 메모리와 같은 연관 리소스가 아닐 수 있다. 비순차적 할당자를 만드는 것은 슬롯 당 유효 비트를 유지하는 것을 포함할 수 있는데, 워프가 할당되었으나 아직 완료되지 않은 경우 유효 비트는 1이고, 그렇지 않은 경우 유효 비트는 0으로 설정될 수 있다. 할당자는 유효 비트가 0인 임의의(일반적으로 첫 번째) 슬롯을 찾음으로써 동작하며, 해제 로직은 단순히 적절한 유효 비트를 0으로 설정하기 때문에 훨씬 간단할 수 있다.
레지스터 및 공유 메모리와 같은 리소스의 경우, 상황은 더욱 복잡할 수 있다. 예를 들어, PE를 구현하는데 있어, 하나의 워프에 레지스터와 공유 메모리의 연속적인 범위를 할당하는 것이 더 효율적일 수 있다. 즉, 주소를 재매핑하는 테이블을 사용하는 것과는 대조적으로, 주소를 지정하는 것이 간단한 (base + offset) 로 구현될 수 있으므로 더 효율적일 수 있다. 상술한 설계를 이용하여 리소스의 연속적인 범위를 할당하는 것은 복잡할 수 있다.
또한, 링 할당자와 같은 순차적 할당자는 또한 올바른 순서로 리소스를 해제해야 한다. 따라서 해제 요청은 서비스를 제공하기 전에 재정렬되어야 할 수 있다.
본 개시의 실시예는 전술한 문제점을 해결할 수 있다. 실시예는 다른 할당 시나리오를 서비스하도록 확장될 수 있다. 즉, 소정의 실시예는 비순차적 할당을 제공하여 단편화를 최소화하고 가능한 한 빨리 리소를 재사용하게 할 수 있다. 또한, 일 실시예는 재매핑 테이블을 사용하지 않을 수 있다.
도 1은 일 실시예에 따른 컴퓨팅 시스템의 예시를 설명하는 도면이다.
도 1에 대한 다양한 변경이 이루어질 수 있다. 예를 들어, 시스템(100)은 임의의 적절한 구성으로, 임의의 수의 각 구성 요소를 포함 할 수 있다. 일반적으로, 컴퓨팅 및 통신 시스템은 다양한 구성을 가지며, 도 1은이 개시의 범위를 임의의 특정 구성으로 제한하지 않는다. 도 1은 본 개시의 다양한 특징이 적용될 수 있는 하나의 동작 환경을 도시하지만, 이들 특징은 임의의 다른 적합한 시스템에서도 사용될 수 있다.
도 2 및 도 3은 일 실시예에 따른 컴퓨팅 시스템 내의 디바이스의 예시를 나타낸다.
도 2는 예시적인 서버(200)를 도시하고, 서버(200)는 도 1에 도시된 서버(104)일 수 있다.
도 2를 참조하면, 서버(200)는 버스(bus) 시스템(205)을 포함할 수 있다. 버스 시스템(205)은 적어도 하나의 프로세싱 디바이스(210), 적어도 하나의 저장 디바이스(215), 적어도 하나의 통신 유닛(220) 및 적어도 하나의 입/출력(I/O) 유닛(225)을 포함할 수 있다.
프로세싱 디바이스(210)는 메모리(230)에 로딩될 수 있는 명령들을 구현할 수 있다. 프로세싱 디바이스(210)는 임의의 적절한 수 및 유형의 프로세서 또는 임의의 적절하게 배열된 다른 디바이스를 포함할 수 있다. 프로세싱 디바이스(210)의 예시로서, 마이크로프로세서(microprocessors), 마이크로컨트롤러(microcontrollers), 디지털 신호 프로세서, FPGA(field programmable gate arrays), 주문형 집적 회로 및 분리 회로(discrete circuit)를 포함할 수 있다. 일 실시예에서, 프로세싱 디바이스(210)는 워프(warps)라고도 지칭되는 프로세싱 스레드를 구현하는 그래픽 처리 장치(GPU)로서 구성된 하나 이상의 프로세서를 포함할 수 있다.
메모리(230) 및 영구 저장 장치(235)는 정보(예를 들어, 데이터, 프로그램 코드 및/또는 일시적 또는 영구적 기반 다른 적절한 정보) 검색을 저장하고 용이하게 할 수 있는 임의의 구조(들)를 나타내는 저장 디바이스(215)의 예시일 수 있다. 메모리(230)는 랜덤 액세스 메모리 또는 임의의 다른 적절한 휘발성 또는 비휘발성 저장 디바이스를 나타낼 수 있다. 영구 저장 장치(235)는 ROM(read only memory), 하드 드라이브, 플래시 메모리 또는 광학 디스크와 같이 데이터의 장기 저장을 지원하는 하나 이상의 구성 요소 또는 디바이스를 포함 할 수 있다.
통신 유닛(220)은 다른 시스템 또는 장치와의 통신을 지원할 수 있다. 예를 들어, 통신 유닛(220)은 네트워크(102)를 통해 통신을 용이하게 하는, NIC(network interface card) 또는 무선 송수신기를 포함할 수 있다. 통신 유닛(220)은 임의의 적합한 물리적 또는 무선 통신 링크를 통한 통신을 지원할 수 있다.
I/O 유닛(225)은 데이터의 입출력을 가능하게 할 수 있다. 예를 들어, I/O 유닛(225)은 키보드, 마우스, 키패드, 터치 스크린, 또는 다른 적절한 입력 디바이스를 통하여 사용자 입력 수신하기 위한 연결을 제공할 수 있다. I/O 유닛(225)은 디스플레이, 프린터 또는 다른 적절한 출력 디바이스에 출력을 전송할 수 있다.
일 실시예에서, 서버(200)는 복수의 하드웨어 리소스(240)를 포함할 수 있다. 하드웨어 리소스(240)은 아래와 같은 계산 리소스를 포함할 수 있다.
1) 프로그램가능한 프로세서, 텍스쳐 유닛 또는 회로, 또는 프레임 버퍼.
2) 워프 - 단일 셰이더 코드를 구현하는 스레드 세트를 설명하는 개체(entity). PE는 다수의 워프를 병렬로 구현하거나, 알려지지 않았거나 임의의 세분성(granularity)에서 다수의 워프를 서로 스위치할 수 있다. 예를 들어, 몇 가지 규칙 집합에 기초하는 알려지지 않거나 임의의 수의 명령어 이후에 스위치할 수 있다.
3) 다양한 종류의 레지스터 - 워프에 의해 액세스되는 작업 세트 데이터를 저장하는데 이용되는 고속 메모리.
3) 공유/로컬 메모리 - 집합적으로 일부 계산을 수행하기 위해, 워프 내 또는 워프에 걸친 스레드에 의해 이용되는 로컬 스크래치 공간(local scratch space). 다만, 공유/로컬 메모리는 전역 메모리로 에뮬레이트 될 수 있지만 OpenCL과 같은 일부 API는 공유/로컬 메모리가 필요할 수 있으므로, 일반적으로 전용 하드웨어로 구현될 수 있다.
4) GPU에 따라 상이한 다른 유한 리소스.
이러한 리소스의 공통된 특성은 다음과 같을 수 있다.
1) 리소스는 제한적이긴 하나 그 수가 많을 수 있다.
2) 리소스의 할당 세분성(allocation granularity)은 1보다 클 수 있으므로 리소스의 서브 세트가 하나의 요청으로 할당될 수 있다.
일 실시예에서, 서버(200)는 리소스 할당자(245)를 포함할 수 있다. 리소스 할당자(245)는 하나 이상의 프로세스(예컨대, GPU 워프)에 복수의 리소스를 할당하도록 구성된 프로세싱 회로를 포함할 수 있다.
프로세싱 회로는 할당을 수행하는 하나 이상의 프로세서, 메모리(230)에 저장된 것과 같은 복수의 명령을 구현하는 하나 이상의 프로세서를 포함할 수 있다. 또한, 프로세싱 회로는, 다음 노드(next node) 또는 이전 노드(previous node) 중 적어도 하나에 관한 각각의 정보를 포함하는 복수의 노드들로 이루어진, 연결 리스트(linked list)를 구현하고, 제 1 순서로서, 복수의 하드웨어 리소스의 자유 리소스들의 하나 이상의 범위(ranges of free resources)를, 복수의 노드들의 하나 이상의 노드에 할당하며, 제 1 순서와 구별되는 제 2 순서로서, 할당된 하나 이상의 노드를 비순차적으로 해제(release)함으로써, 복수의 하드웨어 리소스의 리소스 할당을 수행하도록 하는 하나 이상의 프로세서를 포함할 수 있다.
도 2는 도 1의 서버(104)를 나타내는 것으로 설명되지만, 동일하거나 유사한 구조가 하나 이상의 클라이언트 디바이스(106, 108, 110, 112, 114)에서 사용될 수 있다. 예를 들어, 랩톱 또는 데스크탑 컴퓨터는 도 2에 도시된 것과 동일한 또는 유사한 구조를 가질 수 있다.
도 3은 일 실시예에 따른 예시적인 클라이언트 디바이스(300)를 도시한다.
클라이언트 디바이스(300)는 도 1에 도시된 하나 이상의 클라이언트 디바이스(106, 108, 110, 112, 114)일 수 있다.
도 3을 참조하면, 클라이언트 디바이스(300)는 안테나(305), 무선 주파수(RF) 송수신기(310), 송신(TX)처리 회로(315), 마이크로폰(320) 및 수신(RX) 처리 회로(325)를 포함할 수 있다. 또한, 클라이언트 디바이스(300)는 스피커(330), 메인 프로세서(340), I/O 인터페이스(interface, IF)(345), 키패드(350), 디스플레이(355) 및 메모리(360)을 포함할 수 있다.
메모리(360)는 기본 운영 시스템(operating system, OS) 프로그램(361) 및 하나 이상의 애플리케이션(362)을 포함할 수 있다. 한편, 도 3에 도시된 예가 안테나(305), 무선 주파수(RF) 송수신기(310), 송신(TX) 처리 회로(315), 마이크로폰(320) 및 수신(RX) 처리 회로(325)를 설명하지만, 일 실시예에서 클라이언트 디바이스(300)는 이들 요소 중 하나 이상을 포함하지 않을 수 있다.
RF 송수신기(310)는 안테나(305)로부터 시스템의 다른 구성 요소에 의해 송신된 입력 RF 신호를 수신할 수 있다. 송수신기(310)는 입력되는 RF 신호를 다운-컨버트(down-convert)하여 중간 주파수(intermediate frequency, IF) 또는 기저 대역 신호를 생성할 수 있다. IF 또는 기저 대역 신호는 RX 처리 회로(325)로 송신될 수 있고, RX 처리 회로(325)는 기저 대역 또는 IF 신호를 필터링, 디코딩 및/또는 디지털화함으로써 처리된 기저 대역 신호를 생성할 수 있다. RX 처리 회로(325)는 처리된 기저 대역 신호를 스피커(330)로 송신하거나 (음성 데이터 형태), 또는 추가 처리를 위해 프로세서(340)로 송신 (웹 브라우징 데이터 형태) 할 수 있다.
TX 처리 회로(315)는 마이크로폰(320), 또는 프로세서(340)로부터의 다른 출력된 기저 대역 데이터(예를 들어, 웹 데이터, 이메일 또는 쌍방형(interactive) 비디오 게임 데이터)로부터 아날로그 또는 디지털 음성 데이터를 수신할 수 있다. TX 처리 회로(315)는 처리된 기저 대역 또는 IF 신호를 생성하기 위해 출력된 기저 대역 데이터를 인코딩, 다중송신(multiplex) 및/또는 디지털화할 수 있다. 송수신기(310)는 TX 처리 회로(315)로부터 출력된, 처리된 기저 대역 또는 IF 신호를 수신하고, 안테나(305)를 통해 송신되는 RF 신호로 기저 대역 또는 IF 신호를 업-컨버트(up-convert)할 수 있다.
프로세서(340)는 클라이언트 디바이스(300)의 전반적인 동작을 제어하기 위해 하나 이상의 프로세서 또는 다른 프로세싱 디바이스를 포함할 수 있고, 메모리(360)에 저장된 OS(361)를 구현할 수 있다. 예를 들어, 프로세서(340)는 잘 알려진 원리들에 따라 송수신기(310), RX 처리 회로(325) 및 TX 처리 회로(315)를 이용함으로써, 순방향 채널 신호의 수신과 역방향 채널 신호의 송신을 제어할 수 있다. 일 실시예에서, 프로세서(340)는 적어도 하나의 마이크로프로세서 또는 마이크로 컨트롤러를 포함할 수 있다.
또한, 프로세서(340)는 메모리(360)에 상주하는 다른 프로세스들 및 프로그램들을 구현할 수 있다. 프로세서(340)는 구현 프로세스에 의해 요구되는 바에 따라, 데이터를 메모리(360)로 또는 메모리(360) 밖으로 이동시킬 수 있다. 일 실시예에서, 프로세서(340)는 OS(361)에 기초하여, 또는 외부 디바이스 또는 오퍼레이터(operator)로부터 수신된 신호에 응답하여, 애플리케이션(362)을 구현할 수 있다. 프로세서(340)는 또한, 클라이언트 디바이스(300)가 랩탑 컴퓨터 및 핸드헬드(handheld) 컴퓨터와 같은 다른 디바이스에 연결되는 능력을 제공하는 I/O 인터페이스(345)에 연결될 수 있다. I/O 인터페이스(345)는 부대용품들과 프로세서(340) 간의 통신 경로일 수 있다.
또한, 프로세서(340)는 키패드(350) 및 디스플레이(355)에 결합될 수 있다. 클라이언트 디바이스(300)의 오퍼레이터는 키패드(350)을 사용하여 클라이언트 디바이스(300)에 데이터를 입력(enter)할 수 있다. 디스플레이(355)는, 액정 디스플레이(liquid crystal display) 또는 웹 사이트로부터의 텍스트 및/또는 그래픽을 렌더링할 수 있는 다른 디스플레이를 포함할 수 있다.
메모리(360)는 프로세서(340)과 결합될 수 있다. 메모리(360)의 일부는 랜덤 액세스 메모리(random access memory, RAM)를 포함할 수 있고, 메모리(360)의 다른 부분은 플래시 메모리 또는 다른 판독 전용 메모리 (read-only memory, ROM)를 포함할 수 있다.
클라이언트 디바이스(300)는 하드웨어 리소스(365)를 포함할 수 있다. 하드웨어 리소스(365)는 하나 이상의 하드웨어 리소스(240)를 포함할 수 있다.
일 실시예에서, 클라이언트 디바이스(300)는 리소스 할당자(370)를 포함할 수 있다. 리소스 할당자(370)는 하나 이상의 프로세스(예컨대, GPU 워프)에 복수의 리소스를 할당하도록 구성된 프로세싱 회로를 포함할 수 있다.
프로세싱 회로는 할당을 수행하는 하나 이상의 프로세서, 메모리(230)에 저장된 것과 같은 복수의 명령을 구현하는 하나 이상의 프로세서를 포함할 수 있다. 또한, 프로세싱 회로는, 다음 노드(next node) 또는 이전 노드(previous node) 중 적어도 하나에 관한 각각의 정보를 포함하는 복수의 노드들로 이루어진, 연결 리스트(linked list)를 구현하고, 제 1 순서로서, 복수의 하드웨어 리소스의 자유 리소스들의 하나 이상의 범위(ranges of free resources)를, 복수의 노드들의 하나 이상의 노드에 할당하며, 제 1 순서와 구별되는 제 2 순서로서, 할당된 하나 이상의 노드를 비순차적으로 해제(release)함으로써, 복수의 하드웨어 리소스의 리소스 할당을 수행하도록 하는 하나 이상의 프로세서를 포함할 수 있다.
도 2 및 도 3은 컴퓨팅 시스템 내 디바이스의 예를 도시하지만, 도 2 및 도 3에 다양한 변경이 이루어질 수 있다. 예를 들어, 도 2 및 도 3의 다양한 구성 요소들은 서로 결합되거나, 더 세분화되거나 생략 될 수 있고, 특정 요구에 따라 추가될 수 있다.
일 실시예에서, 메인 프로세서(340)는 하나 이상의 중앙 처리 장치(CPU) 및 하나 이상의 그래픽 처리 장치(GPU)와 같은 다수의 프로세서로 분할될 수 있다. 일 실시예에서, 메인 프로세서(340)는 복수의 고정 기능 및 프로그래머블 하드웨어를 포함하는 GPU일 수 있다. 고정 기능 하드웨어의 예시로서, 이미지 데이터에 액세스하고 필요에 따라 보간하는(interpolating) 텍스처 유닛, 또는 기하 프리미티브의 픽셀 범위를 생성하는 래스터라이저(rasterizers)가 있을 수 있다.
프로그래머블 하드웨어에는 본 개시에서 PE라고 지칭되는 ALU(Arithmetic Logic Units)를 포함할 수 있다. 프로그래머블 구성요소는 GPU가 일반적인 목적으로 사용되는 것을 가능하게 하며, 셰이딩과 같은 많은 양의 대규모 작업에 효율적이지만, 고정 기능 유닛을 사용하면 GPU가 특정 연산에 사용되게 함으로써, 전용 하드웨어 구현에 도움을 줄 수 있다.
또한, 도 3은 휴대 전화 또는 스마트폰으로서 구성된 클라이언트 디바이스(300)를 도시하지만, 클라이언트 디바이스(300)는 다른 유형의 휴대전화 또는 고정형 디바이스로서 동작할 수 있다. 또한, 컴퓨팅 및 통신 네트워크와 마찬가지로, 클라이언트 디바이스 및 서버는 다양한 구성을 가질 수 있으며, 도 2 및 도 3은 임의의 특정 클라이언트 디바이스 또는 서버에 대해 본 개시를 한정하지 않는다.
리소스 할당자(245) 또는 리소스 할당자(370)와 같은 리소스 할당자는, 하나 이상의 프로세서 상의 리소스를 하나 이상의 하드웨어 스레드(예를 들어, GPU 워프와 같은, 하나 이상의 프로세서에 의해 구현되는 스레드 세트)에 할당하는 리소스 할당을 수행할 수 있다.
리소스 할당자는 하드웨어 구현과 함께 순차적 및 비순차적 모드로 동작할 수 있다. 리소스 할당자는 링 버퍼를 연결 목록으로 간주함으로써 일반화할 수 있다. 할당 헤드는 리소스 범위 내 포인트로서 수신된 임의의 할당 요청에 대한 시작 포인트를 나타내며, '유효' 범위의 끝을 표시할 수 있다. 해제 헤드(또는 테일)는 '유효' 범위의 시작을 표시할 수 있는데, 여기서 '유효'하다는 것은 해당 리소스가 사용 중임을 의미할 수 있다.
리소스 할당자는 링 버퍼 또는 연결 리스트를 구현할 수 있으며, 링 버퍼 또는 연결 리스트는 각 노드가 다음 할당 및 이전 할당에 관한 정보를 포함하는 이중-연결 리스트일 수 있다. 각 할당 노드는 연속적인 범위의 리소스를 포함할 수 있다. 리소스 할당자는 노드를 할당하고 할당된 노드를 해제하기 위해, 복수의 노드에 대한 다음 노드 및/또는 이전 노드를 지정하는, 연결 리스트의 정보를 이용할 수 있다.
리소스 할당자는 제 1 순서로 자유 리소스의 연속적인 범위에 노드를 할당하고, 제 1 순서와는 다른 제 2 순서로 노드를 비순차적으로 해제 할 수 있다. 예를 들어, 리소스는 링으로 정의될 수 있는데, 0~k (k는 일반적으로 2N-1) 의 인덱스가 이용될 수 있다. 링을 구현하는 것은 (k+1)이 인덱스 0으로 랩핑(wrap)된다는 것을 의미할 수 있다. 할당은 특정 워프/스레드에 대한 리소스 i~j의 할당일 수 있다. 이러한 할당은 리소스의 범위일 수 있다. 할당자의 각 노드는 하나의 리소스의 범위를 가리킬 수 있다.
할당 요청은 시간 경과에 따라 특정 순서로 수신될 수 있다. 가장 일반적인 할당 순서는 수신된 순서와 동일한 순서로 리소스를 할당하는 것일 수 있다. 이러한 할당 순서를 순차적 할당으로 지칭할 수 있다. 리소스가 할당된 워프가 완료되면 리소스도 해제될 수 있다. 순차적 해제에서는, 워프가 할당된 순서와 다른 순서와는 다른 순서로 완료되더라도, 할당과 동일한 순서로 연관 리소스가 해제된다는 것을 의미할 수 있다. 비순차적 해제는, 완료될 때 비순차적 워프 완료가 처리되는 것을 의미할 수 있다.
해제된 리소스는 즉시 해제 될 수도 있고 그렇지 않을 수도 있으며, 해제된 리소스는 다른 워프에 할당될 수 있다. 할당 헤드는 적법한(legal) 시작 포인트인 0~k의 리소스 범위 내 포인트일 수 있다. 각 할당 헤드에는 '크기', 즉 적법한 시작점에서 이용 가능한 수의 리소스 수가 포함될 수 있다.
init(즉, 구현의 시작)에서, M에서 시작하는 할당 헤드가 존재해야 하며, 여기서 M은 일반적으로 0일 수 있다. 순차적 할당자는 하나의 할당 헤드만을 유지하며, 시작 위치는 각 할당 시마다 증가할 수 있다. 범위의 끝에서, 할당 헤드에 의해 지시된 시작 위치는 0과 닿을 수 있다.
일 실시예에서, 비순차적 할당자는 하나 이상의 할당 헤드를 유지할 수 있다. 본 개시의 실시예는 단지 증가하는 것 이외의 방식으로 변동하기 위한 적법한 시작 위치를 허용할 수 있다. 또한, 유효 범위 내의 임의의 적법한 위치에 재할당이 가능할 수 있다.
도 4는 일 실시예에 따른 링 버퍼 할당의 예시를 설명하는 도면이다.
도 4에 도시된 링 버퍼(400)의 실시예는 단지 설명을 위한 것이며, 다른 실시예, 구성 또는 설명이 본 개시의 범위 내에서 적용될 수 있다.
단순한 링-버퍼는 주기적(cyclical) 단일-연결 리스트(singly-linked list)로 개념화 될 수 있다. 여기서 각 할당은 리스트의 노드일 수 있다. 일부 노드들은, (시작, 끝) 또는 (시작, 사이즈)의 범위 튜플(range tuple)과 같은 할당된 리소스 범위에 대응하는 할당일 수 있고, 다음 할당(노드)은 '다음' 포인터를 통해 알려질 수 있다. 자유 리소스 범위는, 할당이 시작되는 '헤드' 포인터(들)(head pointer(s))가 가리키는 연결 리스트 내 단일 노드(또는 다중 노드)일 수 있으며, 한편 해제가 시작되는 '테일' 포인터(들)(tail pointer(s))는 연결 리스트 내 단일 노드 이후의 노드를 가리킬 수 있고, 연결 리스트 내 단일 노드 이후의 노드는 가장 오래된 노드를 포함할 수 있다.
도 4를 참조하면, 링 버퍼(400)는 세 개의 할당(405, 410, 415)을 포함할 수 있다. 두 개의 노드는 할당된 리소스일 수 있다. 노드들은 할당된 노드(405) 및 노드(410)일 수 있고, 이어서 제 3 노드(415)일 수 있다. 노드(405)는 시작(420) 및 끝(425)을 포함할 수 있고, 시작(420) 및 끝(425) 사이에 복수의 연속적인 리소스가 포함될 수 있다. 또한, 노드(410)는 시작(430) 및 끝(435)을 포함할 수 있고, 시작(430) 및 끝(435) 사이에 복수의 연속 리소스가 포함될 수 있다. 또한, 노드(415)는 시작(440) 및 끝(445)을 포함할 수 있고, 시작(440) 및 끝(445) 사이에 복수의 연속 리소스가 포함될 수 있다.
각각의 노드는 연속적인 범위의 리소스를 포함할 수 있다. 예를 들어, 노드(405)는 리소스 i-j를 포함할 수 있고, 노드(410)는 리소스 k-m을 포함할 수 있고 노드(415)는 리소스 a-f를 포함 할 수 있다. 비록 각 노드가 연속적인 범위의 리소스를 포함하지만, 노드(405), 노드(410) 및 노드(415)에 걸친 리소스는 반드시 연속적일 필요는 없다. 예를 들어, j==k 및 m==a인 경우, 리소스가 연속적일 필요는 없을 수 있다.
본 개시의 실시예들은 기본 개념으로서 이중-연결 리스트(doubly-linked list)를 고려할 수 있다. 즉, 각각의 할당은 다음 및 이전 할당에 관한 정보를 포함할 수 있다. 리소스 할당자는 복수의 노드에 대한 다음 노드 및/또는 이전 노드를 지정하는 링크 리스트의 정보를 이용하여, 노드를 할당하거나 할당된 노드를 해제할 수 있다. 이는 하나 이상의 자유 리소스의 범위(노드)를 허용함으로써 달성될 수 있다. 따라서 자유 리소스의 범위가 인접한 경우, 즉, 다음 노드 또는 이전 노드인 경우, 리소스 할당자는 이러한 자유 리소스의 범위 중 하나로 리소스를 해제하려고 할 수 있다. 한편, 자유 리소스의 범위가 인접하지 않은 경우, 리소스 할당자는 리소스를 해제된 노드에 인접한 그 다음으로 가장 오래된 할당에 결합할 수 있다.
리소스 할당자는 임의의 자유 리소스 노드로부터 할당을 수행할 수 있다. 예를 들어, 노드(405)는 할당 헤드(420)를 갖는 초기 노드(노드-0)이며, 노드(410)는 노드(405)의 다음 노드다. 노드(410)(노드-1)를 볼 때, 노드(405)는 이전 노드고 노드(415)는 다음 노드다. 노드(415)(노드-2)를 볼 때, 노드(410)는 이전 노드이고 다음 할당은 비어있다. 도 4에 도시된 예에서, 노드(405)는 가장 오래된 할당일 수 있다.
노드(410)가 노드(405) 이전에 완료되고, 또 다른 워프(warp)에 대한 요청된 리소스 요구가 수신되면, 리소스 할당자는 노드(410)를 해제하고 할당 헤드(430)에 리소스를 할당할 수 있다. 즉, 리소스 할당자는 노드(410)에 대한 리소스를 다음 할당에 제공할 수 있다.
또한, 리소스 할당자는 리소스 및 우선 순위에 대한 요청, 즉 휴리스틱 또는 알고리즘에 기초하여 할당 헤드를 선택할 수 있다. 예를 들어, 우선 순위 결정 기능이 그리디 휴리스틱(greedy heuristic)을 포함할 때, 리소스 할당자는 연속적인 리소스의 최대 양을 갖는 할당 헤드를 선택할 수 있다. 또한, 우선 순위 결정 기능이 최상의 매칭 우선 순위를 포함할 때, 리소스 할당자는 할당할 리소스의 최소 양을 갖는 할당 헤드를 선택할 수 있다. 또한, 우선 순위 결정 기능이 차이(difference) 우선 순위를 포함할 때, 리소스 할당자는 요청된 리소스 양의 기설정된 차이(margin) 내에서, 연속적인 리소스의 이용가능한 범위를 갖는 할당 헤드를 선택할 수 있다.
한편, 메타데이터는, 셰이더(shader) 코드에 관한 정보, 셰이더 타입, 특정 코드/프로그램에 관한 정보, 셰이더 프로그램의 지속 기간을 예측하는 임의의 방법과 같은 구현 특성 등을 포함할 수 있다. 예를 들어, 특정 할당 헤드에서 특정 셰이더의 모든 워프를 할당하도록 선택할 수 있다.
어떤 실시예들에서, 리소스 할당자는 리소스를 노드(405)에, 그리고 이어서 노드(410)에, 그리고 노드(415)에 할당하는 것과 같이, 제 1 순서로 리소스를 할당할 수 있다. 그 후, 워프가 완료된 경우와 같은 해제 요청을 수신함에 따라, 리소스 할당자는 제 1 순서와 다른 제 2 순서로 리소스를 자유롭게 해제할 수 있다. 예를 들어, 리소스 할당자는 노드(405)로부터 리소스를 해제하기 전에 노드(410)로부터 해제할 수 있거나, 노드(410) 또는 노드(405)로부터 리소스를 해제하기 전에 노드(415)로부터 리소스를 해제할 수 있다.
일 실시예에서, 순차적 할당 동작은 자유 노드의 수를 1로 제한하고 새로운 자유 노드를 생성할 수 없게 함으로써 여전히 실시될 수 있다. 이러한 실시예에서, 리소스 할당자가 비순차적으로 리소스를 해제할 수 있으므로, 해제된 리소스가 노드에 인접한 다음으로 가장 오래된 할당에 간단히 추가됨으로써, 리소스 할당자는 해제 요청을 재정렬할 필요가 없다. 따라서, 해제가 비순차적으로 처리되더라도, 리소스 할당자는 리소스를 순차적으로 해제할 수 있다.
일 실시예에서, 단편화(fragmentation)를 방지하기 위해, 두 개의 인접한 자유 노드는, 이들 노드들로부터의 리소스가 해제될 때 결합될 수 있다. 자유 노드의 수가 정의된 최대 값 미만이면, 해제된 모든 노드를 새로운 자유 노드로 만들 수 있다.
일 실시예에서, 리소스 할당자는 모든 비활성 할당을 할당 헤드로서 할당할 수 있다. 일 실시예에서, 리소스 할당자는 이전 할당 노드, 다음 할당 노드, 더 적은 리소스를 갖는 할당 헤드, 비어있는 할당 노드 (즉, 리소스를 갖지 않는 할당 헤드), 또는 가장 오래된 인접 할당 중 어느 하나에 복수의 하드웨어 리소스를 재매핑(remapping)함으로써, 할당된 하나 이상의 노드를 비순차적으로 해제할 수 있다. 리소스가 해제될 때, 리소스 할당자는 해제된 리소스를 자유 리소스의 범위와 합칠 수 있다. 일 실시예에서, 리소스 할당자는 주어진 노드에 대한 다음 노드 또는 이전 노드를 지정하는 이중-연결 리스트에 관한 정보를 사용할 수 있다. 즉, 리소스 할당자는 노드를 할당하고 할당된 노드를 해제하기 위해, 복수의 노드들에 대한 다음 노드 및/또는 이전 노드를 지정하는 연결 리스트에 관한 정보를 사용할 수 있다.
도 5 및 도 6은 일 실시예에 따른, 노드 테이블을 갖는 할당자의 구조의 예시를 설명하는 도면이다.
노드가 저장 편의를 위해 인덱스를 가지고 있음에도 불구하고, 인덱스가 이중-연결 리스트의 순서에서 다음 노드 또는 이전 노드를 의미하지 않을 수 있다. 할당 과정 중에, 임의의 빈 노드를 선택하여 할당이 진행될 수 있으며, 위에서 설명한 동일한 유효 비트 접근법을 사용할 수 있다. 또한, 순차적인 링 버퍼에 구조를 매치시키기 위해, 헤드 포인터 및 테일 포인터가 포함될 수 있다.
도 5를 참조하면, 이중-연결 큐(Queue) 노드가 도시된다. 도 5에 도시된 이중-연결 큐 노드(500)는 단지 예시를 위한 것이다. 본 개시의 범위를 벗어나지 않고 다른 실시예들이 적용될 수 있다.
일 실시예에서, 연결 리스트 내 노드의 수는 고정될 수 있다. 예를 들어, 연결 목록에는 활성 할당의 최대 수와 할당 헤드의 최대 수가 포함될 수 있다. 즉, GPU의 예에서 프로그래밍 가능 하드웨어는 일반적으로, 프로그래밍 가능한 하드웨어에서 활성 셰이더 워프(또는 작업 그룹)의 수를 제한할 수 있으며, 이를 최대 활성 할당이라 할 수 있다. 리소스 할당자는 다수의 할당에 대한 함수로서, 할당 헤드의 수를 선택할 수 있다.
할당은, 할당되는 리소스의 범위를 유지하기 위해 비활성 노드를 선택하고, 할당 헤드에서 할당 요청을 서비스하기에 충분한 리소스를 포함하는 노드를 검색할 수 있다. 즉, 요청된 리소스의 크기는, 할당 헤드의 (시작, 끝) 튜플(505)이 가리키는 리소스의 범위보다 작을 수 있다. 할당할 할당 헤드의 선택은 그리디 접근법을 이용하여 수행될 수 있지만, 다른 실시예에서는 상이한 접근법을 사용할 수 있다.
또한, 리소스 할당자는 리소스 할당 해제 동작을 수행할 수 있다. 리소스 할당자는 리소스에 대한 요청을 수신하거나 또 다른 할당(예를 들어, GPU 워핑)이 완료되었음을 결정할 수 있다. 리소스 할당자는 자유 리소스 집합 범위의 길이를 최대화할 수 있다. 리소스 할당자는 할당된 몇몇 노드들(예를 들어, 워프들)에 대한 리소스를 해제할 수 있고, 가능한 최대 범위를 생성할 수 있다. 따라서 자유 리소스를 최단 시간 내에 다시 할당할 수 있다. 리소스 할당자(245) 또는 리소스 할당자(370)와 같은 리소스 할당자는, 리소스가 다시 사용될 수 없고 자유 리소스 범위의 길이를 최대화하는 시간을 줄이기 위해 다양한 휴리스틱스를 사용할 수 있다.
리소스 할당자는 노드-j(510)가 해제될 준비가 되었음을 결정할 수 있다. 예를 들어, 할당된 노드-j(510)에 대한 문자열 또는 프로세스가 완료될 수 있고, 따라서 노드-j(510)에 할당된 리소스가 해제될 수 있다. 리소스 할당자는 노드-j(510)에 대한 시작 및 끝을 결정할 수 있다. 또한, 리소스 할당자는 이전 노드인 노드-i(515) 및 다음 노드인 노드-k(520)를 식별할 수 있다. 일 실시예에서, 리소스 할당자는 다음 할당의 길이를 최대화하기 위해, 노드-j(510)로부터 더 큰 노드-i(515) 또는 노드-k(520)로 리소스를 할당할 수 있다. 일 실시예에서, 리소스 할당자는 노드-j(510)로부터의 리소스를, 노드-i(515) 또는 노드-k(520) 중에서 먼저 종료될 가능성이 높은 노드에 할당할 수 있다.
따라서, 리소스 할당자는 이중-연결 리스트 내 정보를 사용하여, 기존 할당 작업 도중에, 일정 시간 할당 및 해제를 가능하게 할 수 있다.
이전 할당 및 다음 할당의 정보를 이용함으로써, 리소스 할당자는 일정 시간 할당을 갖는 동안 리소스를 추적할 수 있고, 일정 시간 내에 기존의 할당에 대한 방해 없이 그리고 다수의 할당을 검색할 필요 없이 리소스 범위의 어드레스를 지정할 수 있다. 따라서, 일 실시예에서 리소스 할당자에 의한 할당은, 이전 할당 노드 및 다음 할당 노드의 정보에 관한 간단한 인덱스를 갖는 할당 노드들일 수 있다.
일 실시예에서, 리소스 할당자는 최근에 해제된 리소스를 또 다른 할당 헤드에 할당할 수 있다. 즉, 리소스 할당자는 최근에 해제된 리소스를 즉 개념적으로 '이전' 노드 또는 '다음' 노드에 해당하는, 인접한 할당 헤드에 할당할 수 있다. 다른 할당 헤드와 결합함으로써 리소스가 차단(block)되는 시간을 0으로 줄일 수 있다.
일 실시예에서, 다른 할당 헤드로의 할당을 최적화하기 위해서는, 할당 헤드는 비어있거나, 할당 노드 내 리소스 범위의 길이가 최근에 해제된 리소스의 길이보다 작아야 될 수 있다. 이와 같이, 리소스 할당자는 최근에 해제된 리소스를, 자유 리소스를 포함하지 않는 할당 헤드 또는 이 범위보다 짧은 리소스 범위로 할당할 수 있다.
일 실시예에서, 리소스 할당자는, 최근에 해제된 리소스를 자유 할당 헤드(할당되지 않은 헤드)에 대응하는 리소스와 결합함으로써, 그리고 할당 헤드의 수가 구현 지정된 최대값(implementation specified maximum) 보다 적을 때, 리소스의 범위를 증가시킬 수 있다. 일 실시예에서, 리소스 할당자는 최근에 해제된 리소스를 이 노드에 인접한 기존의 할당, 즉 이전 노드 또는 다음 노드에 할당할 수 있다. 일 실시예에서, 리소스 할당자는 최근에 해제된 리소스를, 일정 시간으로 제한되지 않는 실시예에서의 노드의 일부 재정렬(some reordering of nodes)과 결합된 임의의 노드에 할당할 수 있다.
따라서, 일 실시예에서, 리소스 할당자는 리소스를 노드-i(515)에, 이어서 노드-j(510)에, 이어서 노드-k(520)에 할당하는 것과 같이, 제 1 순서로 리소스를 할당할 수 있다. 워프가 완료될 때와 같은 해제 요청에 응답하여, 리소스 할당자는 노드-i(515)로부터 리소스를 해제하기 전에, 노드-j(510)로부터 리소스를 해제하는 것과 같이, 제 1 순서와 상이한 제 2 순서로 리소스를 자유롭게 해제할 수 있다. 또한, 노드-i(515) 또는 노드-j(510)로부터 리소스를 해제하기에 앞서, 노드-k(520)로부터 리소스를 해제할 수 있다.
리소스 할당자는 어느 쪽의 인접 노드도 할당 헤드가 아니라고 결정할 수 있다. 일 실시예에서, 리소스 할당자는 임의의 할당 헤드가 그 내부에 리소스가 없는지 여부를 결정한다. 리소스 할당자가 리소스가 없는 하나 이상의 할당 헤드를 식별하면, 리소스 할당자는 리소스가 없는 할당 헤드 중 하나에 최근에 해제된 리소스를 할당할 수 있다. 리소스 할당자가 리소스가 없는 임의의 할당 헤드를 식별하지 않는 경우, 리소스 할당자는 해제된 리소스를 그 다음으로 가장 오래된 인접 (예를 들어, 이전) 할당에 포함시킬 수 있다.
도 6은 일 실시예에 따른 할당 테이블의 예시를 설명한다.
도 6에 도시된 할당 테이블(600)의 실시예는 단지 설명을 위한 것이다. 본 개시의 범위를 벗어나지 않고 다른 실시예들이 적용될 수 있다.
도 6을 참조하면, 할당할 수 있는 헤드의 수, 즉 할당 헤드(605)는 고정될 수 있다. 리소스 할당자는 고정된 수의 노드, 최대 할당 수(워프) nwarps를 정의하는 수 및 할당 헤드라고 지칭되는 최대 수의 자유 노드를 이용할 수 있다. 노드 수는 고정되어 있으므로, 고정된 노드 수는 하드웨어에서 노드 인덱스로 인덱싱되어 메모리에 저장된 배열로서 인스턴스화될 수 있으므로 간단한 구현이 가능할 수 있다. 이 배열에서 첫 번째 nwarps 슬롯은 유효한 할당을 포함할 수 있고, 새로운 할당은 nwarps
Figure pat00001
nwarps + nAllocationHeads 노드로부터의 리소스만을 사용할 수 있다.
리소스 할당은 가능한 모든 활성/비활성 할당(610)을 이중-연결 리스트 내 노드(615)로 만들 수 있다. 이 예에서, 노드(615)는 하나 이상의 프로세서에 의해 구현될 스레드(예컨대, 워프)의 각 세트에 대응할 수 있다. 여기서, 할당은 어레이 시작에서의 노드이고, 각 노드(615)는 워프에 대응할 수 있다. 각 할당 스트링(string)의 헤드(620)는 이웃 노드를 지시하고, 테일(625)은 또 다른 이웃 노드를 지시할 수 있다.
활성 노드의 해제는 노드 인덱스를 수신함으로써 진행될 수 있으며, 테이블 내에서 관련 노드를 획득할 수 있다. 할당 헤드 노드에 우선권을 부여함으로써, 할당된 리소스는 다음 노드(520) 또는 이전 노드(515)에 할당될 수 있다. 두 노드가 모두 할당 헤드인 경우, 해제 이후 두 노드는 결합될 수 있다. 어느 노드도 할당 헤드가 아니면 두 가지 시나리오 중 하나가 발생할 수 있다.
할당 헤드 중 하나에 리소스가 없으면, 즉 할당 헤드가 '비어 있음'이면 할당 헤드가 리소스를 지시할 수 있으므로 새로운 할당 헤드가 생성될 수 있다. 이용 가능한 자유 할당 헤드가 존재하지 않는 경우, 리소스는 다음으로 가장 오래된 노드에 할당되는데, 유효한 경우 다음으로 가장 오래된 노드는 이전 노드(515)가 되고 그렇지 않으면 다음 노드(520)가 될 수 있다.
이 접근법은 노드가 나타내는 자유 범위의 줄어든 크기 내 할당 헤드를 정렬함으로써, 가능한 경우 지속적으로 홀들(holes)을 추적하고 홀들 내에서 할당하기 위해 LRU(Least Recently Used) 캐시를 사용할 수 있다. PE에서 활성화될 수 있는 워프 수가 제한되어 있으므로, 이 연결 리스트의 노드 수가 제한될 수 있다. 이 접근법에서는 (nwarps + nAllocationHeads) 슬롯을 사용할 수 있는데, 여기서 nAllocationHeads는 활성 할당 포인트들의 수를 의미할 수 있다.
도 7은 일 실시예에 따른 할당 프로세스의 예시를 설명하는 흐름도이다.
도 7에 도시된 프로세스는 컴퓨터 기반 디바이스의 프로세싱 회로를 처리함으로써 구현될 수 있다. 프로세스는 주어진 순서대로 수행될 필요가 없다. 예를 들어, 리소스의 해제는 하나 이상의 할당 이전, 이후 또는 동시에 발생할 수 있다.
할당 프로세스(700)에서, 리소스 할당자는 다음 할당 또는 이전 할당 중 적어도 하나와 관련된 정보를 포함하는 각 할당하는 이중-연결 리스트로서 연결 리스트를 구현할 수 있다. 리소스 할당자는 서로 다른 방법을 사용하여 워프 요청이 할당될 할당 헤드를 결정할 수 있다. 할당 헤드는 리소스의 최대 개수와 같은, 히프(heap) 속성에 따라 정렬될 수 있다. 예를 들어, 시스템은 3개의 할당 헤드, 즉 15개의 레지스터에 대응하는 제 1 할당 헤드, 8개의 레지스터에 대응하는 제 2 할당 헤드 및 4개의 레지스터에 대응하는 제 3 할당 헤드를 가질 수 있다.
단계 705에서, 리소스 할당자는 요청을 수신할 수 있다. 상기 요청은 블록(710)에서 워프 요청 또는 리소스를 해제하라는 요청일 수 있다. 도시된 예에서, 워프 요청은 7개의 레지스터에 대한 요청일 수 있다. 리소스 할당자는 동일하거나 상이한 크기의 다수의 워프 요청을 수신할 수 있다. 해제 요청은 워프 요청에 대한 임의의 이전 요청 중 하나일 수 있다.
단계 710에서, 요청이 리소스에 대한 요청인 경우, 리소스 할당자는 단계 715에서 할당할 헤드를 선택할 수 있다. 일 실시예에서, 리소스 할당자는 자유 리소스가 할당될 수 있는 노드의 최대 수에 기초하여 다수의 할당 헤드를 선택할 수 있다. 한편 할당 헤드는, 복수의 하드웨어 리소스의 자유 리소스의 연속적인 범위(contiguous ranges of free resources) 각각에 대응할 수 있다.
할당할 할당 헤드의 선택은 그리디(greedy) 접근법, 베스트 매치(best match) 접근법, 차별적(differential) 접근법, 또는 기타 적합한 방법을 이용하여 수행될 수 있다. 그리디 접근법에서, 리소스 할당자는 연속적인 리소스의 최대 양을 갖는 할당 헤드를 선택할 수 있다. 베스트 매치 우선순위 접근법에서, 리소스 할당자는 할당할 리소스의 최소 양을 갖는 할당 헤드를 선택할 수 있다. 차별적 접근법에서, 리소스 할당자는 요청된 리소스 양의 기설정된 차이(margin) 내에서, 연속적인 리소스의 이용 가능한 범위를 갖는 할당 헤드를 선택할 수 있다.
또한, 할당자는, 리소스에 대한 요청에 기초하여 하나 이상의 노드의 제 1 노드에 할당하기 위해, 자유 리소스의 하나 이상의 연속 범위로부터 제 1 범위를 선택할 수 있으며, 이는 리소스의 메타데이터 요청에 기초하는 것을 포함할 수 있다. 메타데이터는 상술한 바와 같이, 셰이더 타입, 특정 코드/프로그램에 대한 일부 정보, 셰이더 프로그램의 지속 기간을 예측하는 임의의 방법 등을 포함할 수 있다.
일 실시예에서, 리소스 할당자는 단계 715에서 어떤 헤드를 할당할 것인지를 선택하기 위해 그리디 접근법을 사용할 수 있다. 단계 720에서, 리소스 할당자는 대부분의 리소스를 갖는 헤드로부터 할당할 수 있다. 따라서, 리소스 할당자는 15개의 레지스터를 갖는 제 1 할당으로부터 할당할 수 있다. 리소스 할당자는 주기적 이중-연결 리스트를 유지하기 위해 일정 시간 노드 검사를 수행할 수 있다.
일 실시예에서, 단계 715에서, 리소스 할당자가 베스트 매치 접근법을 사용하여 할당할 헤드를 선택하는 경우, 리소스 할당자는 할당할 리소스가 충분하게 있는 할당 헤드를 선택할 수 있다. 따라서, 리소스 할당자는 단계 720에서, 8개의 레지스터를 갖는 제 2 할당을 할당할 수 있다. 베스트 매치 우선순위 기능은 리스트 할당자가 리소스의 가장 효율적인 할당을 생성할 수 있게 하고, 더 큰 워프 요청에 대비하여 15개의 레지스터를 사용할 수 있는 더 큰 제 1 할당을 남겨 둘 수 있게 한다. 베스트 매치 우선순위 기능은 스몰 단편화(small fragmentation)의 위험성이 높을 수 있다.
단계 720에서, 리소스 할당자는 제 1 순서로 자유 리소스의 연속 범위에 노드를 할당할 수 있다. 제 1 순서의 할당은 할당이 발생하는 시퀀스(sequence) 또는 순서를 정의할 수 있다. 예를 들어, 리소스 할당자는 제 1 워프(워프-0) 요청에 응답하여 노드-0에 할당 한 다음, 제 2 워프(워프-1) 요청에 응답하여 노드-1을 할당한 다음, 제 3워프(워프-2)에 응답하여 노드-2를 할당할 수 있다.
단계 710에서의 요청이 해제인 경우, 단계 725에서 리소스 할당자는 예를 들어 제 1 순서와 구별되는 제 2 순서로 노드를 해제할 수 있다. 비록 단계 720에서의 할당에 대한 논의가 단계 725에서의 해제에 대한 논의보다 우선하고, 단계 720 및 단계 725의 설명은 단계 720에서 단계 725로의 수치적 흐름으로 나타낼 수 있으나, 단계 725에서의 하나 이상의 해제 동작은, 단계 720에서의 하나 이상의 할당 이전에, 동시에, 또는 이후에 발생할 수 있다.
단계 725에서 리소스의 해제는, 할당이 발생한 순서, 즉 제 1 순서와 무관하게 발생할 수 있다. 예를 들어, 노드 0, 노드 1, 노드 2 등의 제 1 순서로 할당 한 후, 리소스 할당자는 노드-0에 앞서 노드-1을 해제하거나, 노드-0 또는 노드-1에 앞서 노드-2를 해제하는 제 2 순서로 해제할 수 있다.
단계 725에서 리소스의 해제는, 리소스를 해제하라는 요청, 워프의 완료 등과 같은, 단계 710에서의 해제에 대한 응답으로 발생할 수 있다. 따라서, 워프가 완료되면, 워프에 할당된 리소스가 해제될 수 있다. 예를 들어, 워프-1이 워프-0 이전에 완료되면 워프-1에 할당된 리소스가 워프-0에 할당된 리소스보다 먼저 해제될 수 있다.
또한, 워프-1에 대한 리소스의 해제 이전, 이후 또는 동시에, 리소스 할당자는 추가 워프 요청에 응답하여 단계 710에서 추가 리소스를 할당할 수 있다. 해제 시에, 리소스를 비어있는 할당 헤드로 재매핑하거나, 리소스가 적은 할당 헤드로 재매핑하거나, 가장 큰 할당으로 재매핑하거나, 가장 작은 할당으로 재매핑하거나, 가장 오래된 인접 할당(이전 또는 다음)으로 재매핑 할 수 있다. 일 실시예에서, 제 2 순서는 제 1 순서와 동일할 수 있다. 해제 순서는, 상이한 특정 하드웨어 요청에서 완료되는 워프에 대한 응답과 같이 할당자 제어 외부의 요인에 기초할 수 있다.
단계 725에서의 해제 시에, 리소스는 다른 할당 헤드에 할당될 수 있다. 일 실시예에서, 리소스 할당자는 해제된 할당의 리소스를 자유 리소스의 범위와 결합함으로써 할당된 노드를 해제할 수 있다. 또한, 일 실시예에서, 리소스 할당자는 모든 비활성 할당을 할당 헤드로 할당할 수 있다. 일 실시예에서, 리소스 할당자는 다수의 노드에 대해 다음 노드 또는 이전 노드를 지정하는 연결 리스트의 정보를 사용하여 노드를 할당하고 할당된 노드를 해제할 수 있다.
본 실시예들은 컴퓨터에 의해 구현되는 프로그램 모듈과 같은 컴퓨터에 의해 구현 가능한 명령어를 포함하는 기록 매체의 형태로도 구현될 수 있다. 컴퓨터 판독 가능 매체는 컴퓨터에 의해 액세스될 수 있는 임의의 가용 매체일 수 있고, 휘발성 및 비휘발성 매체, 분리형 및 비분리형 매체를 모두 포함한다. 또한, 컴퓨터 판독가능 매체는 컴퓨터 저장 매체 및 통신 매체를 모두 포함할 수 있다. 컴퓨터 저장 매체는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터와 같은 정보의 저장을 위한 임의의 방법 또는 기술로 구현된 휘발성 및 비휘발성, 분리형 및 비분리형 매체를 모두 포함한다. 통신 매체는 전형적으로 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈과 같은 변조된 데이터 신호의 기타 데이터, 또는 기타 전송 메커니즘을 포함하며, 임의의 정보 전달 매체를 포함한다.
또한, 본 명세서에서, "부"는 프로세서 또는 회로와 같은 하드웨어 구성(hardware component), 및/또는 프로세서와 같은 하드웨어 구성에 의해 구현되는 소프트웨어 구성(software component)일 수 있다.
전술한 본 명세서의 설명은 예시를 위한 것이며, 본 명세서의 내용이 속하는 기술분야의 통상의 지식을 가진 자는 본 발명의 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 쉽게 변형이 가능하다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다. 예를 들어, 단일형으로 설명되어 있는 각 구성 요소는 분산되어 실시될 수도 있으며, 마찬가지로 분산된 것으로 설명되어 있는 구성 요소들도 결합된 형태로 실시될 수 있다.
본 실시예의 범위는 상기 상세한 설명보다는 후술하는 특허청구범위에 의하여 나타내어지며, 특허청구범위의 의미 및 범위 그리고 그 균등 개념으로부터 도출되는 모든 변경 또는 변형된 형태가 포함되는 것으로 해석되어야 한다.

Claims (10)

  1. 비순차적(out-of-order) 리소스 할당(resource allocation)을 구현하는 디바이스에 있어서,
    복수의 하드웨어 리소스;
    하나 이상의 작업을 수행하기 위해 하나 이상의 프로그램을 구현하는 하나 이상의 프로세서; 및
    상기 복수의 하드웨어 리소스들을 하드웨어 스레드 세트(a set of hardware threads)로 할당하는, 리소스 할당을 구현하는 리소스 할당자(resource allocator);
    를 포함하고,
    상기 리소스 할당자는,
    복수의 노드들을 포함하는 연결 리스트(linked list)를 실행하고,
    제 1 순서로서, 상기 복수의 하드웨어 리소스들의 자유 리소스들의 하나 이상의 범위(one or more ranges of free resources)를, 상기 복수의 노드들의 하나 이상의 노드에 할당하고,
    상기 제 1 순서와 구별되는 제 2 순서로서, 상기 할당된 하나 이상의 노드를 비순차적으로 해제(release)하며,
    상기 복수의 노드들 각각은 다음 노드(next node) 또는 이전 노드(previous node) 중 적어도 하나에 관한 정보를 포함하는 것인, 디바이스.
  2. 제 1항에 있어서,
    상기 리소스 할당자는,
    자유 리소스가 할당될 수 있는 최대 노드 수에 기초하여 할당 헤드들(allocation heads)의 개수를 선택하며,
    상기 할당 헤드들은, 상기 복수의 하드웨어 리소스의 상기 자유 리소스들의 연속적인 범위(contiguous ranges of free resources) 각각에 대응하는, 디바이스.
  3. 제 1항에 있어서,
    상기 리소스 할당자는,
    리소스에 대한 요청에 기초하여 상기 자유 리소스들의 하나 이상의 연속적인 범위로부터 제 1 범위를 선택하여, 상기 제 1 범위를 상기 복수의 노드들 중 하나인 제 1 노드에 할당하는, 디바이스.
  4. 제 3항에 있어서,
    상기 리소스 할당자는,
    상기 리소스에 대한 요청의 메타데이터에 기초하여 상기 제 1 범위를 선택하거나,
    상기 요청된 리소스의 양에 가장 가까운 자유 리소스의 양을 갖는 범위를 상기 제 1 범위로 선택하거나,
    상기 요청된 리소스의 양과의 기설정된 차이(margin) 내의 자유 리소스의 양을 갖는 범위를 상기 제 1 범위로 선택하거나,
    가장 큰 자유 리소스의 양을 갖는 범위를 상기 제 1 범위로 선택하는 것인, 디바이스.
  5. 제 1항에 있어서,
    상기 리소스 할당자는, 이전 할당된 노드, 다음 할당된 노드, 또는 상기 이전 할당된 노드 및 상기 다음 할당된 노드보다 더 적은 리소스를 갖는 할당 헤드 중 어느 하나에 상기 복수의 하드웨어 리소스들을 재매핑(remapping)함으로써, 상기 할당된 하나 이상의 노드를 비순차적으로 해제하는, 디바이스.
  6. 제 1항에 있어서,
    상기 리소스 할당자는, 상기 해제된 할당 리소스를 자유 리소스들의 범위와 결합함으로써, 상기 할당된 하나 이상의 노드를 해제하는, 디바이스.
  7. 제 1항에 있어서,
    상기 제 1 순서로 할당하는 것은,
    상기 복수의 하드웨어 리소스의 자유 리소스들의 하나 이상의 연속적인 범위를, 상기 복수의 노드들의 하나 이상의 노드들에 할당하거나,
    상기 자유 리소스들의 하나 이상의 범위를, 상기 하나 이상의 프로세서에 의해 구현되는 하나 이상의 스레드 세트로 할당하는 것인, 디바이스.
  8. 비순차(out-of-order) 리소스 할당(resource allocation)을 구현하는 방법에 있어서,
    복수의 노드들 각각은 다음 노드(next node) 또는 이전 노드(previous node) 중 적어도 하나에 관한 정보를 포함하며, 상기 복수의 노드들을 포함하는 연결 리스트(linked list)를 실행하는 단계;
    제 1 순서로서, 상기 복수의 하드웨어 리소스의 자유 리소스들의 하나 이상의 범위(one or more ranges of free resources)를, 상기 복수의 노드들의 하나 이상의 노드에 할당하는 단계; 및
    상기 제 1 순서와 구별되는 제 2 순서로서, 상기 할당된 하나 이상의 노드를 비순차적으로 해제(release)하는 단계;
    를 포함하는, 방법.
  9. 제 8항에 있어서,
    상기 방법은,
    리소스에 대한 요청에 기초하여 상기 자유 리소스들의 하나 이상의 연속적인 범위로부터 제 1 범위를 선택하는 단계; 및
    상기 선택된 제 1 범위를 상기 복수의 노드들 중 하나인 제 1 노드에 할당하는 단계;
    를 더 포함하며,
    상기 제 1 범위를 선택하는 단계는,
    상기 리소스에 대한 요청의 메타데이터에 기초하여 선택하거나, 상기 요청된 리소스의 양에 가장 가까운 자유 리소스의 양을 갖는 범위를 선택하거나, 요청된 리소스의 양과의 기설정된 차이(margin) 내의 자유 리소스의 양을 갖는 범위를 선택하거나, 가장 큰 자유 리소스의 양을 갖는 범위를 상기 제 1 범위로 선택하는 것인, 방법.
  10. 제 8항의 방법을 컴퓨터에서 구현하기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체.
KR1020170152500A 2017-01-31 2017-11-15 비순차적 리소스 할당을 구현하는 방법 및 장치 KR102594657B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/421,279 2017-01-31
US15/421,279 US10489204B2 (en) 2017-01-31 2017-01-31 Flexible in-order and out-of-order resource allocation

Publications (2)

Publication Number Publication Date
KR20180089273A true KR20180089273A (ko) 2018-08-08
KR102594657B1 KR102594657B1 (ko) 2023-10-26

Family

ID=62980492

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170152500A KR102594657B1 (ko) 2017-01-31 2017-11-15 비순차적 리소스 할당을 구현하는 방법 및 장치

Country Status (2)

Country Link
US (1) US10489204B2 (ko)
KR (1) KR102594657B1 (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109697115B (zh) * 2017-10-20 2023-06-06 伊姆西Ip控股有限责任公司 用于调度应用的方法、装置以及计算机可读介质
CN109697121B (zh) * 2017-10-20 2023-05-05 伊姆西Ip控股有限责任公司 用于向应用分配处理资源的方法、设备和计算机可读介质
US10956413B2 (en) * 2018-10-31 2021-03-23 Salesforce.Com, Inc. Action set translation
CN110543362B (zh) * 2019-07-31 2022-10-21 北京奇艺世纪科技有限公司 一种图形处理器管理方法、装置及服务器
US20210103852A1 (en) * 2019-10-02 2021-04-08 Qualcomm Incorporated Resource based workload allocation for machine learning workloads

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8411584B1 (en) * 2008-03-31 2013-04-02 Olympus Corporation Wireless resource allocation system and method
JP2014006807A (ja) * 2012-06-26 2014-01-16 Fujitsu Ltd 演算処理装置、キャッシュメモリ制御装置及びキャッシュメモリの制御方法
US20150106805A1 (en) * 2013-10-15 2015-04-16 Cisco Technology, Inc. Accelerated instantiation of cloud resource

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7536462B2 (en) 2002-06-11 2009-05-19 Pandya Ashish A Memory system for a high performance IP processor
US7899855B2 (en) 2003-09-08 2011-03-01 Intel Corporation Method, apparatus and instructions for parallel data conversions
WO2005072307A2 (en) 2004-01-22 2005-08-11 University Of Washington Wavescalar architecture having a wave order memory
US8464265B2 (en) * 2006-04-03 2013-06-11 Secure64 Software Method and system for reallocating computational resources using resource reallocation enabling information
US7937561B2 (en) 2008-04-03 2011-05-03 Via Technologies, Inc. Merge microinstruction for minimizing source dependencies in out-of-order execution microprocessor with variable data size macroarchitecture
US9678775B1 (en) 2008-04-09 2017-06-13 Nvidia Corporation Allocating memory for local variables of a multi-threaded program for execution in a single-threaded environment
US8769539B2 (en) 2010-11-16 2014-07-01 Advanced Micro Devices, Inc. Scheduling scheme for load/store operations
WO2013095401A1 (en) 2011-12-20 2013-06-27 Intel Corporation System and method for out-of-order prefetch instructions in an in-order pipeline
US9268596B2 (en) 2012-02-02 2016-02-23 Intel Corparation Instruction and logic to test transactional execution status
US9348385B2 (en) 2012-07-09 2016-05-24 L. Pierre deRochement Hybrid computing module
US9304924B2 (en) 2012-08-17 2016-04-05 Futurewei Technologies, Inc. Cache coherent handshake protocol for in-order and out-of-order networks
US9274971B2 (en) 2012-11-27 2016-03-01 International Business Machines Corporation Low latency data exchange
KR102002510B1 (ko) 2013-04-16 2019-07-22 삼성전자 주식회사 디코딩 장치 및 디코딩 방법
US9348608B2 (en) * 2013-04-24 2016-05-24 QRC, Inc. System and method for registering application and application transforms on a radiofrequency digitization and collection device
CN104346283B (zh) * 2013-08-01 2018-09-28 腾讯科技(北京)有限公司 网络媒介信息存储量的询量分配方法和装置
US9292447B2 (en) 2014-02-20 2016-03-22 Freescale Semiconductor, Inc. Data cache prefetch controller
US9256497B2 (en) 2014-03-25 2016-02-09 Intel Corporation Checkpoints associated with an out of order architecture
US9612840B2 (en) 2014-03-28 2017-04-04 Intel Corporation Method and apparatus for implementing a dynamic out-of-order processor pipeline
US9870209B2 (en) 2014-03-28 2018-01-16 Intel Corporation Instruction and logic for reducing data cache evictions in an out-of-order processor
US10409763B2 (en) 2014-06-30 2019-09-10 Intel Corporation Apparatus and method for efficiently implementing a processor pipeline
US9760969B2 (en) 2015-03-09 2017-09-12 Mediatek Inc. Graphic processing system and method thereof
US10972371B2 (en) 2015-03-27 2021-04-06 Intel Corporation Technologies for GPU assisted network traffic monitoring and analysis
US10102046B2 (en) * 2016-03-24 2018-10-16 Oracle International Corporation In-memory data analytic system that provides an integrated tracking mechanism for explicit memory resources
US9876865B1 (en) * 2016-09-21 2018-01-23 Ciena Corporation Efficient prioritized restoration of services in a control plane-based optical network

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8411584B1 (en) * 2008-03-31 2013-04-02 Olympus Corporation Wireless resource allocation system and method
JP2014006807A (ja) * 2012-06-26 2014-01-16 Fujitsu Ltd 演算処理装置、キャッシュメモリ制御装置及びキャッシュメモリの制御方法
US20150106805A1 (en) * 2013-10-15 2015-04-16 Cisco Technology, Inc. Accelerated instantiation of cloud resource

Also Published As

Publication number Publication date
US20180217868A1 (en) 2018-08-02
CN108376102A (zh) 2018-08-07
KR102594657B1 (ko) 2023-10-26
US10489204B2 (en) 2019-11-26

Similar Documents

Publication Publication Date Title
KR102594657B1 (ko) 비순차적 리소스 할당을 구현하는 방법 및 장치
US10545762B2 (en) Independent mapping of threads
US9742869B2 (en) Approach to adaptive allocation of shared resources in computer systems
US20140331235A1 (en) Resource allocation apparatus and method
US20170371654A1 (en) System and method for using virtual vector register files
JP6262407B1 (ja) 共有キャッシュメモリシステムにおける共有キャッシュメモリ割振り制御の提供
US20110161965A1 (en) Job allocation method and apparatus for a multi-core processor
JP6262360B2 (ja) 計算機システム
US9454481B2 (en) Affinity group access to global data
US11940915B2 (en) Cache allocation method and device, storage medium, and electronic device
US10579416B2 (en) Thread interrupt offload re-prioritization
CN114595043A (zh) 一种io调度方法和装置
US9442759B2 (en) Concurrent execution of independent streams in multi-channel time slice groups
US8868876B2 (en) Dedicated large page memory pools
CN116400982B (zh) 配置中继寄存器模块的方法和装置、计算设备和可读介质
CN105988871B (zh) 一种远端内存分配方法、装置和系统
US9405470B2 (en) Data processing system and data processing method
US10824640B1 (en) Framework for scheduling concurrent replication cycles
US11119787B1 (en) Non-intrusive hardware profiling
US9176910B2 (en) Sending a next request to a resource before a completion interrupt for a previous request
CN108376102B (zh) 资源分配的系统、方法及非暂时性计算机可读媒体
US20100023723A1 (en) Paging Memory Contents Between A Plurality Of Compute Nodes In A Parallel Computer
CN109324982B (zh) 一种数据处理方法以及数据处理装置
US9251101B2 (en) Bitmap locking using a nodal lock
CN110096341B (zh) 执行资源的动态分区

Legal Events

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