KR20190028427A - 메모리 요청 중재 - Google Patents

메모리 요청 중재 Download PDF

Info

Publication number
KR20190028427A
KR20190028427A KR1020197000618A KR20197000618A KR20190028427A KR 20190028427 A KR20190028427 A KR 20190028427A KR 1020197000618 A KR1020197000618 A KR 1020197000618A KR 20197000618 A KR20197000618 A KR 20197000618A KR 20190028427 A KR20190028427 A KR 20190028427A
Authority
KR
South Korea
Prior art keywords
memory requests
memory
batch
group
threads
Prior art date
Application number
KR1020197000618A
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 KR20190028427A publication Critical patent/KR20190028427A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/161Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement
    • G06F13/1626Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement by reordering requests
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1652Handling requests for interconnection or transfer for access to memory bus based on arbitration in a multiprocessor architecture
    • G06F13/1663Access to shared memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • 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/466Transaction processing
    • G06F9/467Transactional memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Software Systems (AREA)
  • Multi Processors (AREA)
  • Memory System (AREA)
  • Hardware Redundancy (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

일 예에서, 메모리 요청들을 중재하기 위한 방법은 메모리 요청들의 제 1 배치가 스레드들의 제 1 그룹으로부터 기원함을 식별하는 제 1 메타데이터로 메모리 요청들의 제 1 배치를 태깅하는 단계를 포함할 수도 있다. 본 방법은 메모리 요청들의 제 2 배치가 스레드들의 제 1 그룹으로부터 기원함을 식별하는 제 2 메타데이터로 메모리 요청들의 제 2 배치를 태깅하는 단계를 포함할 수도 있다. 본 방법은 충돌 중재 큐에 메모리 요청들의 제 1 및 제 2 배치들을 저장하는 단계를 포함할 수도 있다. 본 방법은 제 1 메타데이터 및 제 2 메타데이터를 이용하여, 충돌 중재 큐에 저장된 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하는 단계를 포함할 수도 있고, 충돌 중재 큐는 충돌 중재 큐에 저장된 스레드들의 제 1 그룹과는 상이한 스레드들의 그룹으로부터 기원하는 저장된 메모리 요청들의 적어도 하나의 다른 배치를 포함할 수도 있다.

Description

메모리 요청 중재
본 개시는 메모리 요청들을 중재하는 것에 관한 것이다.
프로세싱 유닛들, 이를 테면, CPU들 및 GPU들이 병렬로 스레드들의 그룹을 프로세싱하도록 구성될 수도 있다. 스레드들의 각각의 그룹에서의 하나 이상의 스레드들은 프로세싱 유닛에 의한 실행시, 메모리 요청, 이를 테면, 판독 요청 또는 기록 요청을 생성할 수도 있다. 메모리 요청들은 메모리 요청들의 배치들로 그룹핑될 수도 있다.
일반적으로 본 개시는 메모리 요청들을 중재하기 위한 기술들을 설명한다.
일 예에서, 본 개시는 방법을 설명하며, 본 방법은, 프로세싱 유닛에 의해, 메모리 요청들의 배치들 (batches) 을 생성하는 단계로서, 메모리 요청들의 각각의 배치는 스레드들의 개별적인 그룹의 실행으로부터 각각 기원하는, 상기 메모리 요청들의 배치들을 생성하는 단계; 프로세싱 유닛에 의해, 메모리 요청들의 배치들 중 메모리 요청들의 제 1 배치를 제 1 메타데이터로 태깅하는 단계로서, 제 1 메타데이터는 메모리 요청들의 제 1 배치가 기원하는 스레드들의 그룹을 식별하는 데이터를 포함하고, 메모리 요청들의 제 1 배치가 기원하는 스레드들의 그룹은 스레드들의 제 1 그룹인, 상기 제 1 메타데이터로 태깅하는 단계; 프로세싱 유닛에 의해, 메모리 요청들의 배치들 중 메모리 요청들의 제 2 배치를 제 2 메타데이터로 태깅하는 단계로서, 제 2 메타데이터는 메모리 요청들의 제 2 배치가 기원하는 스레드들의 그룹을 식별하는 데이터를 포함하고, 메모리 요청들의 제 2 배치가 기원하는 스레드들의 그룹은 스레드들의 제 1 그룹인, 상기 제 2 메타데이터로 태깅하는 단계; 메모리 요청들의 제 1 배치의 임의의 메모리 요청을 제 1 메모리 또는 메모리 제어기로 전송하기 전에, 메모리 요청들의 제 1 배치 및 제 1 메타데이터를 충돌 중재 큐에 저장하는 단계; 메모리 요청들의 제 2 배치의 임의의 메모리 요청을 제 1 메모리 또는 메모리 제어기로 전송하기 전에, 메모리 요청들의 제 2 배치 및 제 2 메타데이터를 충돌 중재 큐에 저장하는 단계; 및 제 1 메타데이터 및 제 2 메타데이터를 이용하여, 충돌 중재 큐에 저장된 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하는 단계로서, 충돌 중재 큐에 저장된 메모리 요청들의 적어도 하나의 다른 배치는 스레드들의 제 1 그룹과는 상이한 스레드들의 적어도 하나의 그룹으로부터 기원하는, 상기 충돌 중재를 수행하는 단계를 포함한다.
다른 예에서, 본 개시는 일 디바이스를 설명하며, 본 디바이스는, 제 1 메모리; 상기 제 1 메모리에 통신가능하게 커플링된 메모리 제어기; 및 제 1 메모리 또는 메모리 제어기 중 적어도 하나에 통신가능하게 커플링된 프로세싱 유닛을 포함하고, 프로세싱 유닛은: 메모리 요청들의 배치들을 생성하는 것으로서, 메모리 요청들의 각각의 배치는 스레드들의 개별적인 그룹의 실행으로부터 각각 기원하는, 상기 메모리 요청들의 배치들을 생성하고; 메모리 요청들의 배치들 중 메모리 요청들의 제 1 배치를 제 1 메타데이터로 태깅하는 것으로서, 제 1 메타데이터는 메모리 요청들의 제 1 배치가 기원하는 스레드들의 그룹을 식별하는 데이터를 포함하고, 메모리 요청들의 제 1 배치가 기원하는 스레드들의 그룹은 스레드들의 제 1 그룹인, 상기 제 1 메타데이터로 태깅하고; 메모리 요청들의 배치들 중 메모리 요청들의 제 2 배치를 제 2 메타데이터로 태깅하는 것으로서, 제 2 메타데이터는 메모리 요청들의 제 2 배치가 기원하는 스레드들의 그룹을 식별하는 데이터를 포함하고, 메모리 요청들의 제 2 배치가 기원하는 스레드들의 그룹은 스레드들의 제 1 그룹인, 상기 제 2 메타데이터로 태깅하고; 메모리 요청들의 제 1 배치의 임의의 메모리 요청을 제 1 메모리 또는 메모리 제어기로 전송하기 전에, 메모리 요청들의 제 1 배치 및 제 1 메타데이터를 충돌 중재 큐에 저장하고; 메모리 요청들의 제 2 배치의 임의의 메모리 요청을 제 1 메모리 또는 메모리 제어기로 전송하기 전에, 메모리 요청들의 제 2 배치 및 제 2 메타데이터를 충돌 중재 큐에 저장하고; 그리고 제 1 메타데이터 및 제 2 메타데이터를 이용하여, 충돌 중재 큐에 저장된 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하는 것으로서, 충돌 중재 큐에 저장된 메모리 요청들의 적어도 하나의 다른 배치는 스레드들의 제 1 그룹과는 상이한 스레드들의 적어도 하나의 그룹으로부터 기원하는, 상기 충돌 중재를 수행하도록 구성된다.
다른 예에서, 본 개시는 일 장치를 설명하고, 본 장치는, 메모리 요청들의 배치들을 생성하기 위한 수단으로서, 메모리 요청들의 각각의 배치는 스레드들의 개별적인 그룹의 실행으로부터 각각 기원하는, 상기 메모리 요청들의 배치들을 생성하기 위한 수단; 메모리 요청들의 배치들 중 메모리 요청들의 제 1 배치를 제 1 메타데이터로 태깅하기 위한 수단으로서, 제 1 메타데이터는 메모리 요청들의 제 1 배치가 기원하는 스레드들의 그룹을 식별하는 데이터를 포함하고, 메모리 요청들의 제 1 배치가 기원하는 스레드들의 그룹은 스레드들의 제 1 그룹인, 상기 제 1 메타데이터로 태깅하기 위한 수단; 메모리 요청들의 배치들 중 메모리 요청들의 제 2 배치를 제 2 메타데이터로 태깅하기 위한 수단으로서, 제 2 메타데이터는 메모리 요청들의 제 2 배치가 기원하는 스레드들의 그룹을 식별하는 데이터를 포함하고, 메모리 요청들의 제 2 배치가 기원하는 스레드들의 그룹은 스레드들의 제 1 그룹인, 상기 제 2 메타데이터로 태깅하기 위한 수단; 메모리 요청들의 제 1 배치의 임의의 메모리 요청을 제 1 메모리 또는 메모리 제어기로 전송하기 전에, 메모리 요청들의 제 1 배치 및 제 1 메타데이터를 충돌 중재 큐에 저장하기 위한 수단; 메모리 요청들의 제 2 배치의 임의의 메모리 요청을 제 1 메모리 또는 메모리 제어기로 전송하기 전에, 메모리 요청들의 제 2 배치 및 제 2 메타데이터를 충돌 중재 큐에 저장하기 위한 수단; 및 제 1 메타데이터 및 제 2 메타데이터를 이용하여, 충돌 중재 큐에 저장된 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하기 위한 수단으로서, 충돌 중재 큐에 저장된 메모리 요청들의 적어도 하나의 다른 배치는 스레드들의 제 1 그룹과는 상이한 스레드들의 적어도 하나의 그룹으로부터 기원하는, 상기 충돌 중재를 수행하기 위한 수단을 포함한다.
다른 예에서, 본 개시는 명령들이 저장된 비일시적 컴퓨터 판독가능 저장 매체를 설명하며, 명령들은 실행될 때 하나 이상의 프로세싱 유닛들로 하여금, 메모리 요청들의 배치들을 생성하게 하는 것으로서, 메모리 요청들의 각각의 배치는 스레드들의 개별적인 그룹의 실행으로부터 각각 기원하는, 상기 메모리 요청들의 배치들을 생성하게 하고; 메모리 요청들의 배치들 중 메모리 요청들의 제 1 배치를 제 1 메타데이터로 태깅하게 하는 것으로서, 제 1 메타데이터는 메모리 요청들의 제 1 배치가 기원하는 스레드들의 그룹을 식별하는 데이터를 포함하고, 메모리 요청들의 제 1 배치가 기원하는 스레드들의 그룹은 스레드들의 제 1 그룹인, 상기 제 1 메타데이터로 태깅하게 하고; 메모리 요청들의 배치들 중 메모리 요청들의 제 2 배치를 제 2 메타데이터로 태깅하게 하는 것으로서, 제 2 메타데이터는 메모리 요청들의 제 2 배치가 기원하는 스레드들의 그룹을 식별하는 데이터를 포함하고, 메모리 요청들의 제 2 배치가 기원하는 스레드들의 그룹은 스레드들의 제 1 그룹인, 상기 제 2 메타데이터로 태깅하게 하고; 메모리 요청들의 제 1 배치의 임의의 메모리 요청을 제 1 메모리 또는 메모리 제어기로 전송하기 전에, 메모리 요청들의 제 1 배치 및 제 1 메타데이터를 충돌 중재 큐에 저장하게 하고; 메모리 요청들의 제 2 배치의 임의의 메모리 요청을 제 1 메모리 또는 메모리 제어기로 전송하기 전에, 메모리 요청들의 제 2 배치 및 제 2 메타데이터를 충돌 중재 큐에 저장하게 하고; 그리고 제 1 메타데이터 및 제 2 메타데이터를 이용하여, 충돌 중재 큐에 저장된 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하게 하는 것으로서, 충돌 중재 큐에 저장된 메모리 요청들의 적어도 하나의 다른 배치는 스레드들의 제 1 그룹과는 상이한 스레드들의 적어도 하나의 그룹으로부터 기원하는, 상기 충돌 중재를 수행하게 한다.
본 개시의 하나 이상의 예들의 세부 사항들은 첨부된 도면과 하기의 설명으로부터 설명된다. 다른 특징들, 목적들 및 이점들은 하기의 설명 및 도면들, 및 하기의 특허청구범위로부터 명확해질 것이다.
도 1 은 본 개시의 기술들을 구현하도록 구성될 수도 있는 컴퓨팅 디바이스를 예시하는 블록도이다.
도 2 는 본 개시의 기술들을 구현하도록 구성될 수도 있는 도 1 에 도시된 하나 이상의 프로세싱 유닛들을 보다 자세하게 예시한다.
도 3 은 메모리 요청들의 배치의 일 예를 예시한다.
도 4 는 메모리 요청들의 배치를 메타데이터로 태깅하는 일 예를 예시한다.
도 5 는 메모리 요청들의 배치를 메타데이터로 태깅하는 일 예를 예시한다.
도 6 은 메모리 요청들의 배치의 각각의 메모리 요청을 메타데이터로 태깅하는 일 예를 예시한다.
도 7 은 충돌 중재 큐의 일 예를 예시한다.
도 8 은 충돌 중재 큐의 일 예를 예시한다.
도 9 는 충돌 중재를 수행하는 일 예를 예시한다.
도 10 은 충돌 중재를 수행하는 일 예를 예시한다.
도 11a 내지 도 11e 는 충돌 중재를 수행하는 일 예를 예시한다.
도 12 는 본 개시의 하나 이상의 기술들에 따른 예시적 방법을 예시한다.
일반적으로, 본 개시는 메모리 요청들을 중재하는 하나 이상의 기술들을 설명한다. 본원에 설명된 하나 이상의 기술들은 충돌이 (예를 들어, 실제적으로 또는 잠재적으로) 존재할 때 메모리 요청을 재정렬하는 것을 억제할 수도 있고, 이와 같이, 메모리 요청 재정렬을 수행하기 위해 안전한 것 (예를 들어, 충돌이 없음) 을 보장할 수도 있다. 충돌이 없다는 것에 대한 의미는 절대적으로 충돌이 없음을 의미하는 것이 아닐 수도 있음이 이해된다. 다만, 충돌이 없다는 것은, 본원에 설명된 메모리 요청들을 중재하기 위한 기술들을 수행하도록 구성되는 프로세싱 유닛에 의해 해결되어야 하는 충돌이 없음을 의미할 수도 있다. 예를 들어, 본원에 설명된 메모리 요청들을 중재하기 위한 기술들을 수행하는 프로세싱 유닛은, 프로세싱 체인에 있어서 2 개의 배치들 사이에 알려진 충돌이 메모리 서브시스템 (예를 들어, 메모리 제어기) 에 의해 해결될 수도 있기 때문에, 메모리 요청들의 배치들 사이에 충돌이 없다고 결정할 수도 있다. 본원에 설명된 하나 이상의 기술들은 메모리 요청 실행 병행성 (parallelism) 및 메모리 레이턴시 은닉을 증가시켜, 이에 의해 성능 상승을 제공할 수도 있다. 예를 들어, 본원에 설명된 하나 이상의 기술들은 API들 (예를 들어, GPU API들) 에 따른 인터-그룹 (예를 들어, 인터-웨이브) 및 인터-스레드 종속성들의 부재를 활용하는 것에 의해 더 많은 메모리 요청들이 메모리 또는 메모리 제어기로 운행 중인 (in flight) 것을 가능하게 한다. 본원에 이용된 바와 같이, "운행 중인" 메모리 요청들은 일부 예들에서, 메모리 및/또는 메모리 제어기로 현재 수송중인 메모리 요청들, 메모리 및/또는 메모리 제어기에 의해 수신된 메모리 요청들, 메모리 및/또는 메모리 제어기에 의해 서브되고 있는 메모리 요청들, 메모리 및/또는 메모리 제어기에 의한 서브를 위해 큐잉되는 메모리 요청들 또는 이들의 임의의 조합을 지칭할 수도 있다.
본원에 설명된 하나 이상의 기술들은 해저드 체킹 윈도우에서 모든 메모리 요청들에 걸쳐 충돌들에 대해 체크할 필요를 제거하는 것에 의해 메모리에 대응하는 충돌 체킹 하드웨어를 단순화시키거나 또는 제거할 수도 있다. 그 대신에, 본원에 설명된 하나 이상의 기법들은 동일한 스레드 그룹 (예를 들어, 웨이브) 로부터 기원하는 오직 메모리 요청들 중에서의 충돌에 대해서만 체크하는 것에 의해 인터-그룹 (예를 들어, 인터-웨이브) 및 인터-스레드 종속성들의 부재를 활용할 수도 있다. 불필요한 충돌 체크들을 제거하는 것에 의해, 본원에 설명된 기술들은 대규모의 병렬 프로세싱 시스템들로 확장가능하다. 예를 들어, 불필요한 충돌 체크들을 제거하는 것에 의해, 본원에 설명된 기술들은 GPU들에서 충돌 중재 (예를 들어, 해저드 체킹) 에 대해 운행 중인 수 백 내지 수 천 개의 메모리 요청들로 확장가능하다.
일부 예들에서, 본원에 이용된 용어 "스레드"는 단일의 동작 또는 명령을 지칭할 수도 있다. 동작 또는 명령은 픽스될 수도 있거나 또는 프로그래밍가능할 수도 있다. 다른 예들에서, 본원에 이용된 용어 "스레드"는 다수의 동작들 또는 명령들을 지칭할 수도 있다. 예를 들어, 용어 "스레드" 는 동작들 또는 명령들의 시퀀스를 지칭할 수도 있다. 동작들 또는 명령들의 시퀀스는 픽스될 수도 있거나 또는 프로그래밍가능할 수도 있다. 따라서, 일부 예들에서, 프로세싱 유닛 (1) 의 상이한 부분들로부터 기원하는 (예를 들어, 픽스되거나 또는 프로그래밍가능한) 상이한 스레드 유형들이 존재할 수도 있고; 그리고 이로써, 프로세싱 유닛 (1) 은 상이한 스레드 유형들 (예를 들어, 픽스되거나 또는 프로그래밍가능한 스레드 유형) 으로부터 메모리 요청들을 생성할 수도 있다.
도 1 은 본 개시의 하나 이상의 기술들을 구현하도록 구성될 수도 있는 일 예의 프로세싱 유닛을 예시하는 블록도이다. 도 1 에 도시된 바와 같이, 프로세싱 유닛 (1) 은 내부 메모리 (3A) 를 포함할 수도 있다. 내부 메모리 (3A) 에 대한 액세스는 메모리 제어기 (3B) 에 의해 제어될 수도 있다. 메모리 제어기 (3B) 는 임의의 메모리 제어기, 이를 테면, DMA (Direct Memory Access) 제어기 또는 임의의 다른 메모리 제어기일 수도 있다. 프로세싱 유닛 (1) 의 외부에 있는 메모리, 이를 테면, 전용 외부 메모리 (5A) 는 프로세싱 유닛 (1) 에 액세스가능할 수도 있다. 일부 예들에서, 외부 메모리 (5A) 는 시스템 메모리일 수도 있다. 외부 메모리 (5A) 에 대한 액세스는 메모리 제어기 (5B) 에 의해 제어될 수도 있다. 메모리 제어기 (5B) 는 임의의 메모리 제어기, 이를 테면, DMA (Direct Memory Access) 제어기일 수도 있다. 메모리 제어기 (예를 들어, 메모리 제어기 (3B) 및/또는 메모리 제어기 (5B)) 는 메모리 제어기가 다른 메모리 요청들을 서브하는 동안에 수신된 메모리 요청들을 일시적으로 저장하기 위해 하나 이상의 메모리 요청 버퍼들을 포함할 수도 있다. 메모리 제어기는 메모리 제어기가 연관된 메모리 (또는 메모리들) 를 메모리 요청들이 액세스하는 순서를 중재하도록 구성될 수도 있다. 도 1 과 관련하여 설명된 예는 도 1 의 예에 예시된 컴포넌트들에 더하여 다른 컴포넌트들을 포함할 수도 있다.
프로세싱 유닛 (1) 은 메모리 요청들 (예를 들어, 판독 메모리 요청들, 기록 메모리 요청들, 및 임의의 다른 유형의 메모리 요청) 을 생성하도록 구성될 수도 있다. 프로세싱 유닛 (1) 은 아비터 (4) 로서 본원에서 또한 지칭될 수도 있는 메모리 요청 아비터 (4) 를 포함할 수도 있다. 아비터 (4) 는 프로세싱 유닛 (1) 의 다음의 엘리먼트들: 프로세서들 (예를 들어, 하나 이상의 마이크로프로세서들), 하나 이상의 응용 주문형 집적 회로들 (ASIC들), 하나 이상의 필드 프로그래밍가능 게이트 어레이들 (FPGA들), 하나 이상의 산술 로직 유닛들 (ALU들), 하나 이상의 디지털 신호 프로세서들 (DSP들), 이산형 로직, 소프트웨어, 하드웨어, 펌웨어 또는 다른 등가의 집적화된 또는 이산형 로직 회로부 중 하나 이상일 수도 있거나 또는 하나 이상을 포함할 수도 있다. 예를 들어, 프로세싱 유닛 (1) 이 아비터 (4) 의 기능성을 제공하기 때문에 아비터 (4) 에 대한 레퍼런스는 프로세싱 유닛 (1) 에 대한 레퍼런스를 포함할 수도 있음이 이해된다. 일 예로서, 아비터 (4) 는 메모리 요청들을 홀딩하기 위한 충돌 중재 큐로서 지칭될 수도 있는 큐를 포함하는 것으로서 아래 설명된다. 그러나, 아비터 (4) 에 대한 레퍼런스가 프로세싱 유닛 (1) 의 레퍼런스를 포함할 수도 있다는 이해에 의해, 이에 따라, 아비터에 대한 이 설명은 상위 레벨에서 프로세싱 유닛 (1) 에 적용할 수도 있어, 이 설명은 또한, 프로세싱 유닛 (1) 이 메모리 요청들을 홀딩하기 위한 충돌 중재 큐로서 지칭될 수도 있는 큐를 포함할 수도 있음을 의미하도록 해석될 수 있음이 이해된다.
아비터 (4) 는 메모리 요청들을 홀딩하기 위한 충돌 중재 큐로서 지칭될 수도 있는 큐를 포함할 수도 있다. 아비터 (4) 에 대한 레퍼런스가 프로세싱 유닛 (1) 에 대한 레퍼런스를 포함할 수도 있다는 이해에 의해, 이에 따라 이 설명은 프로세싱 유닛 (1) 이 메모리 요청들을 홀딩하기 위한 충돌 중재 큐로서 지칭될 수도 있는 큐를 포함할 수도 있음을 의미하는 것으로 해석될 수도 있음이 이해된다.
아비터 (4) 는 순차적으로 또는 병렬로 큐에 저장된 메모리 요청들을 프로세싱할 수도 있다. 아비터 (4) 에 대한 레퍼런스가 프로세싱 유닛 (1) 에 대한 레퍼런스를 포함할 수도 있다는 이해에 의해, 이에 따라 이 설명은 프로세싱 유닛 (1) 이 순차적으로 또는 병렬로 큐에 저장된 메모리 요청들을 프로세싱할 수도 있음을 의미하는 것으로 해석될 수도 있음이 이해된다. 메모리 요청들은 메모리 요청들의 배치들에 대응할 수도 있다. 예를 들어, 큐는 메모리 요청드르이 다수의 배치들에 대응하는 메모리 요청들을 홀딩 (예를 들어, 저장) 하도록 구성될 수도 있다. 다른 예로서, 큐는 메모리 요청들의 N 개 이상의 배치들에 대응하는 메모리 요청들을 홀딩 (예를 들어, 저장) 하도록 구성될 수도 있고, 여기에서, N 은 양의 정수이다.
아비터 (4) 는 큐로부터 메모리 요청들을 릴리즈하도록 구성될 수도 있다. 아비터 (4) 에 대한 레퍼런스가 프로세싱 유닛 (1) 에 대한 레퍼런스를 포함할 수도 있다는 이해에 의해, 이 설명은 프로세싱 유닛 (1) 이 큐로부터 메모리 요청들을 릴리즈하도록 구성될 수도 있음을 의미하는 것으로 해석될 수도 있음이 이해된다. 아비터 (4) 의 큐로부터의 릴리즈시, 프로세싱 유닛 (1) 은 릴리즈된 메모리 요청들을 메모리 (예를 들어, 내부 메모리 (3A) 및/또는 외부 메모리 (5A)) 에 전송하거나 또는 달리 송신하도록 구성될 수도 있다. 본원에 이용된 바와 같이, "메모리" 에 대한 레퍼런스는 내부 메모리 (3A), 외부 메모리 (5A) 및/또는 프로세싱 유닛 (1) 에 의해 액세스가능한 임의의 다른 메모리를 지칭할 수도 있다. 예를 들어, 프로세싱 유닛 (1) 은 메모리 요청들을 어드레싱하도록 구성될 수도 있어, 메모리 요청들이 메모리 요청들과 연관된 메모리에 대응하는 메모리 제어기로 전송되고 메모리에 의해 수신되도록 한다. 따라서, 프로세싱 유닛 (1) 이 메모리 요청을 메모리에 전송하도록 구성되는 것으로서 본원에서 설명될 수도 있지만, 전송된 메모리 요청들은 메모리에 대한 메모리 요청들을 중재하는 메모리 제어기에 의해 수신될 수도 있음이 이해된다. 메모리 요청들은 일부 예들에서, 이들이 통신 매체 (예를 들어, 버스 (7)) 를 통하여 그리고 어드레싱된 컴포넌트 (예를 들어, 메모리 제어기) 에 의해 수신되도록 어드레싱될 수도 있다. 다른 예들에서, 메모리 요청들은, 이들이 메모리에 대해 예정되어 있지만 그럼에도 불구하고 메모리 제어기에 의해 수신되도록 어드레싱될 수도 있다.
프로세싱 유닛 (1) 은 메모리 요청들 및/또는 메모리 요청들의 배치들을 메타데이터로 태깅하도록 구성될 수도 있다. 일부 예들에서, 메모리 요청들을 메타데이터로 태깅하는 것은 각각의 메모리 요청이 생성될 때마다 발생할 수도 있다. 이와 유사하게, 메모리 요청들의 배치들을 메타데이터로 태깅하는 것은 일부 예들에서, 각각의 배치가 생성될 때마다 발생할 수도 있다. 일부 예들에서, 태깅된 메타데이터는 메타데이터로 태깅된 특정 메모리 요청이 기원되었던 스레드 그룹을 식별할 수도 있다. 다른 예들에서, 태깅된 메타데이터는 메타데이터로 태깅된 메모리 요청들의 배치가 기원되었던 스레드 그룹을 식별할 수도 있다. 이러한 예들에서, 메모리 요청들의 배치 자체가 태깅될 수도 있거나 또는 메모리 요청들의 배치에서 제 1 메모리 요청만이 메타데이터로 태깅될 수도 있다. 메모리 요청들의 배치 또는 메모리 요청들의 배치에서의 제 1 메모리 요청만을 태깅하는 것에 의해, 프로세싱 유닛 (1) 은 메모리 요청들의 배치에서의 각각의 메모리 요청을 메타데이터로 태깅하지 않는 것에 의해 대역폭의 소모를 감소시키도록 구성될 수도 있다. 메모리 요청들의 배치를 메타데이터로 태깅하는 것에 대한 레퍼런스는 메모리 요청들의 배치의 각각의 메모리 요청을 메타데이터로 태깅하는 것으로서 해석되지 않아야 함이 이해된다. 그 대신에, 메모리 요청들의 배치를 메타데이터로 태깅하는 것은 배치 자체를 태깅하는 것 (예를 들어, 배치의 제 1 메모리 요청 전에 메타데이터를 추가하는 것, 배치의 최종 메모리 요청 후에 메타데이터를 추가하는 것, 또는 메타데이터를 배치에 대응하는 캡슐화 데이터 구조에 추가하는 것), 또는 배치에서의 단일의 메모리 요청 (예를 들어, 배치에서의 제 1 메모리 요청) 을 태깅하는 것을 의미하는 것으로 이해된다. 배치 자체를 태깅하는 것은 예를 들어, 메타데이터를 캡슐화 데이터 구조에 추가하는 것을 포함할 수도 있다. 다른 예에서, 배치 자체를 태깅하는 것은 상이한 스레드 그룹들로부터 기원하는 메모리 요청들 사이에 배치 식별자를 삽입하는 것을 포함할 수도 있다. 배치 식별자, 이를 테면, 배치 디리미터 토큰으로서 또한 지칭될 수도 있는 본원에 설명된 배치 시작 식별자는 메모리 요청들의 각각의 배치 중 제 1 메모리 요청 전에 삽입될 수도 있다. 다른 예들에서, 메모리 요청들의 각각의 배치 중 최종 메모리 요청 후에 삽입될 수도 있다. 이러한 예들에서, 순차적으로 저장될 때, (이러한 큐에서 제 1 및/또는 최종 배치를 제외하고) 배치 식별자가 메모리 요청들의 2 개의 배치들 사이에 위치되기 때문에 배치 식별자를 메모리 요청들의 각각의 배치의 전방부에 및/또는 단부에 삽입하는 것은 충돌 중재 큐에 저장될 때 메모리 요청들의 배치들의 범위를 규정하도록 서브할 수도 있다. 배치 식별자는 상이한 스레드 그룹들 및/또는 클라이언트들로부터 배치들을 분리하도록 서브할 수도 있다.
메모리 요청들의 배치는 예를 들어, 배치 식별자, 이를 테면, 본원에 설명된 시작 배치 식별자 또는 배치 디리미터 토큰에 의해 범위가 규정될 수도 있다. 배치 식별자는 충돌 중재 큐에 저장될 수도 있다.
프로세싱 유닛 (1), 프로세싱 유닛 (1) 의 아비터 (4), 메모리 요청들의 배치들, 메타데이터의 태깅 및 메타데이터 자체는 아래 자세하게 설명될 것이다.
프로세싱 유닛 (1) 은 유선이든 무선이든 통신 매체를 통하여 외부 메모리 (5A) 에 통신적으로 커플링될 수도 있다. 일부 예들에서, 프로세싱 유닛 (1) 은 통신 매체, 이를 테면, 버스 (7) 를 통하여 외부 메모리 (5A) 에 직접적으로 통신적으로 커플링될 수도 있다. 다른 예들에서, 프로세싱 유닛 (1) 은 통신 매체, 이를 테면, 버스를 통하여 외부 메모리 (5A) 에 간접적으로 통신적으로 커플링될 수도 있다. 이러한 다른 예들에서, 프로세싱 유닛 (1) 은 통신 매체, 이를 테면, 버스를 통하여 외부 메모리 (5A) 에 자체가 직접적으로 통신적으로 커플링되는 다른 컴포넌트 (예를 들어, 상이한 프로세싱 유닛) 에 직접적으로 통신적으로 커플링될 수도 있다.
일부 예들에서, 내부 메모리 (3A) 는 하나 이상의 휘발성 또는 비휘발성 메모리들 또는 저장 디바이스들, 이를 테면, 예를 들어, 랜덤 액세스 메모리 (RAM), 정적 RAM (SRAM), 동적 RAM (DRAM), 소거가능한 프로그래밍가능 ROM (EPROM), 전기적으로 소거가능한 프로그래밍가능한 ROM (EEPROM), 플래시 메모리, 자기 데이터 매체 또는 광학 저장 매체, 임의의 온-칩 메모리 (예를 들어, 프로세싱 유닛 (1) 의 임의의 집적 메모리) 또는 임의의 다른 내부 메모리를 포함할 수도 있다. 다른 예들에서, 내부 메모리 (3A) 는 위에 설명된 예들과는 상이한 하나 이상의 메모리들 또는 저장 디바이스들을 포함할 수도 있다.
외부 메모리 (5A) 는 하나 이상의 컴퓨터 판독가능 저장 매체를 포함할 수도 있다. 외부 메모리 (5A) 는 하나 이상의 휘발성 또는 비휘발성 메모리들 또는 저장 디바이스들, 이를 테면, 예를 들어, 랜덤 액세스 메모리 (RAM), 정적 RAM (SRAM), 동적 RAM (DRAM), 소거가능한 프로그래밍가능 ROM (EPROM), 전기적으로 소거가능한 프로그래밍가능한 ROM (EEPROM), 플래시 메모리, 자기 데이터 매체 또는 광학 저장 매체, 임의의 온-칩 메모리 (예를 들어, 프로세싱 유닛 (1) 의 임의의 집적 메모리) 또는 임의의 다른 내부 메모리를 포함할 수도 있다.
외부 메모리 (5A) 는 일부 예들에 따라 비일시적 저장 매체일 수도 있다. 용어 "비일시적" 은 저장 매체가 반송파 또는 전파 신호에서 구현되지 않는 것을 나타낼 수도 있다. 일부 예들에서, 용어 "비일시적"은 외부 메모리 (5A) 가 비가동적임을 의미할 수도 있다. 다른 예들에서, 용어 "비일시적"은 외부 메모리 (5A) 가 비가동적이거나 또는 외부 메모리의 컨텐츠가 정적임을 의미하지 않는다. 일 예로서, 외부 메모리 (5A) 는 통신적으로 커플링되게 하는 컴퓨팅 디바이스 (예를 들어, 도 2 에 대하여 설명된 컴퓨팅 디바이스 (2)) 로부터 제거될 수도 있다. 예를 들어, 외부 메모리 (5A) 는 컴퓨팅 디바이스로부터 통신적으로 (예를 들어, 무선으로, 물리적으로, 또는 다른 방식으로) 디커플링될 수도 있고 다른 컴퓨팅 디바이스 (예를 들어, 도 2 에 대하여 설명된 컴퓨팅 디바이스 (2)) 에 통신적으로 (예를 들어, 무선으로, 물리적으로, 또는 다른 방식으로) 커플링될 수도 있다. 다른 예로서, 외부 메모리 (5A) 는 컴퓨팅 디바이스로부터 제거되거나 또는 달리 물리적으로 접속해제될 수도 있고, 이에 의해, 외부 메모리는 다른 디바이스에 통신적으로 커플링되거나 또는 이동된다 (예를 들어, 다른 디바이스로 이동되거나 또는 다른 디바이스에 물리적으로 접속된다). 다른 예로서, 외부 메모리 (5A) 는 물리적으로 다른 디바이스에 삽입될 수도 있다. 특정 예들에서, 비일시적 저장 매체는 시간에 따라 변할 수 있는 데이터를 (예를 들면, RAM 에) 저장할 수도 있다.
일부 예들에서, 외부 메모리 (5A) 는 실행될 때 프로세싱 유닛 (1) 으로 하여금 본 개시에서 프로세싱 유닛 (1) 에 설명된 기능들을 수행하게 하는 명령들을 포함할 수도 있다 (예를 들어, 그 위에 명령들이 저장될 수도 있다). 따라서, 외부 메모리 (5A) 는 실행될 때 하나 이상의 프로세서들 (예를 들어, 프로세싱 유닛 (1)) 로 하여금 본원에 설명된 하나 이상의 기능들을 수행하게 하는 명령들이 그 위에 저장된 컴퓨터 판독가능 저장 매체일 수도 있다.
프로세싱 유닛 (1) 은 중앙 프로세싱 유닛 (CPU), 그래픽 프로세싱 유닛 (GPU), 병렬 프로세싱 유닛 (예를 들어, 병렬 프로세싱을 수행하도록 구성되는 임의의 프로세싱 유닛), 시스템 온 칩 (SoC), 또는 본원에 설명된 하나 이상의 기술들을 수행하도록 구성될 수도 있는 임의의 다른 프로세싱 유닛일 수도 있다. 일부 예들에서, 프로세싱 유닛 (1) 은 범용 프로세싱 능력들을 갖는 GPU 일 수도 있고, 범용 프로세싱 태스크들 (예를 들어, 비-그래픽 관련 태스크들) 을 구현할 때 범용 GPU (GPGPU) 로 지칭될 수도 있다. 따라서, 본원에 이용된 바와 같이, GPU 에 대한 레퍼런스는 범용 프로세싱 능력들을 갖는 또는 범용 프로세싱 능력들이 없는 GPU 를 의미할 수도 있다. 일부 예들에서, 프로세싱 유닛 (1) 은 단일 명령 다중 데이터 (SIMD) 프로세서, 다중 명령 다중 데이터 (MIMD) 프로세서, 단일 프로그램 다중 데이터 (SPMD) 프로세서, 또는 다중 프로그램 다중 데이터 (MPMD) 프로세서일 수도 있다.
프로세싱 유닛 (1) 은 하나 이상의 프로세서들 (예를 들어, 하나 이상의 마이크로프로세서들), 하나 이상의 응용 주문형 집적 회로들 (ASIC들), 하나 이상의 필드 프로그래밍가능 게이트 어레이들 (FPGA들), 하나 이상의 산술 로직 유닛들 (ALU들), 하나 이상의 디지털 신호 프로세서들 (DSP들), 이산형 로직, 소프트웨어, 하드웨어, 펌웨어, 다른 등가의 집적화된 또는 이산형 로직 회로부 또는 이들의 임의의 조합(들) 을 포함할 수도 있다. 프로세싱 유닛 (1) 은 또한 하나 이상의 프로세서 코어들을 포함할 수도 있어, 프로세싱 유닛 (1) 이 멀티-코어 프로세서로서 지칭될 수 있게 된다. 일부 예들에서, 프로세싱 유닛 (1) 은 병렬 프로세싱, 이를 테면, 그래픽 프로세싱에 적절한 대규모 병렬 프로세싱 능력들을 갖는 프로세싱 유닛 (1) 을 제공하는 집적화된 및/또는 이산형 로직 회로부를 포함하는 특수호된 하드웨어일 수도 있다. 본 개시의 기술들은 메모리 요청 중재를 수행하도록 구성될 수도 있는 임의의 프로세싱 유닛에 적용한다.
본원에 설명된 기술들에 대응하는 임의의 이점들이 프로세싱 유닛 (1) 의 병렬 프로세싱 능력이 증가함에 따라 증가할 수도 있음이 이해된다. 예를 들어, GPU 는 일반적으로 대규모 병렬 프로세싱 능력을 갖는 것으로 고려되는 반면, CPU 는 대규모 관점에서 특히 GPU 에 비교될 때 반드시 필수적인 것은 아니지만 병렬 프로세싱 능력들을 갖는 것으로 고려된다. 따라서, 예시적 GPU 가 이러한 예들에서, 예시적 GPU 가 더 많은 병렬 프로세싱 능력들을 갖는 것에 기인하여 예시적 GPU 에 의해 실현되는 임의의 이점들이 예시적 CPU 의 이점보다 더 클 수도 있는 것을 제외하면, 대규모 병렬 프로세싱 능력들을 갖고 예시적 CPU 가 예시적 GPU 의 능력보다 더 적은 병렬 프로세싱 능력들을 갖는 일부 예들에서, 본원에 설명된 기술들로부터 축적되는 임의의 이점들이 이러한 프로세싱 유닛들 양쪽 모두에 의해 인식될 수도 있음이 이해된다. 그러나, 이는 또한 산업이 유동적이고 일부 CPU들은 자신들이 GPU 의 능력보다 더 큰 병렬 프로세싱 능력들을 갖게 되도록 설계될 수도 있음을 이해할 것이다. 이러한 예들에서, 예시적인 CPU들이 예시적 GPU 보다 더 큰 병렬 프로세싱 능력들을 갖는 것에 기인하여 특정의 예시적인 CPU들에 의해 실현되는 임의의 장점(들)이 예시적 GPU 의 장점들보다 더 클 수도 있는 것을 제외하면, 본원에 설명된 하나 이상의 기술들에 대응하는 임의의 이점(들)은 이러한 대규모 병렬 CPU들 뿐만 아니라 GPU들에 의해 인식될 수도 있음이 이해된다. 따라서, 본원에 설명된 하나 이상의 기술들에 대응하는 임의의 장점(들)은 병렬 프로세싱 능력들을 갖는 임의의 프로세싱 유닛에 의해 실현될 수도 있음이 이해된다.
통상의 CPU 와 달리, GPU 는 단일 명령으로부터 (예를 들어, 단일 SIMD 명령으로부터) 수 백 내지 수 천 개의 메모리 요청들을 생성할 수도 있음이 이해된다. 이와 관련하여, 본원에 설명된 기술들은 병렬로 수 백 또는 수 천 개의 메모리 요청들을 생성하는 능력을 갖지 않는 프로세싱 유닛에 비교할 때 병렬로 수 백 또는 수 천 개의 메모리 요청들을 생성하는 능력을 갖는 프로세싱 유닛에 대해 일반적으로 보다 더 유리할 수도 있음이 이해된다. 예를 들어, 메모리 요청들의 아웃-오브-오더 실행은 성능을 상승시킬 수도 있고, 일부 예들에서, 상당히 그러할 수도 있다. 예를 들어, 아웃-오브-오더 실행은 운행 중인 많은 메모리 요청들이 메모리 레이턴시를 은닉하게 할 수도 있다. 그러나, 생성된 메모리 요청들의 개수가 증가함에 따라, 각각의 개별적인 메모리 요청들의 어드레스가 메모리 일관성을 보장하기 위해 다른 개별적인 메모리 요청의 어드레스와 충돌하는지 또는 충돌하지 않는지의 여부를 결정하는 것에 의해 아웃-오브-오더 실행이 실행되면 아웃-오브-오더 실행을 인에이블하는데 필요한 프로세싱이 또한 너무 증가한다. 예를 들어, 각각의 생성된 메모리 요청의 어드레스들을 비교하는 것은 생성된 요청들의 개수가 증가함에 따라 역시 실현가능하지 않을 수도 있고/있거나 스케일링되지 않을 수도 있다. 따라서, 본원에 설명된 기술들은 메모리 요청들 중에서 비충돌 및/또는 충돌 메모리를 식별하는 효율적이고 스케일러블 방식을 가능하게 할 수도 있다. 예를 들어, 본원에 설명된 기술들은 메모리 요청들 중에서 비충돌 및/또는 충돌 메모리를 식별하는 효율적이고 스케일러블 방식을 가능하게 할 수도 있다.
본원에서 설명된 기술들은 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 임의의 조합으로 구현될 수도 있다. 예를 들어, 본원에 설명된 하나 이상의 기술들이 하드웨어로 구현되는 경우, 프로세싱 유닛 (1) 은 본원에 설명된 하나 이상의 기술들을 수행하도록 함께 동작하도록 구성되는 이러한 하드웨어 또는 복수의 하드웨어 컴포넌트들의 하나의 컴포넌트일 수도 있다. 이러한 예들에서, 하드웨어는 실행될 때 본원에 설명된 하나 이상의 기술들을 수행할 수도 있는 소프트웨어 또는 펌웨어를 실행하도록 구성될 수도 또는 구성되지 않을 수도 있다. 임의의 소프트웨어 및/또는 펌웨어는 비일시적 저장 매체, 이를 테면, 하드웨어의 온-칩 메모리 (예를 들어, 프로세싱 유닛 (1) 의 내부 메모리 (3A)) 또는 임의의 하드웨어에 대한 외부 메모리 (예를 들어, 외부 메모리 (5A)) 상에 저장될 수도 있다.
도 2 는 본 개시의 하나 이상의 양태들을 구현하도록 구성될 수도 있는 예시의 컴퓨팅 디바이스 (예를 들어, 컴퓨팅 디바이스 (2)) 및 프로세싱 유닛 (예를 들어, 프로세싱 유닛 (1)) 을 예시하는 블록도이다. 도 2 에 도시된 바와 같이, 컴퓨팅 디바이스 (2) 는 예를 들어, 퍼스널 컴퓨터, 데스크톱 컴퓨터, 랩톱 컴퓨터, 테블릿 컴퓨터, 컴퓨터 워크스테이션, 비디오 게임 플랫폼 또는 콘솔, 모바일 전화기 (예를 들어, 셀룰라 또는 위성 전화기), 핸드헬드 디바이스 (예를 들어, 포터블 비디오 게임 디바이스 또는 개인 휴대 정보 단말기 (PDA)), 웨어러블 컴퓨팅 디바이스, 퍼스널 뮤직 플레이어, 비디오 플레이어, 디스플레이 디바이스, 텔레비전, 네트워크 디바이스, 중간 네트워크 디바이스, 임의의 컴퓨팅 디바이스, 또는 본 개시의 하나 이상의 양태들을 구현하도록 구성될 수도 있는 디바이스의 임의의 다른 유형일 수도 있다.
컴퓨팅 디바이스 (2) 는 하나 이상의 프로세싱 유닛들 (1), 트랜시버 (9), 사용자 인터페이스 (11), 디스플레이 프로세싱 유닛 (13), 디스플레이 (15) 및 외부 메모리 (5A) 를 포함할 수도 있다. 도 1 의 예에서, 컴퓨팅 디바이스는 2 개의 프로세싱 유닛들: 프로세싱 유닛 (1A) 및 프로세싱 유닛 (1B) 을 포함하는 것으로서 도시되어 있다. 본원에 이용된 바와 같이, 프로세싱 유닛 (1) 에 대한 레퍼런스는 하나 이상의 프로세싱 유닛들, 예를 들어, 프로세싱 유닛 (1A) 및/또는 프로세싱 유닛 (1B) 을 지칭할 수도 있다. 예를 들어, 프로세싱 유닛 (1) 에 대한 레퍼런스는 프로세싱 유닛 (1A) 을 지칭할 수도 있다. 다른 예로서, 프로세싱 유닛 (1) 에 대한 레퍼런스는 프로세싱 유닛 (1B) 을 지칭할 수도 있다. 다른 예로서, 프로세싱 유닛 (1) 에 대한 레퍼런스는 프로세싱 유닛 (1A) 및/또는 프로세싱 유닛 (1B) 을 지칭할 수도 있다. 또 다른 예로서, 프로세싱 유닛 (1) 에 대한 레퍼런스는 하나 이상의 프로세싱 유닛들 (1) 을 지칭할 수도 있다. 프로세싱 유닛 (1) 은 다른 프로세싱 유닛들과 이종적으로 수행하도록 구성될 수도 또는 구성되지 않을 수도 있다. 예를 들어, 프로세싱 유닛 (1A) 및 프로세싱 유닛 (1B) 은 서로에 대하여 이종적으로 수행하도록 구성될 수도 있다. 따라서, 컴퓨팅 디바이스 (2) 가 이종적 컴퓨팅을 수행하도록 구성될 수도 있음이 이해된다. 프로세싱 유닛 (1) 은 임의의 컴퓨팅 디바이스 내에 통합될 수도 있다. 일부 예들에서, 프로세싱 유닛 (1A) 은 CPU 일 수도 있고, 프로세싱 유닛 (1B) 은 GPU 일 수도 있다. 다른 예들에서, 프로세싱 유닛 (1B) 은 CPU 일 수도 있고, 프로세싱 유닛 (1A) 은 GPU 일 수도 있다.
프로세싱 유닛 (1A) 은 내부 메모리 (3A-1) 를 포함할 수도 있다. 내부 메모리 (3A-1) 에 대한 액세스는 메모리 제어기 (3B-1) 에 의해 제어될 수도 있다. 메모리 제어기 (3B-1) 는 임의의 메모리 제어기, 이를 테면, DMA (Direct Memory Access) 제어기 또는 임의의 다른 메모리 제어기일 수도 있다. 이와 유사하게, 프로세싱 유닛 (1B) 은 내부 메모리 (3A-2) 를 포함할 수도 있다. 내부 메모리 (3A-2) 에 대한 액세스는 메모리 제어기 (3B-2) 에 의해 제어될 수도 있다. 메모리 제어기 (3B-2) 는 임의의 메모리 제어기, 이를 테면, DMA (Direct Memory Access) 제어기 또는 임의의 다른 메모리 제어기일 수도 있다. 본원에 이용된 바와 같이, 내부 메모리 (3A) 에 대한 레퍼런스는 내부 메모리 (3A-1) 및/또는 내부 메모리 (3A-2) 를 지칭할 수도 있다. 예를 들어, 내부 메모리 (3A) 에 대한 레퍼런스는 내부 메모리 (3A-1) 를 지칭할 수도 있다. 다른 예로서, 내부 메모리 (3A) 에 대한 레퍼런스는 내부 메모리 (3A-2) 를 지칭할 수도 있다. 다른 예로서, 내부 메모리 (3A) 에 대한 레퍼런스는 내부 메모리 (3A-1) 및/또는 내부 메모리 (3A-2) 를 지칭할 수도 있다. 유사하게, 본원에 이용된 바와 같이, 메모리 제어기 (3B) 에 대한 레퍼런스는 메모리 제어기 (3B-1) 및/또는 메모리 제어기 (3B-2) 를 지칭할 수도 있다. 예를 들어, 메모리 제어기 (3B) 에 대한 레퍼런스는 메모리 제어기 (3B-1) 를 지칭할 수도 있다. 다른 예로서, 메모리 제어기 (3B) 에 대한 레퍼런스는 메모리 제어기 (3B-1) 를 지칭할 수도 있다. 다른 예로서, 메모리 제어기 (3B) 에 대한 레퍼런스는 메모리 제어기 (3B-1) 및/또는 메모리 제어기 (3B-2) 를 지칭할 수도 있다.
내부 메모리 (3A-1) 는 하나 이상의 휘발성 또는 비휘발성 메모리들 또는 저장 디바이스들, 이를 테면, 예를 들어, 랜덤 액세스 메모리 (RAM), 정적 RAM (SRAM), 동적 RAM (DRAM), 소거가능한 프로그래밍가능 ROM (EPROM), 전기적으로 소거가능한 프로그래밍가능한 ROM (EEPROM), 플래시 메모리, 자기 데이터 매체 또는 광학 저장 매체, 임의의 온-칩 메모리 (예를 들어, 프로세싱 유닛 (1) 의 임의의 집적 메모리) 또는 임의의 다른 내부 메모리를 포함할 수도 있다. 다른 예들에서, 내부 메모리 (3A-1) 는 위에 설명된 예들과는 상이한 하나 이상의 메모리들 또는 저장 디바이스들을 포함할 수도 있다. 이와 유사하게, 내부 메모리 (3A-2) 는 하나 이상의 휘발성 또는 비휘발성 메모리들 또는 저장 디바이스들, 이를 테면, 예를 들어, 랜덤 액세스 메모리 (RAM), 정적 RAM (SRAM), 동적 RAM (DRAM), 소거가능한 프로그래밍가능 ROM (EPROM), 전기적으로 소거가능한 프로그래밍가능한 ROM (EEPROM), 플래시 메모리, 자기 데이터 매체 또는 광학 저장 매체, 임의의 온-칩 메모리 (예를 들어, 프로세싱 유닛 (1) 의 임의의 집적 메모리) 또는 임의의 다른 내부 메모리를 포함할 수도 있다. 다른 예들에서, 내부 메모리 (3A-2) 는 위에 설명된 예들과는 상이한 하나 이상의 메모리들 또는 저장 디바이스들을 포함할 수도 있다.
프로세싱 유닛 (1) 은 아비터 (4-1) 로서 본원에서 또한 지칭될 수도 있는 메모리 요청 아비터 (4-1) 를 포함할 수도 있다. 아비터 (4-1) 는 메모리 요청들을 홀딩하기 위한 큐를 포함할 수도 있다. 아비터 (4) 에 대한 설명은 아비터 (4-1) 에 적용한다. 프로세싱 유닛 (1B) 은 아비터 (4-2) 로서 본원에서 또한 지칭될 수도 있는 메모리 요청 아비터 (4-2) 를 포함할 수도 있다. 아비터 (4-2) 는 메모리 요청들을 홀딩하기 위한 큐를 포함할 수도 있다. 아비터 (4) 에 대한 설명은 아비터 (4-2) 에 적용한다. 이에 따라 본원에 이용된 바와 같이, 아비터 (4) 에 대한 레퍼런스는 아비터 (4-1) 및/또는 아비터 (4-2) 를 지칭할 수도 있다. 예를 들어, 아비터 (4) 에 대한 레퍼런스는 아비터 (4-1) 를 지칭할 수도 있다. 다른 예로서, 아비터 (4) 에 대한 레퍼런스는 아비터 (4-2) 를 지칭할 수도 있다. 다른 예로서, 아비터 (4) 에 대한 레퍼런스는 아비터 (4-1) 및/또는 아비터 (4-2) 를 지칭할 수도 있다.
프로세싱 유닛 (1A) 및 프로세싱 유닛 (1B) 의 외부에 있는 메모리, 이를 테면, 도시된 외부 메모리 (5A) 는 프로세싱 유닛 (1A) 및 프로세싱 유닛 (1B) 에 액세스가능할 수도 있다. 일부 예들에서, 외부 메모리 (5A) 는 시스템 메모리일 수도 있다. 외부 메모리 (5A) 에 대한 액세스는 메모리 제어기 (5B) 에 의해 제어될 수도 있다. 메모리 제어기 (5B) 는 임의의 메모리 제어기, 이를 테면, DMA (Direct Memory Access) 제어기일 수도 있다. 메모리 제어기 (예를 들어, 메모리 제어기 (3B-1), 메모리 제어기 (3B-2) 및/또는 메모리 제어기 (5B)) 는 메모리 제어기가 다른 메모리 요청들을 서브하는 동안에 수신된 메모리 요청들을 일시적으로 저장하기 위해 하나 이상의 메모리 요청 버퍼들을 포함할 수도 있다. 메모리 제어기는 메모리 제어기가 연관된 메모리 (또는 메모리들) 를 메모리 요청들이 액세스하는 순서를 중재하도록 구성될 수도 있다.
도 2 의 예에서, 컴퓨팅 디바이스 (2) 에 도시된 여러 컴포넌트들은 컴퓨팅 디바이스 (2) 의 모든 예에 대해 반드시 그러한 것은 아닐 수도 있다. 예를 들어, 컴퓨팅 디바이스 (2) 는 다른 예들에서, 도 2 의 예에 도시된 하나 이상의 컴포넌트들 (예를 들어, 디스플레이 프로세싱 유닛 (3)) 을 포함할 수도 또는 포함하지 않을 수도 있다. 다른 예들에서, 컴퓨팅 디바이스 (2) 는 도 2 의 예에 예시된 컴포넌트들에 더하여 하나 이상의 컴포넌트들을 포함할 수도 있다.
트랜스시버 (9) 는, 컴퓨팅 디바이스 (2) 및 다른 디바이스 또는 네트워크 사이의 무선 또는 유선 통신을 허용하는 회로부를 포함할 수도 있다. 트랜스시버 (9) 는 변조기들, 복조기들, 증폭기들 및 유선 또는 무선 통신을 위한 다른 이러한 회로부를 포함할 수도 있다. 일부 예들에서, 트랜시버 (9) 는 프로세싱 유닛 (1) 과 통합될 수도 또는 통합되지 않을 수도 있다. 예를 들어, 트랜시버 (9) 는 프로세싱 유닛 (1) 과 동일한 집적 회로 (IC) 의 부분일 수도 있거나, 프로세싱 유닛 (1) 의 부분 또는 전부를 포함할 수도 있는 IC 또는 IC들 외부에 있을 수도 있거나, 또는 프로세싱 유닛 (1) 의 부분 또는 전부를 포함할 수도 있는 IC 또는 IC들 외부에 있는 IC에 형성될 수도 있다. 예를 들어, 트랜시버 (9) 은 임의의 다양한 적절한 인코더 회로부, 이를 테면, 하나 이상의 마이크로프로세서들, 디지털 신호 프로세서들 (DSPs), 응용 주문형 집적 회로들 (ASICs), 필드 프로그램가능 게이트 어레이들 (FPGAs), 이산형 로직, 소프트웨어, 하드웨어, 펌웨어 또는 이들의 임의의 조합들로서 구현될 수도 있다.
사용자 인터페이스 (11) 의 예들은 이들에 제한되지 않지만 트래볼, 마우스, 키보드, 및 임의의 다른 입력 디바이스를 포함할 수도 있다. 예를 들어, 사용자 인터페이스 (1) 는 터치스크린일 수도 있고 이는 디스플레이 (15) 의 일부로서 통합될 수도 있다. 디스플레이 (15) 는 액정 디스플레이 (LCD), 음극선관 (CRT) 디스플레이, 플라즈마 디스플레이, 터치 감응형 디스플레이, 존재 감응형 디스플레이, 또는 임의의 다른 유형의 디스플레이를 포함할 수도 있다. 사용자 인터페이스 (11) 가 소프트웨어를 이용하여 부분적으로 또는 완전하게 구현되는 경우 (예를 들어, 그래픽 사용자 인터페이스), 소프트웨어는 프로세싱 유닛 (1) 또는 프로세싱 유닛 (1) 과는 상이한 프로세싱 유닛에 의해 실행될 수도 있고, 소프트웨어는 메모리 (예를 들어, 온-칩 메모리, 이를 테면, 내부 메모리 (3A), 또는 오프-칩 메모리, 이를 테면 외부 메모리 (5A)) 상에 저장될 수도 있다. 프로세싱 유닛 (1) 은 사용자 인터페이스 (11) 의 하나 이상의 양태들을 구현하도록 메모리 상에 저장된 소프트웨어 명령들에 액세스 및 실행하도록 구성될 수도 있다.
디스플레이 프로세싱 유닛 (13) 은 타일 기반 아키텍처를 이용할 수도 또는 이용하지 않을 수도 있다. 일부 예들에서, 타일은 높이 및 폭을 포함하는 픽셀들의 영역 표현이며, 높이는 하나 이상의 픽셀들이고 폭은 하나 이상의 픽셀들이다. 이러한 예들에서, 타일들은 사실상 직사각형 또는 정사각형일 수도 있다. 다른 예들에서, 타일은 정사각형 또는 직사각형과는 상이한 형상일 수도 있다. 디스플레이 프로세싱 유닛 (13) 은 적어도 하나의 메모리로부터 다수의 이미지 계층들 (예를 들어, 포어그라운드 및 백그라운드) 를 페치하도록 구성될 수도 있다. 예를 들어, 디스플레이 프로세싱 유닛 (13) 은 프로세싱 유닛 (예를 들어, 프로세싱 유닛 (1), 이를 테면, 일부 예들에서 프로세싱 유닛 (1B)) 이 픽셀 표현들의 형태로 그래픽 데이터를 출력하는 프레임 버퍼 및/또는 다른 메모리로부터 이미지 계층들을 페치하도록 구성될 수도 있다. 다수의 이미지 계층들은 포어그라운 계층들 및/또는 백그라운드 계층들을 포함할 수도 있다. 본원에서 이용되는 용어 "이미지"는 정지 영상만을 의미하도록 의도되지 않는다. 다만, 이미지 또는 이미지 계층은 정지 영상 (예를 들어, 블렌딩될 때 이미지 또는 이미지 계층들이 이미지일 수도 있음) 또는 비디오 (예를 들어, 블렌드될 때 이미지 또는 이미지 계층들은, 보여졌을 때 움직이는 픽처 또는 비디오를 시퀀스로 생성하는 이미지들의 시퀀스에서의 단일 이미지일 수도 있음) 와 연관될 수도 있다.
디스플레이 프로세싱 유닛 (13) 은 다수의 계층들로부터 픽셀들을 프로세싱하도록 구성될 수도 있다. 디스플레이 프로세싱 유닛 (13) 에 의해 수행될 수도 있는 예시의 픽셀 프로세싱은 업샘플링, 다운샘플링, 스케일링, 회전 및 다른 픽셀 프로세싱을 포함할 수도 있다. 예를 들어, 디스플레이 프로세싱 유닛 (13) 은 포어그라운드 이미지 계층들 및/또는 백그라운드 이미지 계층들과 연관된 픽셀들을 프로세싱하도록 구성될 수도 있다. 디스플레이 프로세싱 유닛 (13) 은 다수의 계층들으로부터의 픽셀들을 블렌딩하고 블렌딩된 픽셀들을 타일 포맷으로 메모리에 되기록하도록 구성될 수도 있다. 그 후, 블렌딩된 픽셀들은 래스터 포맷으로 메모리로부터 판독되고 프리젠테이션을 위하여 디스플레이 (15) 로 전송될 수도 있다.
이때 프로세싱 유닛 (1) 에 대해 참조하여 보면, 프로세싱 유닛 (1) 은 여러 유형들의 애플리케이션들을 수행하도록 구성될 수도 있다. 하나 이상의 애플리케이션들의 실행을 위한 명령들은 프로세싱 유닛 (1) 에 의해 액세스가능한 메모리 (예를 들어, 내부 메모리 (3A) 및/또는 외부 메모리 (5A)) 내에 저장될 수도 있다. 프로세싱 유닛 (1) 은 다른 프로세싱 유닛으로부터 하나 이상의 프로세싱 작업들을 송신 및/또는 수신하도록 구성될 수도 있다. 예를 들어, 프로세싱 유닛 (1A; 예를 들어, CPU) 은 하나 이상의 프로세싱 작업들을 프로세싱 유닛 (1B; 예를 들어, GPU) 으로 오프로드하도록 구성될 수도 있다. 다른 예로서는, 프로세싱 유닛 (1B; 예를 들어, GPU) 은 하나 이상의 프로세싱 작업들을 프로세싱 유닛 (1A; 예를 들어, CPU) 으로 오프로드하도록 구성될 수도 있다.
프로세싱 유닛 (1) 은 프로그래밍 언어, 애플리케이션 프로그램 인터페이스 (API), 라이브러리들, 및/또는 루틴 시스템을 포함할 수도 있는 컴퓨팅 플랫폼 (예를 들어, 병렬 프로그래밍을 위한 프레임워크) 에 따라 하나 이상의 프로세스들을 수행하도록 구성될 수도 있다. 다른 예들에서, 컴퓨팅 플랫폼은 컴퓨팅 표준 및/또는 컴퓨팅 사양을 지칭할 수도 있다. 예를 들어, 프로세싱 유닛 (1) 은 OpenCL API 을 이용하여 OpenCL 컴퓨팅 플랫폼에 따라 하나 이상의 프로세스들을 수행하도록 구성될 수도 있다. 본 개시의 양태들은 OpenCL 컴퓨팅 플랫폼 및/또는 OpenCL API들로 제한되지 않는다. 예를 들어, 프로세싱 유닛 (1) 은 임의의 병렬 컴퓨팅 플랫폼, 임의의 이질적 컴퓨팅 플랫폼 등에 따라 하나 이상의 프로세스들을 수행하도록 구성될 수도 있다. 예를 들어, 프로세싱 유닛 (1) 은 OpenGL 컴퓨팅 플랫폼, CUDA 컴퓨팅 플랫폼, HSA 파운데이션 컴퓨팅 플랫폼, Vulkan API 등에 따라 하나 이상의 프로세스들을 수행하도록 구성될 수도 있다. 추가적으로, 본 개시에 설명된 기술들은 API 에 따라 기능하는데 요구되지 않는다.
도 3 은 메모리 요청들의 배치 (30) 의 일 예를 예시한다. 메모리 요청들의 배치, 이를 테면, 메모리 요청들의 배치 (30) 는 다수의, 개별적인 메모리 요청들을 포함할 수도 있다. 메모리 요청들의 배치에서의 각각의 메모리 요청은 동일한 유형으로만 이루어질 수도 있다. 예를 들어, 메모리 요청들의 배치 (30) 는 복수의 판독 메모리 요청들을 포함할 수도 있다. 다른 예에서, 메모리 요청들의 배치 (30) 는 복수의 기록 메모리 요청들을 포함할 수도 있다. 그러나, 메모리 요청들의 배치 (30) 는 하나 보다 많은 유형의 메모리 요청을 포함하지 않을 수도 있다. 예를 들어, 메모리 요청들의 배치 (30) 는 판독 메모리 요청 및 기록 메모리 요청을 포함하지 않을 수 있다. 도시된 예에서, 메모리 요청 N 은 메모리 요청들의 배치 (30) 중 N 번째 넘버링된 메모리 요청을 지칭하며, 여기에서 N 은 양의 정수이다.
프로세싱 유닛 (1) 은 병렬로 복수의 스레드 그룹들을 프로세싱하도록 구성될 수도 있다. 본원에 이용된 바와 같이, 스레드 그룹은 또한, 스레드들의 그룹, 웨이브, 와프, 워크그룹 등으로서 지칭될 수도 있다. 스레드 그룹은 복수의 스레드들을 포함할 수도 있다. 일부 예들에서, 스레드 그룹에 대응하는 복수의 스레드들은 단일 명령, 이를 테면, 단일 SIMD 명령으로부터 생성될 수도 있다. 일부 예들에서, 스레드 그룹은 32 개의 스레드들을 포함할 수도 있다. 다른 예들에서, 스레드 그룹은 32 개 보다 더 많거나 또는 더 적은 스레드들을 포함할 수도 있다. 예를 들어, 스레드 그룹은 8 개의 스레드들, 16 개의 스레드들, 64 개의 스레드들, 또는 32 개 이하의 임의의 다른 개수의 스레드들을 포함할 수도 있다.
프로세싱 유닛 (1) 은 병렬로 복수의 스레드 그룹들을 실행하도록 구성될 수도 있다. 예를 들어, 프로세싱 유닛 (1) 은 하나 이상의 다른 스레드들 그룹들과 병렬로 제 1 스레드 그룹을 실행하도록 구성될 수도 있다. 이러한 예에서, 프로세싱 유닛 (1) 은 하나 이상의 다른 스레드 그룹들에 대응하는 하나 이상의 다른 스레드들과 병렬로 제 1 스레드 그룹에 대응하는 복수의 스레드들을 실행하도록 구성될 수도 있다. 예를 들어, 프로세싱 유닛 (1) 은 제 1 스레드 그룹에 대응하는 복수의 스레드들 및 제 2 스레드 그룹에 대응하는 복수의 스레드들을 실행하도록 구성될 수도 있다.
각각의 스레드 그룹에 대응하는 하나 이상의 스레드들은 프로세싱 유닛 (1) 에 의한 실행시, 요청, 이를 테면, 메모리 요청 (예를 들어, 판독 또는 기록), 또는 펜스 (예를 들어, 배리어) 요청의 생성을 가져올 수도 있다. 예를 들어, 프로세싱 유닛 (1) 은 스레드를 실행하는 것에 응답하여 메모리 요청을 생성할 수도 있다. 다른 예로서, 32 개의 스레드들의 그룹은 실행시, 32 개까지의 메모리 요청들을 생성할 수도 있다. 이 예에서, 32 개의 메모리 요청들은 복수의 판독 요청들 및 복수의 기록 요청들을 포함할 수도 있다.
프로세싱 유닛 (1) 은 메모리 요청들을 메모리 요청들의 배치들로 그룹핑하도록 구성될 수도 있다. 본원에 이용된 용어 "배치"는 메모리 요청들의 배치를 의미한다. 예를 들어, 제 1 배치에 대한 레퍼런스는 메모리 요청들의 제 1 배치를 지칭하고, 제 2 배치에 대한 레퍼런스는 메모리 요청들의 제 2 배치를 지칭한다. 프로세싱 유닛 (1) 은 메모리 요청이 기원되었던 스레드 그룹에 기초하여 그리고 메모리 요청의 요청 유형에 기초하여 메모리 요청들의 배치들을 생성하도록 구성될 수도 있다. 예를 들어, 위에 설명된 바와 같이, 프로세싱 유닛 (1) 은 복수의 스레드 그룹들을 실행하도록 구성될 수도 있고, 각각의 스레드 그룹은 하나 이상의 메모리 요청들을 생성한다. 프로세싱 유닛 (1) 은 각각의 스레드 그룹에 대응하는 메모리 요청들의 하나 이상의 배치들을 생성하도록 구성될 수도 있고, 이는 메모리 요청들의 각각의 배치가 동일한 스레드 그룹으로부터 기원하는 메모리 요청들만을 포함한다는 것을 의미한다.
일부 예들에서, 배치는 예를 들어, 메모리 요청 명령을 실행하는 스레드 그룹에서의 모든 액티브 스레드들에 의해 형성될 수도 있다 (예를 들어, 단일 SIMD 메모리 요청 명령은 스레드 그룹의 스레드들을 이용하여 병렬화된다). 일부 예들에서, 프로세싱 유닛 (1) 은 유닛이 복제되거나 또는 오버랩된 메모리 요청들을 배치에서 찾을 때 스레드 그룹에서 액티브 스레드들의 수에 비해 배치에서의 메모리 요청들의 수를 감소시키도록 구성될 수도 있다. 이러한 예들에서, 프로세싱 유닛 (1) 은 스레드 그룹에서 스레드들의 수에 비해 적은 메모리 요청들을 생성하도록 구성될 수도 있다. 이로써, 프로세싱 유닛 (1) 은 메모리 요청들이 기원하는 스레드 그룹에서 스레드들의 수에 비해 적은 메모리 요청들을 갖는 메모리 요청들의 배치를 생성 및/또는 저장하도록 구성될 수도 있다. 이 방식으로 메모리 요청들의 수 및/또는 메모리 요청들의 배치의 사이즈를 감소시키는 것에 의해, 메모리 요청들을 저장하기 위해 충돌 중재 큐에서의 더 적은 메모리 공간을 수반하는 것이 필수적이다. 따라서, 일부 예들에서, 발행하는 스레드 그룹에서 (액티브) 스레드들의 배치 수와 사이즈 사이의 1 대 1 대응성이 존재할 수도 또는 대응하지 않을 수도 있고, 여기에서, 발행된 스레드 그룹들은 메모리 요청들이 기원하는 스레드들의 그룹을 지칭한다.
메모리 요청들의 배치는 단일 유형의 메모리 요청만을 포함한다. 예를 들어, 판독 메모리 요청들의 배치는 판독 메모리 요청들만을 포함하고, 기록 메모리 요청들의 배치는 기록 메모리 요청들만을 포함한다. 따라서, 스레드들의 그룹의 실행으로부터 기원하는 복수의 판독 메모리 요청들로부터 그리고 동일한 스레드들의 그룹의 실행으로부터 기원하는 복수의 기록 메모리 요청들로부터, 프로세싱 유닛 (1) 은 판독 메모리 요청들의 하나 이상의 배치들 및 기록 메모리 요청들의 하나 이상의 배치들을 생성하도록 구성될 수도 있다.
예를 들어, 32 개의 스레드들의 제 1 그룹은 하나 이상의 판독 메모리 요청들 및/또는 하나 이상의 기록 메모리 요청들을 생성할 수도 있고, 32 개의 스레드들의 제 2 그룹은 하나 이상의 판독 메모리 요청들 및/또는 하나 이상의 기록 메모리 요청들을 생성할 수도 있다. 이러한 예에서, 32 개의 스레드들의 제 1 그룹은 복수의 판독 요청들 및 복수의 기록 요청들을 생성할 수도 있고, 32 개의 스레드들의 제 2 그룹은 복수의 판독 요청들 및/또는 복수의 기록 요청들을 생성할 수도 있다. 프로세싱 유닛 (1) 은 이 예에서, 스레드들의 제 1 그룹의 복수의 판독 메모리 요청들에 대응하는 메모리 요청들의 적어도 하나의 배치 및 스레드들의 제 1 그룹의 복수의 기록 메모리 요청들에 대응하는 메모리 요청들의 적어도 하나의 배치를 생성하도록 구성될 수도 있다. 이와 유사하게, 프로세싱 유닛 (1) 은 스레드들의 제 2 그룹의 복수의 판독 메모리 요청들에 대응하는 메모리 요청들의 적어도 하나의 배치 및 스레드들의 제 2 그룹의 복수의 기록 메모리 요청들에 대응하는 메모리 요청들의 적어도 하나의 배치를 생성하도록 구성될 수도 있다.
프로세싱 유닛 (1) 은 메모리 요청들 및/또는 메모리 요청들의 배치들을 메타데이터로 태깅하도록 구성될 수도 있다. 예를 들어, 도 4 는 프로세싱 유닛 (1) 이 메모리 요청들의 배치 (예를 들어, 메모리 요청들의 배치 (31)) 를 메타데이터로 태깅하도록 구성될 수도 있는 일 예를 예시한다. 일부 예들에서, 배치 자체를 태깅하는 것은 도 4 의 예에 도시된 바와 같이, 메모리 요청들의 배치의 시작부에 (예를 들어, 배치의 제 1 메모리 요청의 앞에, 이를 테면 전방에) 메타데이터를 추가하는 것을 포함할 수도 있다. 다른 예에서, 배치 자치를 메타데이터로 태깅하는 것은 메모리 요청들의 배치의 단부에 (예를 들어, 배치의 최종 메모리 요청 뒤에) 추가하는 것을 포함할 수도 있다. 다른 예들에서, 메타데이터는 메모리 요청들의 배치에 대응하는 헤더에서 하나 이상의 필드들에 추가될 수도 있다. 예를 들어, 메타데이터는 메모리 요청들의 배치의 캡슐화된 데이터 구조에 대응하는 헤더에서 하나 이상의 필드들에 추가될 수도 있다. 도 4 의 예에서, 메타데이터가 배치에서의 제 1 메모리 요청 전의 배치에 추가된다 (예를 들어, 태깅된다).
도 5 는 프로세싱 유닛 (1) 이 메모리 요청들의 배치 (예를 들어, 메모리 요청들의 배치 (32)) 를 메타데이터로 태깅하도록 구성될 수도 있는 다른 예를 예시한다. 일부 예들에서, 배치 자체를 메타데이터로 태깅하는 것은 도 5 의 예에서 도시된 바와 같이, 메모리 요청들의 배치에서의 제 1 메모리 요청 (예를 들어, 도 5 에 도시된 메모리 요청 1) 을 메타데이터로 태깅하는 것을 포함할 수도 있다. 일부 예들에서, 메타데이터는 메모리 요청들의 배치에서 제 1 메모리 요청의 시작부에 추가될 수도 있다. 예를 들어, 메타데이터는 제 1 메모리 요청에 대응하는 헤더에서 하나 이상의 필드들에 추가될 수도 있다.
도 6 은 프로세싱 유닛 (1) 이 메모리 요청들의 배치 (예를 들어, 메모리 요청들의 배치 (33)) 에서의 각각의 메모리 요청을 메타데이터로 태깅하도록 구성될 수도 있는 일 예를 예시한다. 일부 예들에서, 메타데이터는 메모리 요청들의 배치에서 각각의 메모리 요청의 시작부에 추가될 수도 있다. 예를 들어, 메타데이터는 각각의 메모리 요청에 대응하는 헤더에서 하나 이상의 필드들에 추가될 수도 있다. 메타데이터가 도 6 에 예시된 각각의 메모리 요청에 대한 "메타데이터"로서 도시되어 있지만, 각각의 메모리 요청에 태깅된 메타데이터는 동일할 수도 또는 동일하지 않을 수도 있다. 예를 들어, 각각의 메모리 요청에 태깅된 메타데이터는 아래 보다 자세하게 설명된 스레드 그룹 식별자를 포함할 수도 있다. 그러나, 메모리 요청들의 배치 중 제 1 메모리 요청 (메모리 요청 1) 에 태깅된 메타데이터는 또한 배치 시작 식별자를 포함할 수도 있지만, 후속하는 메모리 요청들 (예를 들어, 동일한 배치에서 제 1 메모리 요청에 후속하는 메모리 요청들) 에 태깅된 메타데이터는 배치 시작 식별자를 포함하지 않을 수도 있다. 배치 시작 식별자는 (큐 안에 저장될 때) 충돌 중재 큐에서 스레드 식별자를 선행할 수도 있고 배치 디리미터로서 서브할 수도 있다. 다른 예들에서, 마지막 메모리 요청은 배치 시작 식별자를 포함할 수도 있지만, 이전의 메모리 요청들 (예를 들어, 동일한 배치에서 최종 메모리 요청에 앞서는 메모리 요청들) 에 태깅된 메타데이터는 배치 시작 식별자를 포함하지 않을 수도 있다. 배치 시작 식별자는 배치의 최종 메모리 요청에 태깅될 수도 있어 배치 시작 식별자는 충돌 중재 큐에서 저장될 때 최종 메모리 요청 후에 위치되게 되고, 배치 디리미터로서 서브한다.
배치 시작 식별자는 아래 보다 자세하게 논의된다. 다른 예들에서, 스레드 그룹 식별자는 2 개의 목적들을 서브할 수도 있는데, 하나의 목적은 메타데이터를 뒤따르는 메모리 요청들이 기원하는 스레드들의 그룹을 식별하기 위한 것이고, 제 2 목적은 메모리 요청들의 새로운 배치의 시작을 식별하기 위한 것이다. 이러한 예들에서, 배치 시작 식별자는 아비터 (4) 가 스레드 그룹 식별자로 2 가지 일들을 결정하도록 구성되기 때문에, 메타데이터 내에 포함되지 않을 수도 있다. 스레드 그룹 식별자가 2 개의 목적들을 서브할 수도 있는 예들은 예를 들어, 도 4 및 도 5 에 대하여 설명된 예들을 포함할 수도 있다. 일부 예들에서, 메타데이터는 스레드 그룹 식별자만을 포함할 수도 있다.
일부 예들에서, 프로세싱 유닛 (1) 은 프로세싱 유닛 (1) 이 메모리 요청들의 배치를 생성할 때 본원에 설명된 바와 같이 하나 이상의 메모리 요청들 또는 메모리 요청들의 배치에 메타데이터를 태깅하도록 구성될 수도 있다. 예를 들어, 프로세싱 유닛 (1) 은 하나 이상의 메모리 요청들을 배치로 그룹핑할 때 본원에 설명된 하나 이상의 메모리 요청들 또는 메모리 요청들의 배치에 메타데이터를 태깅하도록 구성될 수도 있다.
프로세싱 유닛 (1) 은 충돌 중재 큐 (40) 에서 메모리 요청들의 배치들을 저장하도록 구성될 수도 있다. 예를 들어, 프로세싱 유닛 (1) 의 아비터 (4) 는 (예를 들어, 도 4 또는 도 5 에 대하여 설명된 방식으로) 메타데이터로 태깅되는 메모리 요청들의 배치 (30) 를 수신하도록 구성될 수도 있다. 다른 예로서, 프로세싱 유닛 (1) 의 아비터 (4) 는 (예를 들어, 도 6 에 대하여 설명된 방식으로) 메모리 요청들의 배치의 각각의 메모리 요청이 메타데이터로 태깅되는 경우 메타데이터로 태깅되는 메모리 요청들의 배치 (30) 를 수신하도록 구성될 수도 있다. 아비터 (4) 는 충돌 중재 큐 (40) 로서 지칭될 수도 있는 큐 (40) 에서 메모리 요청들의 수신된 배치를 저장하도록 구성될 수도 있다.
일부 예들에서, 프로세싱 유닛 (1)(예를 들어, 아비터 (4)) 은 배치들이 발행되는 순서로 충돌 중재 큐에서 메모리 요청들의 배치를 저장하도록 구성될 수도 있다. 일부 예들에서, 프로세싱 유닛 (1)(예를 들어, 아비터 (4)) 은 배치들이 발행되는 순서로 충돌 중재 큐에 메모리 요청들의 배치를 저장하도록 구성될 수도 있다. 이러한 예들에서, 프로세싱 유닛 (1) 은 사전-충돌 중재 큐 폴리시에 기초하여 배치들을 재정렬하도록 구성될 수도 있다. 다른 예들에서, 프로세싱 유닛 (1) 은 스레드 그룹들이 실행하도록 허용되는 순서를 중재하도록 구성되는 것에 의해, 메모리 요청들의 배치들이 충돌 중재 큐에 저장되는 순서를 제어하도록 구성될 수도 있다. 이러한 예들에서, 프로세싱 유닛 (1)(예를 들어, 아비터 (4)) 은 배치들이 발행되는 순서로 충돌 중재 큐에서 메모리 요청들의 배치를 저장하도록 구성될 수도 있다.
충돌 중재 큐 (40) 는 메모리 요청들의 배치들을 홀딩하도록 구성될 수도 있다. 예를 들어, 도 7 은 메모리 요청들의 배치들 1 내지 N 이 큐에 저장되는 충돌 중재 큐 (40) 의 일 예를 예시하며, 여기에서 N 은 메모리 요청들의 N번째 배치를 표현하며, N 은 양의 정수이다. 일 예에서, 도 4 내지 도 6 에 대하여 설명된 메모리 요청들의 배치 (30) 는 도 7 및/또는 도 8 에 예시된 메모리 요청들의 배치들 중 한 배치를 구성할 수도 있다. 다른 예에서, 도 4 내지 도 6 에 대하여 설명된 메모리 요청들의 배치 (30) 의 포맷은 메타데이터가 도 7 및/또는 도 8 에 예시된 메모리 요청들의 배치들에 대해 태깅되는 포맷을 구성할 수도 있다.
충돌 중재 큐 (40) 에 저장된 메모리 요청들의 하나 이상의 배치들은 하나 이상의 스레드 그룹들로부터 기원할 수도 있다. 예를 들어, 도 8 은 충돌 중재 큐 (40) 가 메모리 요청들의 배치들 (예를 들어, 메모리 요청들의 배치 1 내지 N) 을 저장하고 있는 일 예를 예시한다. 도 8 의 예에서, 메모리 요청들의 배치들 1 및 4 는 제 1 스레드 그룹으로부터 기원하고, 메모리 요청들의 배치 2 는 제 2 스레드 그룹들로부터 기원하고, 메모리 요청들의 배치들 3 및 5 는 제 3 스레드 그룹으로부터 기원하고, 메모리 요청들의 배치 N 은 제 4 스레드 그룹으로부터 기원한다. 충돌 중재 큐 (40) 에 저장된 메모리 요청들의 하나 이상의 배치들이 하나 이상의 스레드 그룹들로부터 기원할 수도 있는 동안, 아비터 (4) 는 충돌 중재를 수행할 때까지 메모리 요청들의 어느 배치들이 어느 스레드 그룹에 대응하는지를 알지 못할 수도 있다.
아비터 (4) 는 동일한 스레드 그룹으로부터 기원하는 메모리 요청들의 2 개 이상의 배치들 사이에 하나 이상의 충돌들 (예를 들어, 실제적 또는 잠재적 충돌들) 이 존재하는지의 여부를 결정하기 위해 충돌 중재를 수행하도록 구성될 수도 있다. 이 방식으로, 아비터 (4) 가 메모리 제어기에서 메모리 요청을 중단시키기 보다는, 메모리 요청들이 충돌 중재 큐로부터 릴리즈되지 못하도록 구성될 수도 있기 때문에, 아비터 (4) 는 효율적이고 스케일러블한 아웃-오브-오더 실행을 가능하게 하도록 구성될 수도 있다. 특정 메모리 요청이 충돌 중재 큐 (40) 에서 중단되는 동안, 아비터 (4) 는 중단된 메모리 요청에 대응하는 스레드 그룹과는 상이한 스레드 그룹에 대응하는 하나 이상의 메모리 요청들을 릴리즈 (예를 들어, 전송) 하도록 구성될 수도 있다. 다른 예로서, 아비터 (4) 가 메모리 제어기에서 메모리 요청의 배치를 중단시키기 보다는, 메모리 요청들의 배치가 충돌 중재 큐로부터 릴리즈되지 못하도록 구성될 수도 있기 때문에, 아비터 (4) 는 효율적이고 스케일러블한 아웃-오브-오더 실행을 가능하게 하도록 구성될 수도 있다. 메모리 요청들의 특정 배치가 충돌 중재 큐 (40) 에서 중단되는 동안, 아비터 (4) 는 메모리 요청의 중단된 배치에 대응하는 스레드 그룹과는 상이한 스레드 그룹에 대응하는 메모리 요청들의 하나 이상의 다른 배치들을 릴리즈 (예를 들어, 전송) 하도록 구성될 수도 있다. 메모리 요청 또는 메모리 요청들의 배치에 대응하는 스레드 그룹은 메모리 요청 또는 메모리 요청들의 배치가 기원하였던 스레드 그룹이다.
일부 예들에서, 충돌 중재는 메모리 요청들의 배치에 태깅된 메타데이터에 기초하여 충돌 중재 큐에 저장된 메모리 요청들의 배치가 기원하는 스레드 그룹을 결정하도록 아비터 (4) 가 구성되는 것을 포함할 수도 있다. 이러한 예들에서, 아비터 (4) 는 메타데이터에 포함된 스레드 그룹 식별자에 대한 이러한 결정에 기초하도록 구성될 수도 있다.
도 9 는 본 개시의 하나 이상의 기술들에 따라 충돌 중재를 수행하는 간략화된 예를 예시한다. 도 9 에 도시된 충돌 중재 큐 (40)의 예는 메모리 요청들의 3 개의 배치들을 포함하는 간략화된 예이며, 메모리 요청들의 각각의 배치는 3 개의 메모리 요청들을 포함한다. 도 9 의 예에서, 메모리 요청들의 제 1 배치는 메모리 요청들 (1-B1, 2-B1 및 3-B1) 을 포함하고, 메모리 요청들의 제 2 배치는 메모리 요청들 (1-B2, 2-B2, 및 3-B2) 을 포함하고, 메모리 요청들의 제 3 배치는 메모리 요청들 (1-B3, 2-B3, 및 3-B3) 을 포함한다. 제 1 메타데이터 (MD-B1) 는 메모리 요청들의 제 1 배치에 태깅될 수도 있고 제 2 메타데이터 (MD-B2) 는 메모리 요청들의 제 2 배치에 태깅될 수도 있고 제 3 메타데이터 (MD-B3) 는 메모리 요청들의 제 3 배치에 태깅될 수도 있다.
도 9 의 예에서, 메모리 요청들의 제 1 및 제 3 배치는 스레드들의 제 1 그룹으로부터 기원할 수도 있고, 메모리 요청들의 제 2 배치는 스레드들의 제 2 그룹으로부터 기원할 수도 있다. 아비터 (4) 는 메모리 요청들의 배치에 태깅된 메타데이터를 이용하여 메모리 요청들의 배치의 시작점을 결정하도록 구성될 수도 있다. 일부 예들에서, 메모리 요청들의 제 1, 제 2, 및 제 3 배치들에 각각 태깅된 제 1, 제 2, 및 제 3 메타데이터는 각각 배치 시작 식별자를 포함할 수도 있다. 배치 시작 식별자는 메모리 요청들의 배치의 시작부 또는 시작을 식별한다.
다른 예들에서, 메모리 요청들의 제 1, 제 2, 및 제 3 배치들에 각각 태깅된 제 1, 제 2, 및 제 3 메타데이터는 각각 배치 시작 식별자를 포함하지 않을 수도 있다. 그 대신에, 이러한 예들에서, 아비터 (4) 는 메타데이터에 포함된 스레드 그룹 식별자를 이용하여 메모리 요청들의 배치의 시작점을 결정하도록 구성될 수도 있다. 예를 들어, 메모리 요청들의 제 1, 제 2, 및 제 3 배치들에 각각 태깅된 제 1, 제 2, 및 제 3 메타데이터는 각각 스레드 그룹 식별자를 포함할 수도 있다. 스레드 그룹 식별자는 메모리 요청들의 제 1 배치가 기원하는 스레드들의 그룹을 식별할 수도 있다. 도 9 의 예에서, 메타데이터 (MD-B1 및 MD-B3) 에 포함된 스레드 그룹 식별자는 동일하고, 메타데이터 (MD-B2) 에 포함된 그룹 식별자는 메타데이터 (MD-B1 및 MD-B3) 에 포함된 스레드 그룹 식별자와는 상이하다.
스레드 그룹 식별자는 고유 식별자일 수도 있다. 스레드 그룹 식별자는 메모리 요청들의 배치 및/또는 메모리 요청들이 기원하는 스레드를 식별할 수도 있다. 일부 예들에서, 스레드 그룹은 프로세싱 유닛 (1) 의 특정 클라이언트 (예를 들어, 고정된 함수 버텍스 페치 하드웨어) 에 맵핑될 수도 있다.
일부 예들에서, 스레드 그룹 식별자는 임시 고유 식별자 또는 영구 고유 식별자일 수도 있다. 예를 들어, 스레드 그룹 식별자는 스레드 그룹 식별자의 값이 변경되지 않은 경우에도 상이한 스레드 그룹들을 고유하게 식별하도록 재이용될 수도 있는 점에서 임시로 고유할 수도 있다.
임시 고유 식별자가 의미하는 바가 무엇인지를 추가로 설명하기 위한 일 예가 설명되며, 충돌 중재 큐는 메모리 요청들의 다수의 배치들을 포함할 수도 있고, 다수의 배치들 중에서, 충돌 중재 큐는 메모리 요청들의 제 1 복수의 배치들 중 메모리 요청들의 각각의 베치가 제 1 스레드 그룹으로부터 기원함을 식별하도록 제 1 스레드 그룹 식별자로 각각 태깅된 메모리 요청들의 제 1 복수의 배치들을 포함할 수도 있다. 프로세싱 유닛 (1) 은 충돌 중재 큐가 제 1 그룹 식별자에 대응하는 어떠한 미서비스된 (예를 들어, 비송신된) 메모리 요청들을 더 이상 포함하지 않는다고 결정시, 제 1 스레드 그룹과는 상이한 스레드 그룹으로부터 기원하는 메모리 요청들의 하나 이상의 배치들에 대한 제 1 스레드 그룹 식별자를 재이용하도록 구성될 수도 있다. 예를 들어, 아비터 (4) 가 제 1 그룹 식별자로 태깅된 메모리 요청들의 각각의 배치에 대응하는 모든 메모리 요청들을 릴리즈 (예를 들어 전송) 하면, 프로세싱 유닛 (1) 은 스레드들의 제 2 그룹으로부터 기원하는 메모리 요청들의 하나 이상의 배치들을 제 1 스레드 그룹 식별자로 태깅하도록 구성될 수도 있고, 여기에서, 스레드들의 제 2 그룹은 스레드들의 제 1 그룹과는 상이하다. 이러한 예들에서, 재이용 가능 (ready-for-reuse) 플래그는 각각의 스레드 그룹 식별자와 연관될 수도 있다. 아비터 (4) 는 여기에 대응하는 스레드 그룹 식별자가 재이용 가능함 (ready for reuse) 을 나타내는 값으로 재이용 가능 플래그를 설정하도록 구성될 수도 있다. 프로세싱 유닛 (1) 은 대응하는 재이용 가능 플래그가 설정될 때 재이용 가능 플래그에 대응하는 값을 결정하고 스레드 그룹 식별자를 재이용하도록 구성될 수도 있다.
본원에 많은 예들이 도 4 및/또는 도 5 에 대응하는 태깅 방법론에 대하여 설명됨이 이해된다. 그러나, 이들 예들은 본 개시의 여러 기술들을 예시하도록 제공됨이 이해되며, 이와 같이, 도 4 에 대응하는 태깅 방법론에 대하여 설명된 예들은 태깅 방법론 자체가 상이하다는 이해 하에 도 5 및/또는 도 6 에 대응하는 태깅 방법론에 유사하게 적용됨이 이해된다. 예를 들어, 바로 위에서, 아비터 (4) 가 제 1 그룹 식별자로 태깅된 메모리 요청들의 각각의 배치에 대응하는 모든 메모리 요청들을 릴리즈 (예를 들어 전송) 하면, 프로세싱 유닛 (1) 은 스레드들의 제 2 그룹으로부터 기원하는 메모리 요청들의 하나 이상의 배치들을 제 1 스레드 그룹 식별자로 태깅하도록 구성될 수도 있고, 여기에서, 스레드들의 제 2 그룹은 스레드들의 제 1 그룹과는 상이한 것이 일 예에서 설명된다. 본 개시와 일관성있게, 아비터 (4) 가 제 1 그룹 식별자로 적어도 하나의 태깅된 메모리 요청을 포함하는 메모리 요청들의 각각의 배치에 대응하는 모든 메모리 요청들을 릴리즈 (예를 들어 전송) 하면, 프로세싱 유닛 (1) 은 스레드들의 제 2 그룹으로부터 기원하는 메모리 요청들의 배치의 하나 이상의 메모리 요청들을 제 1 스레드 그룹 식별자로 태깅하도록 구성될 수도 있고, 여기에서, 스레드들의 제 2 그룹은 스레드들의 제 1 그룹과는 상이한 것이 다른 예에서 또한 그에 따라 이해된다.
도 10 은 본 개시의 하나 이상의 기술들에 따라 충돌 중재를 수행하는 간략화된 예를 예시한다. 메타데이터 및 메모리 요청들의 배치들은 도 9 에 대하여 설명된 것과 동일하다. 그러나, 도 10 은 아비터 (4) 가 하나 이상의 포인터들을 이용하도록 구성될 수도 있음을 예시한다. 예를 들어, 아비터 (4) 는 큐에서 메모리 요청들을 거쳐 진행하도록 하나 이상의 포인터들을 이용할 수도 있다. 각각의 스레드 그룹은 일부 예들에서, 제 1 포인터 및 제 2 포인터인 2 개의 대응하는 스레드 그룹 특정 포인터들을 가질 수도 있다. 제 1 포인터는 제출 포인터 (submit pointer) 로서 지칭될 수도 있고 제 2 포인터는 완료 포인터 (done pointer) 로서 지칭될 수도 있다. 스레드 그룹-특정 포인터는 단일 스레드 그룹에서만 이용되는 포인터이다. 예를 들어, 아비터 (4) 는 특정 스레드 그룹에 대응하는 각각의 포인터가 특정 스레드 그룹과는 상이한 스레드 그룹에 대응하는 메모리 요청들을 스킵하도록 특정 스레드 그룹에 대응하여 각각의 포인터를 전진시키도록 구성될 수도 있다. 예를 들어, 도 10 에 예시된 포인터들이 아래 보다 자세하게 설명되어 있지만, 아비터 (4) 는 이들 포인터들 양쪽이 제 1 스레드 그룹으로부터 기원하지 않았던 어떠한 메모리 요청들을 스킵하도록 제출 포인터 (50A) 및 완료 포인터 (50B) 를 진행시키도록 구성될 수도 있다. 이와 유사하게, 아비터 (4) 는 이들 포인터들 양쪽이 제 2 스레드 그룹으로부터 기원하지 않은 어떠한 메모리 요청들을 스킵하도록 제출 포인터 (52A) 및 완료 포인터 (52B) 를 진행시키도록 구성될 수도 있다. 도 10 의 예는 각각의 스레드 그룹에 대하여 2 개의 포인터들을 이용하여 아비터 (4) 가 충돌 중재 큐 (40) 를 거쳐 진행할 때의 스냅샷을 도시한다.
도 10 의 예에서, 메모리 요청들의 제 1 및 제 3 배치는 스레드들의 제 1 그룹으로부터 기원할 수도 있고, 메모리 요청들의 제 2 배치는 스레드들의 제 2 그룹으로부터 기원할 수도 있다. 제출 포인터 (50A) 및 완료 포인터 (50B) 는 스레드들의 제 1 그룹에 대응할 수도 있고, 제출 포인터 (52A) 및 완료 포인터 (52B) 는 스레드들의 제 2 그룹에 대응할 수도 있다. 완료 포인터 (예를 들어, 완료 포인터들 (50A 및 52A)) 는 아비터 (4) 에 의해 충돌 중재 큐 (40) 로부터 릴리즈하는 것에 이어서, 완료 포인터와 연관된 스레드들의 그룹에 대응하여 (예를 들어, 메모리 제어기에 의해) 프로세싱이 마무리되거나 또는 달리 완료되는 최종 메모리 요청을 표시 (예를 들어, 지시) 할 수도 있다. 일부 예들에서, 판독 메모리 요청의 완료는 판독 메모리 요청에 대하여 메모리 제어기에 의해 데이터가 리턴되었을 때 (예를 들어, 프로세싱 유닛 (1) 으로 리턴되거나 또는 프로세싱 유닛 (1) 과는 상이한 상류 클라이언트로 리턴되었을 때) 를 지칭할 수도 있다. 다른 예들에서, 기록 메모리 요청의 완료는 데이터가 메모리 제어기에 의해 소모될 때를 지칭할 수도 있다. 메모리 요청의 완료시, 프로세싱 유닛 (1) 은 그 메모리 요청으로 완료 포인터를 진행시키는 것에 의해 완료로서 메모리 요청을 마킹하도록 구성될 수도 있다. 일부 예들에서, 메모리 요청들의 완료는 예를 들어, 메모리 제어기에서 아웃 오브 오더로 발생할 수도 있다. 이러한 예들에서, 본원에 설명된 완료 포인터는 완료로서 마킹된 요청들의 연속하는 시퀀스 상에서 전진할 수도 있다.
일부 예들에서, 대응하는 메몸리 요청이 릴리즈되었는지 (예를 들어, 메모리 제어기로 하류로 전송되었는지) 를 표시하는 각각의 메모리 요청에 할당된 단일 비트가 있을 수도 있다. 프로세싱 유닛 (1) 은 설정중인 (예를 들어, 1 의 값 또는 대응하는 메모리 요청이 릴리즈되었음을 표현하는 값과 등화시킨) 이러한 비트로 메모리 요청을 지시하면 제출 포인터를 전진하도록 구성될 수도 있다. 이 방식으로 (이 예에서), 프로세싱 유닛 (1) 은 충돌 중재 큐로부터 순차적으로 메모리 요청들을 릴리즈하도록 구성될 수도 있다. 예를 들어, 프로세싱 유닛 (1) 은 충돌 중재 큐에서 배치 디리미터들에 대해 체크하는 것에 의해 배치 기반으로 메모리 요청들을 순차적으로 릴리즈하도록 구성될 수도 있다. 이러한 예에서, 프로세싱 유닛 (1) 은 제출 포인터가 배치 디리미터 (예를 들어, 배치 시작 식별자) 에 도달할 때까지 충돌 중재 큐로부터 배치의 메모리 요청들을 순차적으로 릴리즈하도록 구성될 수도 있다.
도 10 의 예를 참조하여 보면, 완료 포인터 (50B) 는 메모리 요청들의 제 1 배치의 메모리 요청 (3-B1) 을 지시하고 완료 포인터 (52B) 는 메모리 요청들의 제 2 배치의 메모리 요청 (1-B2) 을 지시한다. 제출 포인터 (예를 들어, 제출 포인터들 (50A 및 52A)) 는 아비터 (4) 가 충돌 중재 큐 (40) 로부터 예를 들어, 메모리 제어기로 릴리즈하도록 스케줄링된다는 제출 포인터와 연관된 스레드들의 그룹에 대응하는 현재 메모리 요청을 표시 (예를 들어, 지시) 한다. 예를 들어, 도 10 의 예에서 제출 포인터 (50A) 는 메모리 요청들의 제 3 배치의 메모리 요청 (1-B3) 을 지시중에 있고 제출 포인터 (52A) 는 메모리 요청들의 제 2 배치의 메모리 요청 (3-B2) 을 지시중에 있다.
완료 포인터와 제출 포인터 사이의 임의의 메모리 요청은 예를 들어, 메모리 제어기에 의한 실행을 위하여 충돌 중재 큐 (40) 로부터 아비터 (4) 에 의해 실제로 릴리즈되었거나 또는 릴리즈를 위하여 클리어되었다. 예를 들어, 메모리 요청 (2-B2) 은 충돌 중재 (40) 로부터 아비터 (4) 에 이해 실제로 릴리즈되었거나 또는 릴리즈를 위하여 클리어되었을 수도 있다.
아비터는 다른 포인터들과 독립적으로 그리고 병렬로 각각의 스레드 그룹에 대응하는 포인터들을 진행시키거나 또는 달리 이동 또는 전진시키도록 구성될 수도 있다. 예를 들어, 아비터는 제출 포인터 (52A) 및 완료 포인터 (52B) 와 독립적으로 그리고 병렬로 제출 포인터 (50A) 및 완료 포인터 (50B) 를 진행하도록 구성될 수도 있다.
일부 예들에서, 아비터 (4) 는 인트라-스레드 그룹 충돌들을 방지하도록 충돌 중재를 수행하도록 구성될 수도 있다. 본원에 이용된 바와 같이, 충돌은 또한 해저드로서 지칭될 수도 있다. 아비터 (4) 는 특정 스레드 그룹에 대한 제출 포인터가, 중단된 메모리 요청으로서 지칭될 수도 있는 특정 메모리 요청을 지속하고 (stay on) 있도록 구성될 수도 있다. 일부 예들에서, 중단된 메모리 요청, 및 중단된 메모리 요청과 동일한 스레드 그룹으로부터 기원하는 충돌 중재 큐 (40) 에 저장된 임의의 후속하는 메모리 요청들은, 완료 포인터가 큐에서 중단된 메모리 요청을 선행하는 제 1 메모리 요청을 지시할 때까지 아비터 (4) 에 의해 충돌 중재 큐로부터 릴리즈되지 않을 수도 있다. 예를 들어, 도 10 의 예에서, 메모리 요청 (3-B1) 은 메모리 요청 (1-B3) 을 선행하는 제 1 메모리 요청일 수도 있다.
다른 예들에서, 특정 배치 시작 식별자가 연관된 스레드 그룹에 대응하는 임의의 후속 메모리 요청들의 릴리즈를 중단하도록 유사하게 서브할 수도 있는 배치 시작 식별자를, 메모리 요청들의 배치들에 태깅된 메타데이터가 포함하는 예들에서, 아비터 (4) 는 특정 스레드 그룹이 특정 배치 시작 식별자에서 지속하게 하도록 구성될 수도 있다. 이러한 예들에서, 완료 포인터가 큐에서 특정 배치 시작 식별자를 선행하는 제 1 메모리 요청을 지칭할 때까지 제출 포인터는 큐에서 전방으로 진행하지 않을 수도 있다. 예를 들어, 도 10 의 예에서, 메모리 요청 (3-B1) 은 메타데이터 (MD-B3) 에서 배치 시작 식별자를 선행하는 제 1 메모리 요청일 수도 있다. 제출 포인터 (50A) 는 이 예에서, 예시된 바와 같이 메모리 요청 (1-B3) 대신에 메타데이터 (MD-B3) 에서 배치 시작 식별자에서 중단될 것임이 이해된다.
아비터 (4) 는 기록 메모리 요청들의 연속 배치들을 직렬화하는 것에 의해 기록-후-기록 충돌을 식별하고 해결하도록 구성될 수도 있다. 아비터 (4) 는 판독 메모리 요청들의 배치가 이어지는 기록 요청들의 배치를 직렬화하는 것에 의해 기록-후-판독을 식별하고 해결하도록 구성될 수도 있다. 아비터 (4) 는 원자 메모리 동작들의 배치를 선행하는 비-원자 메모리 요청들의 임의의 배치와 함께 원자 메모리 요청들의 배치들을 직렬화하는 것에 더하여, 원자 메모리 요청들의 연속하는 배치들을 직렬화하는 것에 의해 원자 메모리 액세스 충돌들을 식별하고 해결하도록 구성될 수도 있다. 도 11a 내지 도 11e 는 아비터 (4) 가 가능하거나 또는 실제 충돌들을 해결하도록 구성될 수도 있는 방법의 여러 예들을 예시한다.
도 11a 내지 도 11e 각각은 단일의 스레드 그룹으로부터 기원하는 메모리 요청들의 배치들을 예시한다. 각각의 블록은 메모리 요청들의 배치가 아니고 대신에 펜스를 나타내는 펜스 블록을 제외한 메모리 요청들의 배치를 표현한다. 예를 들어, 도 11a 는 판독 메모리 요청들의 2 개의 배치들을 포함하고 이어서 기록 메모리 요청들의 2 개의 배치들을 포함하고 이어서 판독 메모리 요청들의 배치를 포함한다. 도 11a 내지 도 11g 는 이들 배치들이 충돌 중재 큐 (40) 에 나타내어지면 2 개의 예시된 배치들 간에 저장된 상이한 스레드 그룹으로부터 기원하는 메모리 요청들의 적어도 하나의 배치를 (반드시 그러한 것은 아니지만) 가질 가능성이 있다는 점에서 개념적이라는 것이 이해된다.
도 11a 의 예에서, 아비터 (4) 는 판독 요청들의 순차적 배치들에 걸쳐 그리고 기록 요청들의 제 1 배치 후에 제출 포인터를 진행시키도록 구성될 수도 있다. 그러나, 아비터 (4) 는 기록-후-기록 시나리오가 실제적 또는 잠재적 충돌을 구성할 수도 있다고 결정하도록 구성될 수도 있다. 이에 따라, 아비터 (4) 는 기록 요청들의 제 2 연속하는 배치 (배치 4) 에서 제출 포인터를 정지 (예를 들어, 중단) 하도록 구성될 수도 있다.
도 11b 의 예에서, 아비터 (4) 는 제 1 기록-후-판독 시나리오까지 제출 포인터를 진행하도록 구성될 수도 있다. 예를 들어, 아비터 (4) 는 기록-후-기록 시나리오가 실제적 또는 잠재적 충돌을 구성할 수도 있다고 결정하도록 구성될 수도 있다. 이에 따라, 아비터 (4) 는 기록 요청들의 제 2 연속하는 배치 (배치 4) 에서 제출 포인터를 정지 (예를 들어, 중단) 하도록 구성될 수도 있다.
도 11c 의 예에서, 아비터 (4) 는 배치 1 과 배치 2 사이의 기록-후-판독 충돌을 해결한 후에 배치 4 로 제출 포인터를 진행시키도록 구성될 수도 있다. 예를 들어, 아비터 (4) 는 원자 메모리 요청들의 연속하는 배치들이 실제적 또는 잠재적 충돌을 구성할 수도 있다고 결정하도록 구성될 수도 있다. 이에 따라, 아비터 (4) 는 원자 메모리 요청들의 제 1 배치 (배치 3) 에 이어서, 원자 메모리 요청들의 제 2 연속하는 배치 (배치 4) 에서 제출 포인터를 정지 (예를 들어, 중단) 시키도록 구성될 수도 있다.
도 11d 의 예에서, 아비터 (4) 는 배치 1 과 배치 2 사이의 기록-후-판독 충돌을 해결한 후에 배치 3 으로 제출 포인터를 진행시키도록 구성될 수도 있다. 예를 들어, 아비터 (4) 는 원자 메모리 요청들의 연속하는 배치들이 비-원자 메모리 요청들의 배치들과의 실제적 또는 잠재적 충돌을 구성할 수도 있다고 결정하도록 구성될 수도 있다. 이에 따라, 아비터 (4) 는 비-원자 메모리 요청들의 제 1 선행하는 배치 (배치 2) 에 이어서, 원자 메모리 요청들의 제 1 배치 (배치 3) 에서 제출 포인터를 정지 (예를 들어, 중단) 시키도록 구성될 수도 있다.
도 11e 의 예에서, 아비터 (4) 는 완료 포인터가 캐치업할 때까지 (예를 들어, 완료 포인터가 배치 2 에 도달할 때), 펜스에 대한 배치로 제출 포인터를 진행하도록 구성될 수도 있다. 일부 예들에서, 펜스는 커널-방식 (kernel-wide), 쉐이더 방식 (shader-wide) 펜스, 워크그룹 펜스 (workgroup fence), 서브그룹 펜스, 또는 임의의 다른 펜스 또는 배리어일 수도 있다. 아비터 (4) 는 완료 포인터가 펜스에 도달시 메모리 요청들의 하나 이상의 배치들을 정렬하도록 구성될 수도 있다. 일부 예들에서, 펜스는 하나 이상의 스레드 그룹들에 대응하여 하나 이상의 제출 포인터들을 정지시킬 수도 있다. 이러한 예들에서, 펜스는 또한, 펜스가 제출 포인터를 정지시키는 하나 이상의 스레드 그룹들과는 상이한 하나 이상의 스레드 그룹들에 대응하여 하나 이상의 제출 포인터들이 펜스를 통과하도록 허용할 수도 있다 (예를 들어, 펜스는 이러한 제출 포인터들을 정지시키지 않는다). 다른 예들에서, 펜스는 모든 제출 포인터들을 정지시킬 수도 있다. 특정 스레드 그룹에 대응하여 제출 포인터의 전진을 정지시키는 것에 의해, 프로세싱 유닛 (1) 은 페스에 대응하는 메모리 요청들 및/또는 배치들이 완료할 때까지 특정 스레드 그룹에 대한 다음 배치의 실행을 중단시키도록 구성된다.
프로세싱 유닛 (1) 및/또는 아비터 (4) 가 본원에 설명된 임의의 단계, 기능, 피처, 방법 등을 수행하도록 구성되는 것에 대한 레퍼런스는 일부 예들에서, 프로세싱 유닛 (1) 및/또는 아비터 (4) 가 설명된 단계, 기능, 피처, 방법 등을 일으키는 하나 이상의 명령들을 실행하도록 구성되는 것을 지칭할 수도 있음이 이해된다. 일부 예들에서, 하나 이상의 명령들은 프로세싱 유닛 (1) 및/또는 아비터 (4) 에 액세스가능한 메모리 상에 저장될 수도 있다. 일 예로서, 프로세싱 유닛 (1) 및/또는 아비터 (4) 가 본원에 설명된 임의의 단계, 기능, 피처, 방법 등을 수행하도록 구성되는 것에 대한 레퍼런스는 일부 예들에서, 임의의 연산 디바이스, 연산 유닛, 및/또는 프로세싱 유닛 (1) 의 프로세싱 엘리먼트가 설명된 단계, 기능, 피처, 방법 등을 일으키는 하나 이상의 명령들을 실행하도록 구성되는 것을 지칭할 수도 있다.
도 12 는 본 개시의 예시의 방법을 나타내는 플로우차트이다. 도 12 의 방법은 하나 이상의 프로세싱 유닛들 (1)(예를 들어, 하나 이상의 CPU들, 하나 이상의 GPU들, 하나 이상의 병렬 프로세싱 유닛들 (예를 들어, 병렬 프로세싱을 수행하도록 구성되는 임의의 프로세싱 유닛), 하나 이상의 SoC들, 또는 이들의 임의의 조합들) 에 의해 실행될 수도 있다. 도 12 는 본 개시의 하나 이상의 기술들에 부합하는 일 예의 방법을 예시한다.
프로세싱 유닛 (1) 은 메모리 요청들의 배치들을 생성하도록 구성될 수도 있다 (100). 메모리 요청들의 각각의 배치는 스레드들의 개별적인 그룹의 실행으로부터 각각 기원할 수도 있다. 일 예로서, 메모리 요청들의 10 개의 생성된 배치들 중에서, 메모리 요청들의 10 개의 배치들 중 4 개는 스레드들의 제 1 그룹으로부터 기원할 수도 있고, 메모리 요청들의 10 개의 생성된 배치들 중 2 개는 스레드들의 제 2 그룹으로부터 기원할 수도 있고, 메모리 요청들의 10 개의 생성된 배치들 중 2 개는 스레드들의 제 3 그룹으로부터 기원할 수도 있고, 메모리 요청들의 10 개의 생성된 배치들 중 1 개는 스레드들의 제 4 그룹으로부터 기원할 수도 있고, 메모리 요청들의 10 개의 생성된 배치들 중 1 개는 스레드들의 제 2 그룹으로부터 기원할 수도 있다. 따라서, 메모리 요청들의 각각의 배치가 스레드들의 개별적인 그룹의 실행으로부터 각각 기원한다는 것은 스레드들의 배치가 스레드들의 단일의 그룹으로부터 기원하고 있음을 의미함이 이해된다.
일부 예들에서, 프로세싱 유닛 (1) 은 스레드들의 그룹을 실행하는 것에 의해 메모리 요청들의 배치를 생성하도록 구성될 수도 있다. 예를 들어, 스레드들의 그룹의 각각의 스레드는 프로세싱 유닛 (1) 의 프로세싱 엘리먼트에 의해 실행될 수도 있다. 스레드들의 그룹의 각각의 스레드는 프로세싱 유닛 (1) 에 의해 병렬로 실행될 수도 있다. 예를 들어, 스레드들의 그룹이 32 개의 스레드들을 포함하는 경우, 32 개의 스레드들 각각은 프로세싱 유닛 (1) 의 상이한 프로세싱 엘리먼트 상에서 병렬로 실행될 수도 있다. 일부 예들에서, 프로세싱 엘리먼트는 프로세싱 유닛 (1) 의 연산 유닛의 부분으로서 고려될 수도 있다. 프로세싱 유닛 (1) 은 복수의 연산 유닛들을 포함할 수도 있고, 각각의 연산 유닛은 복수의 프로세싱 엘리먼트들을 포함한다.
프로세싱 엘리먼트에 의한 스레드의 실행은 메모리 요청의 생성을 가져올 수도 있다. 일부 예들에서, 프로세싱 엘리먼트는 메모리 요청을 메타데이터로 태깅하고 메타데이터로 태깅된 메모리 요청을 충돌 중재 큐 (예를 들어, 충돌 중재 큐 (40)) 로 전송하도록 구성될 수도 있다. 다른 예들에서, 프로세싱 엘리먼트는 메모리 요청을 메타데이터로 태깅하고 메타데이터로 태깅된 메모리 요청을 프로세싱 유닛 (1) 의 아비터 (예를 들어, 아비터 (4)) 로 전송하도록 구성될 수도 있다. 이러한 예들에서, 아비터는 충돌 중재 큐 (예를 들어, 충돌 중재 큐 (40)) 에 수신된 메모리 요청 및 메타데이터를 저장하도록 구성될 수도 있다. 다른 예들에서, 프로세싱 엘리먼트는 프로세싱 유닛 (1) 의 아비터 (예를 들어, 아비터 (4)) 에 메모리 요청을 전송하도록 구성될 수도 있다. 이러한 예들에서, 아비터는 수신된 메모리 요청을 메타데이터로 태깅하고 충돌 중재 큐 (예를 들어, 충돌 중재 큐 (40)) 에 수신된 메모리 요청 및 메타데이터를 저장하도록 구성될 수도 있다. 다른 예들에서, 프로세싱 유닛 (1) 은 다수의 스레드 그룹들을 실행하도록 구성될 수도 있고 각각의 그룹은 SIMD 명령들을 실행시킨다. 다수의 스레드 그룹들이 메모리 액세스 SIMD 명령들을 실행하는 것에 의해, 프로세싱 유닛 (1) 은 (예를 들어, 중재 프로세스를 통하여) 스레드 그룹을 선택하도록 구성될 수도 있다. 프로세싱 유닛 (1) 은 선택된 스레드 그룹의 스레드들로부터 메모리 요청들의 세트를 생성하도록 구성될 수도 있다. 일부 예들에서, 프로세싱 유닛 (1) 은 선택된 스레드 그룹의 스레드들의 수를 감소시키기 위해 선택된 스레드 그룹의 스레드들을 결합 및 합체하도록 구성될 수도 있다. 프로세싱 유닛 (1) 은 선택된 스레드 그룹의 스레드들을 실행하도록 구성될 수도 있고 (예를 들어, 모든 스레드들 또는 감소된 수는 스레드들을 결합 및/또는 합체하는 것으로부터 기인한다) 그리고 메모리 요청들의 결과적인 세트는 선택된 스레드 그룹 ID (선택된 스레드 그룹에 대한 스레드 그룹 식별자) 로 태깅될 수도 있다. 그 후, 메모리 요청들의 배치는 메모리 요청들의 배치를 중재하기 위하여 예를 들어, 아비터 (4) 로 그리고/또는 충돌 중재 큐 (예를 들어, 충돌 중재 큐 (40)) 로 전송될 수도 있다. 메모리 요청들의 배치는 예를 들어, 배치 식별자, 이를 테면, 배치 디리미터 토큰으로서 또한 지칭될 수도 있는 본원에 설명된 배치 시작 식별자에 의해 범위가 규정될 수도 있다. 배치 식별자는 충돌 중재 큐에 저장될 수도 있다.
프로세싱 유닛 (1) 은 메모리 요청들의 배치들 중 메모리 요청들의 제 1 배치를 제 1 메타데이터로 태깅하도록 구성될 수도 있다 (102). 제 1 메타데이터는 메모리 요청들의 제 1 배치가 기원하는 스레드들의 그룹을 식별하는 데이터를 포함할 수도 있다. 메모리 요청들의 제 1 배치가 기원하는 스레드들의 그룹은 스레드들의 제 1 그룹일 수도 있다. 프로세싱 유닛 (1) 은 메모리 요청들의 배치들 중 메모리 요청들의 제 2 배치를 제 2 메타데이터로 태깅하도록 구성될 수도 있다 (104). 제 2 메타데이터는 메모리 요청들의 제 2 배치가 기원하는 스레드들의 그룹을 식별하는 데이터를 포함할 수도 있다. 메모리 요청들의 제 2 배치가 기원하는 스레드들의 그룹은 스레드들의 제 1 그룹일 수도 있다. 프로세싱 유닛 (1) 은 메모리 요청들의 각각의 배치가 기원하는 스레드들의 그룹을 식별하는 메타데이터로 메모리 요청들의 배치를 태깅하도록 구성될 수도 있음이 이해된다.
프로세싱 유닛 (1) 은 메모리 요청들의 제 1 배치의 임의의 메모리 요청을 제 1 메모리 또는 메모리 제어기로 전송하기 전에, 메모리 요청들의 제 1 배치 및 제 1 메타데이터를 충돌 중재 큐에 저장하도록 구성될 수도 있다 (106). 프로세싱 유닛 (1) 은 메모리 요청들의 제 2 배치의 임의의 메모리 요청을 제 1 메모리 또는 메모리 제어기로 전송하기 전에, 메모리 요청들의 제 2 배치 및 제 2 메타데이터를 충돌 중재 큐에 저장하도록 구성될 수도 있다 (108). 일부 예들에서, 제 1 메모리는 프로세싱 유닛 (1) 의 외부에 있는 임의의 메모리 (예를 들어, 외부 메모리 (5A)) 를 포함할 수도 있다. 일부 예들에서, 메모리 제어기는 제 1 메모리에 통신가능하게 커플링된 임의의 메모리 제어기 (예를 들어, 제 1 메모리가 외부 메모리 (5A) 인 예에서 메모리 제어기 (5B)) 를 포함할 수도 있다.
프로세싱 유닛 (1) 은 충돌 중재를 수행하도록 구성될 수도 있다 (110). 예를 들어, 프로세싱 유닛 (1) 은 제 1 및 제 2 메타데이터를 이용하여 충돌 중재를 수행하도록 구성될 수도 있다. 다른 예로서, 프로세싱 유닛 (1) 은 제 1 메타데이터 및 제 2 메타데이터를 이용하여, 충돌 중재 큐에 저장된 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하도록 구성될 수도 있다. 본원에 이용된 바와 같이, 스레드들의 동일한 그룹으로부터 기원하는 메모리 요청들의 2 개의 배치들 사이의 충돌 중재를 수행하는 것에 대한 레퍼런스는 메모리 요청들의 2 개의 배치들이 기원하는 스레드들의 그룹과는 상이한 스레드들의 그룹으로부터 기원하는 충돌 중재 큐에 저장된 메모리 요청들의 임의의 다른 배치를 고려함이 없이 (예를 들어, 무시하거나 또는 스킵하는 것) 메모리 요청들의 2 개의 배치들 사이에 충돌 중재를 수행하는 것을 지칭한다. 예를 들어, 위에 설명된 바와 같이, 프로세싱 유닛 (1) 은 제 1 메타데이터 및 제 2 메타데이터를 이용하여, 충돌 중재 큐에 저장된 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하도록 구성될 수도 있다. 본원에 이용된 바와 같이, 이는 메모리 요청들의 제 1 배치 및 제 2 배치가 기원하는 스레드들의 그룹과는 상이한 스레드들의 그룹으로부터 기원하는 충돌 중재 큐에 저장된 메모리 요청들의 임의의 다른 배치를 고려함이 없이 (예를 들어, 무시하거나 또는 스킵하는 것) 메모리 요청들의 제 1 배치와 제 2 배치 사이에 충돌 중재를 수행하는 것을 의미함이 이해된다.
이러한 예들에서, 메모리 요청들의 제 2 배치는 메모리 요청들의 제 1 배치 후에 충돌 중재 큐에 저장될 수도 있다. 일부 예들에서, 충돌 중재 큐에 저장된 메모리 요청들의 적어도 하나의 다른 배치는 스레드들의 제 1 그룹과는 상이한 스레드들의 적어도 하나의 그룹으로부터 기원한다. 이러한 예들에서, 충돌 중재 큐에 저장된 메모리 요청들의 적어도 하나의 다른 배치는 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에 저장될 수도 있다.
일부 예들에서, 프로세싱 유닛 (1) 은 제 1 메타데이터를 이용하여, 메모리 요청들의 제 1 배치가 스레드들의 제 1 그룹으로부터 기원한다고 결정하고, 그리고 제 2 메타데이터를 이용하여, 메모리 요청들의 제 2 배치가 스레드들의 제 1 그룹으로부터 기원한다고 결정하도록 구성되는 것에 의해, 충돌 중재 큐에 저장된 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하도록 구성될 수도 있다. 예를 들어, 프로세싱 유닛 (1) 은 제 1 메타데이터를 이용하여, 메모리 요청들의 제 1 배치가 기원하는 스레드들의 그룹을 식별하는 데이터, 및 제 2 메타데이터를 이용하여, 메모리 요청들의 제 2 배치가 기원하는 스레드들의 그룹을 식별하는 데이터가 매칭한다고 결정하도록 구성되는 것에 의해, 충돌 중재 큐에 저장된 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하도록 구성될 수도 있다. 이러한 데이터의 매칭은 메모리 요청들의 2 개의 배치들 (예를 들어, 메모리 요청들의 제 1 배치 및 제 2 배치) 이 스레드들의 동일한 그룹 (이 예에서는 제 1 스레드 그룹) 으로부터 기원함을 표시한다.
일부 예들에서, 메모리 요청들의 제 1 배치가 기원하는 스레드들의 그룹을 식별하는 데이터는 제 1 스레드 그룹 식별자이고, 메모리 요청들의 제 2 배치가 기원하는 스레드들의 그룹을 식별하는 데이터는 제 1 스레드 그룹 식별자이다. 이러한 예들에서, 프로세싱 유닛 (1) 은 메모리 요청들의 제 1 배치에 태깅된 스레드 그룹 식별자가 메모리 요청들의 제 2 배치에 태깅된 스레드 그룹 식별자에 매칭한다고 결정하도록 구성되는 것에 의해, 충돌 중재 큐에 저장된 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하도록 구성될 수도 있다. 2 개의 배치들 사이의 이러한 데이터 (예를 들어, 스레드 그룹 식별자) 의 매칭은 메모리 요청들의 2 개의 배치들 (예를 들어, 메모리 요청들의 제 1 배치 및 제 2 배치) 이 스레드들의 동일한 그룹 (이 예에서는 제 1 스레드 그룹) 으로부터 기원함을 표시한다.
일부 예들에서, 프로세싱 유닛 (1) 은 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서 프로세싱 유닛 (1) 에 의해 해결될 충돌이 존재하는지의 여부를 결정하도록 구성되는 것에 의해 충돌 중재 큐에 저장된 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하도록 구성될 수도 있다. 프로세싱 유닛 (1) 은 메모리 요청들의 제 1 배치와 제 2 배치가 스레드들의 동일한 그룹으로부터 기원하는 경우에서만 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서 프로세싱 유닛 (1) 에 의해 해결될 충돌이 존재하는지의 여부를 결정하도록 구성될 수도 있다. 이에 따라, 프로세싱 유닛 (1) 은 메모리 요청들의 제 1 배치 및 제 2 배치가 스레드들의 동일한 그룹으로부터 기원한다고 결정하는 것에 기초하여 (예를 들어, 스레드들의 제 1 배치 및 제 2 배치가 제 1 스레드 그룹으로부터 기원한다고 결정하는 것에 기초하여), 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서 프로세싱 유닛 (1) 에 의해 해결될 충돌이 존재하는지의 여부를 결정하도록 구성될 수도 있다.
일부 예들에서, 프로세싱 유닛 (1) 은 충돌 중재 큐에 저장된 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하기 전에, 수행하는 동안에 그리고/또는 수행한 후에, 충돌 중재 큐로부터 제 1 메모리 또는 메모리 제어기로 메모리 요청들의 제 1 배치의 하나 이상의 메모리 요청들을 전송하도록 구성될 수도 있다. 예를 들어, 프로세싱 유닛 (1) 은 충돌 중재 큐에 저장된 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하기 전에, 충돌 중재 큐로부터 제 1 메모리 또는 메모리 제어기로 메모리 요청들의 제 1 배치의 전부 또는 전부 이하 (예를 들어, 하나 이상) 의 메모리 요청들을 전송하도록 구성될 수도 있다. 다른 예로서, 프로세싱 유닛 (1) 은 충돌 중재 큐에 저장된 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하는 동안, 충돌 중재 큐로부터 제 1 메모리 또는 메모리 제어기로 메모리 요청들의 제 1 배치의 전부 또는 전부 이하 (예를 들어, 하나 이상) 의 메모리 요청들을 전송하도록 구성될 수도 있다. 다른 예로서, 프로세싱 유닛 (1) 은 충돌 중재 큐에 저장된 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행한 후에, 충돌 중재 큐로부터 제 1 메모리 또는 메모리 제어기로 메모리 요청들의 제 1 배치의 전부 또는 전부 이하 (예를 들어, 하나 이상) 의 메모리 요청들을 전송하도록 구성될 수도 있다.
다른 예로서, 프로세싱 유닛 (1) 은 충돌 중재 큐에 저장된 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하기 전에, 수행하는 동안, 그리고 수행한 후에, 충돌 중재 큐로부터 제 1 메모리 또는 메모리 제어기로 메모리 요청들의 제 1 배치의 적어도 하나의 메모리 요청들을 전송하도록 구성될 수도 있다. 이러한 예에서, 적어도 하나의 메모리 요청 (예를 들어, 제 1 메모리 요청) 은 충돌 중재를 수행하기 전에 전송되고, 적어도 하나의 메모리 요청 (예를 들어, 제 2 메모리 요청) 은 충돌 중재를 수행하는 동안에 전송되고, 적어도 하나의 메모리 요청 (예를 들어, 제 3 메모리 요청) 은 충돌 중재를 수행한 후에 전송됨이 이해된다. 다른 예로서, 프로세싱 유닛 (1) 은 충돌 중재 큐에 저장된 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하는 동안에 그리고 수행한 후에, 충돌 중재 큐로부터 제 1 메모리 또는 메모리 제어기로 메모리 요청들의 제 1 배치의 적어도 하나의 메모리 요청들을 전송하도록 구성될 수도 있다. 이러한 예에서, 적어도 하나의 메모리 요청 (예를 들어, 제 1 메모리 요청) 은 충돌 중재를 수행하는 동안에 전송되고, 적어도 하나의 메모리 요청 (예를 들어, 제 2 메모리 요청) 은 충돌 중재를 수행한 후에 전송됨이 이해된다.
본원에 이용된 바와 같이 용어 충돌은 프로세싱 유닛 (1) 이 해결하도록 구성되는 충돌을 지칭할 수도 있다. 용어 충돌은 일부 예들에서, 실제 충돌 또는 잠재적 충돌을 지칭할 수도 있다. 예를 들어, 실제 충돌은 시퀀스 내의 메모리 요청들의 순서를 변경하는 것이 시퀀스가 영향을 주는 메모리 로케이션들의 세트 상의 시퀀스의 영향을 변경하는 상황에 대응할 수도 있다. 이러한 예에서, 진행하도록 허용되면 (예를 들어, 본원에 설명된 기술에 의해 억제되지 않으면) 실제 충돌은 메모리 요청들의 정렬이 유지되면 메모리 로케이션들의 세트에 달리 저장되는 것과는 상이한, 메모리 로케이션들의 세트에서 저장된 값들을 가져올 수도 있다. 다른 예로서, 잠재적 충돌은 시퀀스 내의 메모리 요청들의 순서를 변경하는 것이 실제 충돌을 일으킬 수도 있는 상황, 이를 테면, 참여하는 메모리 요청들의 파라미터들 (예를 들어, 메모리 요청들에 의해 특정된 어드레스) 의 특정 조합이 발생할 때의 상황에 대응할 수도 있다. 일부 예들에서, 프로세싱 유닛 (1) 은 본원에 개시된 기술에 따라 메모리 요청들 및/또는 메모리 요청들의 배치들 사이에 충돌이 있다고 결정시, 메모리 요청들의 재정렬을 억제할 수도 있다. 예를 들어, 프로세싱 유닛 (1) 은 충돌이 존재한다고 결정시 특정 스레드 그룹에 대응하는 메모리 요청들의 하나 이상의 배치들 및/또는 하나 이상의 메모리 요청들의 릴리즈를 중단하도록 구성될 수도 있다. 중단 동안에, 프로세싱 유닛 (1) 은 충돌이 존재하지 않는다고 결정시 상이한 스레드 그룹에 대응하는 메모리 요청들의 하나 이상의 배치들 및/또는 하나 이상의 메모리 요청들을 릴리즈하도록 구성될 수도 있다.
일부 예들에서, 프로세싱 유닛 (1) 은 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서 프로세싱 유닛 (1) 에 의해 해결될 충돌이 없다고 결정시, 충돌 중재 큐로부터 제 1 메모리 또는 메모리 제어기로 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치를 전송하도록 구성되는 것에 의해, 충돌 중재 큐에 저장된 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하도록 구성될 수도 있다. 예를 들어, 프로세싱 유닛 (1) 은 메모리 요청들의 제 1 배치의 메모리 요청들을 전송하고 그리고, 메모리 요청들의 제 1 배치의 각각의 메모리 요청이 실행되었다는 것을 보장하도록 중단없이 메모리 요청들의 제 2 배치를 전송하는 것에 의해 충돌 중재 큐를 통과하여 진행하도록 구성될 수도 있다.
일부 예들에서, 프로세싱 유닛 (1) 은 충돌 중재 큐에 이들이 저장되는 순서로 (예를 들어, 스레드 그룹에 대하여 선입 선출 방식에 따라) 동일한 스레드 그룹으로부터 기원하는 메모리 요청들을 전송하도록 구성될 수도 있다. 본원에 설명된 바와 같이, 프로세싱 유닛 (1) 은 충돌의 경우에 중단하는 것에 의해 메모리 요청들의 전송을 인터럽트하도록 구성될 수도 있다. 충돌의 경우에, 중단이 메모리 요청들의 배치에 대하여 발생하는 경우에도, 그리고 메모리 요청들의 중단된 배치에 대응하여 스레드 그룹과는 상이한 스레드 그룹으로부터 기원하는 메모리 요청들의 상이한 배치로부터의 메모리 요청들이 전송될 수도 있는 경우에도, 프로세싱 유닛 (1) 은 중단을 벗어나거나 또는 달리 제거시, 충돌 중재 큐에 이들이 저장되는 순서로 (예를 들어, 스레드 그룹에 대하여 선입 선출 방식에 따라) 동일한 스레드 그룹으로부터 기원하는 메모리 요청들의 전송을 계속하도록 구성될 수도 있다.
일부 예들에서, 프로세싱 유닛 (1) 은 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서 프로세싱 유닛 (1) 에 의해 해결될 충돌이 없다고 결정시, 프로세싱이 메모리 요청들의 제 1 배치의 모든 메모리 요청들에 대해 완료될 때까지 메모리 요청들의 제 2 배치를 충돌 중재 큐로부터 제 1 메모리 또는 상기 메모리 제어기로 전송하는 것을 중단하지 않도록 구성되는 것에 의해 충돌 중재 큐에 저장된 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하도록 구성될 수도 있다.
일부 예들에서, 프로세싱 유닛 (1) 은 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서 프로세싱 유닛 (1) 에 의해 해결될 충돌이 있다고 결정시, 프로세싱이 메모리 요청들의 제 1 배치의 모든 메모리 요청들에 대해 완료될 때까지 메모리 요청들의 제 2 배치를 충돌 중재 큐로부터 제 1 메모리 또는 상기 메모리 제어기로 전송하는 것을 중단하도록 구성되는 것에 의해 충돌 중재 큐에 저장된 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하도록 구성될 수도 있다. 복수의 예들에 대하여 위에 설명된 바와 같이, 프로세싱 유닛 (1) 은 충돌 중재 큐에 저장된 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하기 전에, 수행하는 동안에 그리고/또는 수행한 후에, 메모리 요청들의 제 1 배치의 하나 이상의 메모리 요청들을 충돌 중재 큐로부터 제 1 메모리 또는 메모리 제어기로 전송하도록 구성될 수도 있다. 일부 예들에서, 프로세싱 유닛 (1) 은 스레드들의 제 1 그룹으로부터 기원하는 메모리 요청들의 제 2 배치의 전송을 중단한 후에 그리고 스레드들의 제 1 그룹으로부터 기원하는 메모리 요청들의 제 2 배치를 제 1 메모리 또는 메모리 제어기로 전송하기 전에 스레드들의 제 2 그룹으로부터 기원하는 메모리 요청들의 제 3 배치를 제 1 메모리 또는 메모리 제어기로 전송하도록 구성될 수도 있다.
일부 예들에서, 프로세싱 유닛 (1) 은 메모리 요청들의 배치 유형에 기초하여 메모리 요청들의 2 개의 배치들 사이에 충돌이 있는지의 여부를 결정하도록 구성될 수도 있다. 본원에 이용된 바와 같이, 용어 배치 유형은 메모리 요청들의 특정 배치가 포함하는 메모리 요청들의 유형을 지칭할 수도 있다. 예를 들어, 판독 메모리 요청들의 배치는 판독의 배치 유형을 가질 것이다. 다른 예로서, 기록 메모리 요청들의 배치는 기록의 배치 유형을 가질 것이다. 프로세싱 유닛 (1) 은 메모리 요청들의 배치의 배치 유형을 결정하도록 구성될 수도 있다. 예를 들어, 프로세싱 유닛 (1) 은 메모리 요청이 발생되는 스레드에 대응하는 동작 유형을 결정하는 것에 의해 메모리 요청들의 배치의 배치 유형을 결정하도록 구성될 수도 있다. 다른 예로서, 예를 들어, 프로세싱 유닛 (1) 은 메모리 요청의 발생을 야기하는 SIMD 명령에 대응하여 동작 유형을 결정하는 것에 의해 메모리 요청들의 배치의 배치 유형을 결정하도록 구성될 수도 있다.
예를 들어, 프로세싱 유닛 (1) 은 메모리 요청들의 제 1 배치의 배치 유형과 메모리 요청들의 제 2 배치의 배치 유형에 기초하여 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서 프로세싱 유닛 (1) 에 의해 해결될 충돌이 존재하는지의 여부를 결정하도록 구성될 수도 있다. 이러한 예에서, 프로세싱 유닛 (1) 은 메모리 요청들의 제 1 배치의 배치 유형이 기록이고 메모리 요청들의 제 2 배치의 배치 유형이 기록일 때 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서 프로세싱 유닛 (1) 에 의해 해결될 충돌이 있다고 결정하도록 구성될 수도 있다. 다른 예로서, 프로세싱 유닛 (1) 은 메모리 요청들의 제 1 배치의 배치 유형이 판독이고 메모리 요청들의 제 2 배치의 배치 유형이 판독일 때, 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서 프로세싱 유닛 (1) 에 의해 해결될 충돌이 있다고 결정하도록 구성될 수도 있고, 메모리 요청들의 제 2 배치는 메모리 요청들의 제 1 배치 후에 상기 충돌 중재 큐에 포지셔닝된다.
도 12 에 대하여 설명된 메모리 요청들의 제 1 및 제 2 배치들은 예들임이 이해된다. 위에 설명된 바와 같이, 프로세싱 유닛 (1) 은 메모리 요청들의 각각의 배치가 기원하는 스레드들의 그룹을 식별하는 메타데이터로 메모리 요청들의 배치를 태깅하도록 구성될 수도 있다. 메타데이터는 메모리 요청들의 특정 배치가 기원하는 스레드들의 그룹을 식별하는 데이터를 포함할 수도 있다.
예를 들어, 프로세싱 유닛 (1) 은 메모리 요청들의 배치들 중 메모리 요청들의 제 3 배치를 제 3 메타데이터로 태깅하도록 구성될 수도 있다. 제 3 메타데이터는 메모리 요청들의 제 3 배치가 기원하는 스레드들의 그룹을 식별하는 데이터를 포함할 수도 있다. 메모리 요청들의 제 3 배치가 기원하는 스레드들의 그룹은 스레드들의 제 1 그룹일 수도 있다. 이 예에서, 프로세싱 유닛 (1) 은 메모리 요청들의 제 3 배치의 임의의 메모리 요청을 제 1 메모리 또는 메모리 제어기로 전송하기 전에, 메모리 요청들의 제 3 배치 및 제 3 메타데이터를 충돌 중재 큐에 저장하도록 구성될 수도 있다. 메모리 요청들의 제 2 배치는 메모리 요청들의 제 1 배치 후에 충돌 중재 큐에 저장될 수도 있고, 메모리 요청들의 제 3 배치는 메모리 요청들의 제 2 배치 후에 충돌 중재 큐에 저장될 수도 있다. 프로세싱 유닛 (1) 은 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하는 것과 관련하여 본원에 설명된 것과 동일한 방식으로, 제 2 메타데이터 및 제 3 메타데이터를 이용하여, 충돌 중재 큐에 저장된 메모리 요청들의 제 2 배치와 메모리 요청들의 제 3 배치 사이에서만 충돌 중재를 수행하도록 구성될 수도 있다. 일부 예들에서, 프로세싱 유닛 (1) 은 충돌 중재 큐에 저장된 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행한 후에, 충돌 중재 큐에 저장된 상기 메모리 요청들의 제 2 배치와 메모리 요청들의 제 3 배치 사이에서만 충돌 중재를 수행하도록 구성될 수도 있다. 다른 예들에서, 프로세싱 유닛 (1) 은 충돌 중재 큐에 저장된 상기 메모리 요청들의 제 2 배치와 메모리 요청들의 제 3 배치 사이에서만 충돌 중재, 및 충돌 중재 큐에 저장된 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 병행하여 수행하도록 구성될 수도 있다.
이전 문단에서 전술한 예들에서, 프로세싱 유닛 (1) 은 제 2 메타데이터를 이용하여, 메모리 요청들의 제 1 배치가 스레드들의 제 1 그룹으로부터 기원한다고 결정하고, 그리고 제 3 메타데이터를 이용하여, 메모리 요청들의 제 2 배치가 스레드들의 제 1 그룹으로부터 기원한다고 결정하도록 구성되는 것에 의해, 충돌 중재 큐에 저장된 메모리 요청들의 제 2 배치와 메모리 요청들의 제 3 배치 사이에서만 충돌 중재를 수행하도록 구성될 수도 있다. 예를 들어, 프로세싱 유닛 (1) 은 메모리 요청들의 제 2 배치가 기원하는 스레드들의 그룹을 식별하는 데이터, 및 메모리 요청들의 제 3 배치가 기원하는 스레드들의 그룹을 식별하는 데이터가 매칭한다고 결정하도록 구성되는 것에 의해, 충돌 중재 큐에 저장된 메모리 요청들의 제 2 배치와 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하도록 구성될 수도 있다. 이러한 데이터의 매칭은 메모리 요청들의 2 개의 배치들 (예를 들어, 메모리 요청들의 제 2 배치 및 제 3 배치) 이 스레드들의 동일한 그룹 (이 예에서는 제 1 스레드 그룹) 으로부터 기원함을 표시한다.
일부 예들에서, 메모리 요청들의 제 2 배치가 기원하는 스레드들의 그룹을 식별하는 데이터는 위에 설명된 바와 같이 제 1 스레드 그룹 식별자이고, 메모리 요청들의 제 3 배치가 기원하는 스레드들의 그룹을 식별하는 데이터는 제 1 스레드 그룹 식별자이다. 이러한 예들에서, 프로세싱 유닛 (1) 은 메모리 요청들의 제 2 배치에 태깅된 스레드 그룹 식별자가 메모리 요청들의 제 3 배치에 태깅된 스레드 그룹 식별자에 매칭한다고 결정하도록 구성되는 것에 의해, 충돌 중재 큐에 저장된 메모리 요청들의 제 2 배치와 메모리 요청들의 제 3 배치 사이에서만 충돌 중재를 수행하도록 구성될 수도 있다. 2 개의 배치들 사이의 이러한 데이터 (예를 들어, 스레드 그룹 식별자) 의 매칭은 메모리 요청들의 2 개의 배치들 (예를 들어, 메모리 요청들의 제 2 배치 및 제 3 배치) 이 스레드들의 동일한 그룹 (이 예에서는 제 1 스레드 그룹) 으로부터 기원함을 표시한다.
일부 예들에서, 프로세싱 유닛 (1) 은 메모리 요청들의 제 2 배치와 메모리 요청들의 제 3 배치 사이에서 프로세싱 유닛 (1) 에 의해 해결될 충돌이 존재하는지의 여부를 결정하도록 구성되는 것에 의해 충돌 중재 큐에 저장된 메모리 요청들의 제 2 배치와 메모리 요청들의 제 3 배치 사이에서만 충돌 중재를 수행하도록 구성될 수도 있다. 프로세싱 유닛 (1) 은 메모리 요청들의 제 2 배치와 제 3 배치가 스레드들의 동일한 그룹으로부터 기원하는 경우에서만 메모리 요청들의 제 2 배치와 메모리 요청들의 제 3 배치 사이에서 프로세싱 유닛 (1) 에 의해 해결될 충돌이 존재하는지의 여부를 결정하도록 구성될 수도 있다. 이에 따라, 프로세싱 유닛 (1) 은 메모리 요청들의 제 2 배치 및 제 3 배치가 스레드들의 동일한 그룹으로부터 기원한다고 결정하는 것에 기초하여 (예를 들어, 스레드들의 제 2 배치 및 제 3 배치가 제 1 스레드 그룹으로부터 기원한다고 결정하는 것에 기초하여), 메모리 요청들의 제 2 배치와 메모리 요청들의 제 3 배치 사이에서 프로세싱 유닛 (1) 에 의해 해결될 충돌이 존재하는지의 여부를 결정하도록 구성될 수도 있다.
일부 예들에서, 프로세싱 유닛 (1) 은 충돌 중재 큐에 저장된 메모리 요청들의 제 2 배치와 메모리 요청들의 제 3 배치 사이에서만 충돌 중재를 수행하기 전에, 수행하는 동안에 그리고/또는 수행한 후에, 충돌 중재 큐로부터 제 1 메모리 또는 메모리 제어기로 메모리 요청들의 제 2 배치의 하나 이상의 메모리 요청들을 전송하도록 구성될 수도 있다. 예를 들어, 프로세싱 유닛 (1) 은 충돌 중재 큐에 저장된 메모리 요청들의 제 2 배치와 메모리 요청들의 제 3 배치 사이에서만 충돌 중재를 수행하기 전에, 충돌 중재 큐로부터 제 1 메모리 또는 메모리 제어기로 메모리 요청들의 제 2 배치의 전부 또는 전부 이하 (예를 들어, 하나 이상) 의 메모리 요청들을 전송하도록 구성될 수도 있다. 다른 예로서, 프로세싱 유닛 (1) 은 충돌 중재 큐에 저장된 메모리 요청들의 제 2 배치와 메모리 요청들의 제 3 배치 사이에서만 충돌 중재를 수행하는 동안, 충돌 중재 큐로부터 제 1 메모리 또는 메모리 제어기로 메모리 요청들의 제 2 배치의 전부 또는 전부 이하 (예를 들어, 하나 이상) 의 메모리 요청들을 전송하도록 구성될 수도 있다. 다른 예로서, 프로세싱 유닛 (1) 은 충돌 중재 큐에 저장된 메모리 요청들의 제 2 배치와 메모리 요청들의 제 3 배치 사이에서만 충돌 중재를 수행한 후에, 충돌 중재 큐로부터 제 1 메모리 또는 메모리 제어기로 메모리 요청들의 제 2 배치의 전부 또는 전부 이하 (예를 들어, 하나 이상) 의 메모리 요청들을 전송하도록 구성될 수도 있다.
다른 예로서, 프로세싱 유닛 (1) 은 충돌 중재 큐에 저장된 메모리 요청들의 제 2 배치와 메모리 요청들의 제 3 배치 사이에서만 충돌 중재를 수행하기 전에, 수행하는 동안, 그리고 수행한 후에, 충돌 중재 큐로부터 제 1 메모리 또는 메모리 제어기로 메모리 요청들의 제 2 배치의 적어도 하나의 메모리 요청들을 전송하도록 구성될 수도 있다. 이러한 예에서, 적어도 하나의 메모리 요청 (예를 들어, 제 1 메모리 요청) 은 충돌 중재를 수행하기 전에 전송되고, 적어도 하나의 메모리 요청 (예를 들어, 제 2 메모리 요청) 은 충돌 중재를 수행하는 동안에 전송되고, 적어도 하나의 메모리 요청 (예를 들어, 제 3 메모리 요청) 은 충돌 중재를 수행한 후에 전송됨이 이해된다. 다른 예로서, 프로세싱 유닛 (1) 은 충돌 중재 큐에 저장된 메모리 요청들의 제 2 배치와 메모리 요청들의 제 3 배치 사이에서만 충돌 중재를 수행하는 동안, 그리고 수행한 후에, 충돌 중재 큐로부터 제 1 메모리 또는 메모리 제어기로 메모리 요청들의 제 2 배치의 적어도 하나의 메모리 요청들을 전송하도록 구성될 수도 있다. 이러한 예에서, 적어도 하나의 메모리 요청 (예를 들어, 제 1 메모리 요청) 은 충돌 중재를 수행하는 동안에 전송되고, 적어도 하나의 메모리 요청 (예를 들어, 제 2 메모리 요청) 은 충돌 중재를 수행한 후에 전송됨이 이해된다.
일부 예들에서, 프로세싱 유닛 (1) 은 메모리 요청들의 제 2 배치와 메모리 요청들의 제 3 배치 사이에서 프로세싱 유닛 (1) 에 의해 해결될 충돌이 없다고 결정시, 충돌 중재 큐로부터 제 1 메모리 또는 메모리 제어기로 메모리 요청들의 제 2 배치와 메모리 요청들의 제 3 배치를 전송하도록 구성되는 것에 의해, 충돌 중재 큐에 저장된 메모리 요청들의 제 2 배치와 메모리 요청들의 제 3 배치 사이에서만 충돌 중재를 수행하도록 구성될 수도 있다. 예를 들어, 프로세싱 유닛 (1) 은 메모리 요청들의 제 2 배치의 메모리 요청들을 전송하고 그리고, 메모리 요청들의 제 2 배치의 각각의 메모리 요청이 실행되었다는 것을 보장하도록 중단없이 메모리 요청들의 제 3 배치를 전송하는 것에 의해 충돌 중재 큐를 통과하여 진행하도록 구성될 수도 있다.
일부 예들에서, 프로세싱 유닛 (1) 은 메모리 요청들의 제 2 배치와 메모리 요청들의 제 3 배치 사이에서 프로세싱 유닛 (1) 에 의해 해결될 충돌이 없다고 결정시, 프로세싱이 메모리 요청들의 제 2 배치의 모든 메모리 요청들에 대해 완료될 때까지 메모리 요청들의 제 3 배치를 충돌 중재 큐로부터 제 1 메모리 또는 상기 메모리 제어기로 전송하는 것을 중단하지 않도록 구성되는 것에 의해 충돌 중재 큐에 저장된 메모리 요청들의 제 2 배치와 메모리 요청들의 제 3 배치 사이에서만 충돌 중재를 수행하도록 구성될 수도 있다.
일부 예들에서, 프로세싱 유닛 (1) 은 메모리 요청들의 제 2 배치와 메모리 요청들의 제 3 배치 사이에서 프로세싱 유닛 (1) 에 의해 해결될 충돌이 있다고 결정시, 프로세싱이 메모리 요청들의 제 2 배치의 모든 메모리 요청들에 대해 완료될 때까지 메모리 요청들의 제 3 배치를 충돌 중재 큐로부터 제 1 메모리 또는 상기 메모리 제어기로 전송하는 것을 중단하도록 구성되는 것에 의해 충돌 중재 큐에 저장된 메모리 요청들의 제 2 배치와 메모리 요청들의 제 3 배치 사이에서만 충돌 중재를 수행하도록 구성될 수도 있다. 복수의 예들에 대하여 위에 설명된 바와 같이, 프로세싱 유닛 (1) 은 충돌 중재 큐에 저장된 메모리 요청들의 제 2 배치와 메모리 요청들의 제 3 배치 사이에서만 충돌 중재를 수행하기 전에, 수행하는 동안에 그리고/또는 수행한 후에, 메모리 요청들의 제 2 배치의 하나 이상의 메모리 요청들을 충돌 중재 큐로부터 제 1 메모리 또는 메모리 제어기로 전송하도록 구성될 수도 있다. 일부 예들에서, 프로세싱 유닛 (1) 은 스레드들의 제 1 그룹으로부터 기원하는 메모리 요청들의 제 3 배치의 전송을 중단한 후에 그리고 스레드들의 제 1 그룹으로부터 기원하는 메모리 요청들의 제 3 배치를 제 1 메모리 또는 메모리 제어기로 전송하기 전에 스레드들의 제 2 그룹으로부터 기원하는 메모리 요청들의 제 4 배치를 제 1 메모리 또는 메모리 제어기로 전송하도록 구성될 수도 있다.
예를 들어, 프로세싱 유닛 (1) 은 메모리 요청들의 제 2 배치의 배치 유형과 메모리 요청들의 제 3 배치의 배치 유형에 기초하여 메모리 요청들의 제 2 배치와 메모리 요청들의 제 3 배치 사이에서 프로세싱 유닛 (1) 에 의해 해결될 충돌이 존재하는지의 여부를 결정하도록 구성될 수도 있다. 이러한 예에서, 프로세싱 유닛 (1) 은 메모리 요청들의 제 2 배치의 배치 유형이 기록이고 메모리 요청들의 제 3 배치의 배치 유형이 기록일 때 메모리 요청들의 제 2 배치와 메모리 요청들의 제 3 배치 사이에서 프로세싱 유닛 (1) 에 의해 해결될 충돌이 있다고 결정하도록 구성될 수도 있다. 다른 예로서, 프로세싱 유닛 (1) 은 메모리 요청들의 제 2 배치의 배치 유형이 판독이고 메모리 요청들의 제 3 배치의 배치 유형이 판독일 때, 메모리 요청들의 제 2 배치와 메모리 요청들의 제 3 배치 사이에서 프로세싱 유닛 (1) 에 의해 해결될 충돌이 있다고 결정하도록 구성될 수도 있고, 메모리 요청들의 제 2 배치는 메모리 요청들의 제 1 배치 후에 상기 충돌 중재 큐에 포지셔닝된다.
다른 예들에서, 메모리 요청들의 제 3 배치가 기원하는 스레드들의 그룹은 스레드들의 제 1 그룹이 아닐 수도 있다. 앞에 설명된 본원의 식별번호 <107>-<116> (영문명세서의 단락들 [0118]-[0127]) 은 메모리 요청들의 제 3 배치가 스레드들의 제 1 그룹으로부터 기원하지 않는 아래 설명된 예들에는 적용하지 않음이 이해된다. 메모리 요청들의 제 3 배치가 스레드들의 제 1 그룹으로부터 기원하지 않는 예들에서, 메모리 요청들의 제 3 배치가 기원하는 스레드들의 그룹은 스레드들의 제 2 그룹일 수도 있다. 이러한 예들에서, 제 3 메타데이터는 메모리 요청들의 제 3 배치가 기원하는 스레드들의 그룹을 식별하는 데이터를 포함할 수도 있다.
프로세싱 유닛 (1) 은 메모리 요청들의 배치들 중 메모리 요청들의 제 4 배치를 제 4 메타데이터로 태깅하도록 구성될 수도 있다. 제 4 메타데이터는 메모리 요청들의 제 4 배치가 기원하는 스레드들의 그룹을 식별하는 데이터를 포함할 수도 있다. 메모리 요청들의 제 4 배치가 기원하는 스레드들의 그룹은 스레드들의 제 2 그룹일 수도 있다. 프로세싱 유닛 (1) 은 메모리 요청들의 제 3 배치의 임의의 메모리 요청을 제 1 메모리 또는 메모리 제어기로 전송하기 전에, 메모리 요청들의 제 3 배치 및 제 3 메타데이터를 충돌 중재 큐에 저장하도록 구성될 수도 있다. 프로세싱 유닛 (1) 은 메모리 요청들의 제 4 배치의 임의의 메모리 요청을 제 1 메모리 또는 메모리 제어기로 전송하기 전에, 메모리 요청들의 제 4 배치 및 제 4 메타데이터를 충돌 중재 큐에 저장하도록 구성될 수도 있다.
이러한 예들에서, 메모리 요청들의 제 4 배치는 메모리 요청들의 제 3 배치 후에 충돌 중재 큐에 저장될 수도 있다. 예를 들어, 메모리 요청들의 제 3 배치 및/또는 메모리 요청들의 제 4 배치는 메모리 요청들의 제 1 배치와 제 2 배치 사이에서 충돌 중재 큐에 저장될 수도 있다. 다른 예로서, 메모리 요청들의 제 3 배치는 메모리 요청들의 제 1 배치와 제 2 배치 사이에서 충돌 중재 큐에 저장될 수도 있고, 메모리 요청들의 제 4 배치는 메모리 요청들의 제 1 배치와 제 2 배치 후에 충돌 중재 큐에 저장될 수도 있다. 다른 예로서, 메모리 요청들의 제 4 배치는 메모리 요청들의 제 1 배치와 제 2 배치 사이에서 충돌 중재 큐에 저장될 수도 있고, 메모리 요청들의 제 3 배치는 메모리 요청들의 제 1 배치와 제 2 배치 후에 충돌 중재 큐에 저장될 수도 있다.
메모리 요청들의 제 3 배치 및 메모리 요청들의 제 4 배치가 메모리 요청들의 제 1 배치와 제 2 배치 사이에서 충돌 중재 큐에 저장되는 예들에서, 프로세싱 유닛 (1) 은 제 3 메타데이터 및 제 4 메타데이터를 이용하여, 충돌 중재 큐에 저장된 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하도록 구성될 수도 있다. 프로세싱 유닛 (1) 은 제 3 메타데이터를 이용하여, 메모리 요청들의 제 3 배치가 스레드들의 제 1 그룹으로부터 기원하지 않는다고 결정하고, 그리고 제 4 메타데이터를 이용하여, 메모리 요청들의 제 4 배치가 스레드들의 제 1 그룹으로부터 기원하지 않는다고 결정하도록 구성되는 것에 의해, 제 3 메타데이터 및 제 4 메타데이터를 이용하여, 충돌 중재 큐에 저장된 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하도록 구성될 수도 있다.
메모리 요청들의 제 3 배치가 메모리 요청들의 제 1 배치와 제 2 배치 사이에서 충돌 중재 큐에 저장되고 메모리 요청들의 제 4 배치가 메모리 요청들의 제 1 배치와 제 2 배치 후에 충돌 중재 큐에 저장되는 예들에서, 프로세싱 유닛 (1) 은 제 3 메타데이터를 이용하여, 충돌 중재 큐에 저장된 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하도록 구성될 수도 있다. 프로세싱 유닛 (1) 은 제 3 메타데이터를 이용하여, 메모리 요청들의 제 3 배치가 스레드들의 제 1 그룹으로부터 기원하지 않는다고 결정하도록 구성되는 것에 의해, 제 3 메타데이터를 이용하여, 충돌 중재 큐에 저장된 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하도록 구성될 수도 있다.
메모리 요청들의 제 4 배치가 메모리 요청들의 제 1 배치와 제 2 배치 사이에서 충돌 중재 큐에 저장되고 메모리 요청들의 제 3 배치가 메모리 요청들의 제 1 배치와 제 2 배치 후에 충돌 중재 큐에 저장되는 예들에서, 프로세싱 유닛 (1) 은 제 4 메타데이터를 이용하여, 충돌 중재 큐에 저장된 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하도록 구성될 수도 있다. 프로세싱 유닛 (1) 은 제 4 메타데이터를 이용하여, 메모리 요청들의 제 4 배치가 스레드들의 제 1 그룹으로부터 기원하지 않는다고 결정하도록 구성되는 것에 의해, 제 4 메타데이터를 이용하여, 충돌 중재 큐에 저장된 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하도록 구성될 수도 있다.
프로세싱 유닛 (1) 은 메모리 요청들의 제 3 배치가 스레드들의 제 2 그룹으로부터 기원한다고 결정하도록 구성되는 것에 의해 메모리 요청들의 제 3 배치가 스레드들의 제 1 그룹으로부터 기원하지 않는다고 결정하도록 구성될 수도 있다. 이와 유사하게, 프로세싱 유닛 (1) 은 메모리 요청들의 제 4 배치가 스레드들의 제 2 그룹으로부터 기원한다고 결정하도록 구성되는 것에 의해 메모리 요청들의 제 4 배치가 스레드들의 제 1 그룹으로부터 기원하지 않는다고 결정하도록 구성될 수도 있다.
프로세싱 유닛 (1) 은 충돌 중재 큐에 저장된 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하는 것과 병행하여, 충돌 중재 큐에 저장된 메모리 요청들의 제 3 배치와 메모리 요청들의 제 4 배치 사이에서만 충돌 중재를 수행하도록 구성될 수도 있다. 프로세싱 유닛 (1) 은 메모리 요청들의 제 1 배치와 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하는 것과 관련하여 본원에 설명된 것과 동일한 방식으로, 충돌 중재 큐에 저장된 메모리 요청들의 제 3 배치와 메모리 요청들의 제 4 배치 사이에서만 충돌 중재를 수행하도록 구성될 수도 있다.
프로세싱 유닛 (1) 은 본 개시에 설명된 하나 이상의 기술들을 수행하도록 구성될 수도 있다. 예를 들어, 프로세싱 유닛 (1) 은 아비터 (4) 에 의해서이든 아비터 (4) 가 없든 아비터 (4) 에 대하여 설명된 임의의 기술을 수행하도록 구성될 수도 있음이 이해된다. 일부 예들에서, 아비터 (4) 는 프로세싱 유닛 (1) 의 개념적 기능 유닛이다. 이러한 예들에서, 프로세싱 유닛 (1) 이 아비터 (4) 의 기능성을 제공하기 때문에 아비터 (4) 에 대한 레퍼런스는 프로세싱 유닛 (1) 에 대한 레퍼런스를 포함하고 있음이 이해된다. 다른 예들에서, 아비터 (4) 는 프로세싱 유닛 (1) 의 물리적 유닛이다. 이러한 예들에서, 아비터 (4) 는 프로세싱 유닛 (1) 의 다음의 엘리먼트들: 프로세서들 (예를 들어, 하나 이상의 마이크로프로세서들), 하나 이상의 응용 주문형 집적 회로들 (ASIC들), 하나 이상의 필드 프로그래밍가능 게이트 어레이들 (FPGA들), 하나 이상의 산술 로직 유닛들 (ALU들), 하나 이상의 디지털 신호 프로세서들 (DSP들), 이산형 로직, 소프트웨어, 하드웨어, 펌웨어 또는 다른 등가의 집적화된 또는 이산형 로직 회로부 중 하나 이상일 수도 있거나 또는 하나 이상을 포함할 수도 있다. 이와 유사하게, 아비터 (4) 는 본 개시에 설명된 하나 이상의 기술들을 수행하도록 구성될 수도 있다. 예를 들어, 아비터 (4) 는 프로세싱 유닛 (1) 에 대하여 본원에 설명된 하나 이상의 기술들을 수행하도록 구성될 수도 있다. 일 예로서, 본원에 설명된 일부 예들은 프로세싱 유닛 (1) 이 메모리 요청들의 배치들을 태깅하고, 메모리 요청들의 배치 및 메타데이터를 충돌 중재 큐에 저장하고, 충돌 중재를 수행하도록 구성되는 것으로서 설명되어 있다. 이러한 예들에서, 아비터 (4) 는 이러한 특징들을 수행하도록 구성될 수도 있음이 이해된다.
본 개시에 따르면, 용어 "또는" 은 컨텍스트에 달리 언급되지 않는 경우 "및/또는" 으로서 해석될 수도 있다. 추가적으로, 어구, 이를 테면, "하나 이상", 또는 "적어도 하나" 등이 본원에 개시된 일부 특징에 이용될 수도 있지만, 이러한 말이 이용되지 않는 특징은 컨텍스트에 달리 언급되지 않는 경우 이러한 함축된 의미를 갖는 것으로 해석될 수도 있다.
기술들의 여러 양태들의 특정 조합들이 위에 설명되어 있지만, 이들 조합들은 본 개시에 설명된 기술들의 예들을 단지 예시하기 위해 제공된다. 따라서, 본 개시의 기술들은 이들 예의 조합들로 제한되지 않아야 하며, 본 개시에 설명된 기술들의 여러 양태들의 임의의 고려가능한 조합을 포함할 수도 있다.
본 개시에서 설명된 기술들은, 적어도 부분적으로, 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 임의의 조합으로 구현될 수도 있다. 예를 들어, 설명된 기술들의 여러 양태들은, 하나 이상의 마이크로프로세서들을 포함하는 하나 이상의 프로세서들, 디지털 신호 프로세서들 (DSPs), 응용 주문형 집적 회로들 (ASICs), 필드 프로그래밍가능 게이트 어레이들 (FPGAs), 또는 다른 등가적인 집적 또는 이산형 논리 회로부 뿐만 아니라 이와 같은 컴포넌트들의 임의의 조합들 내에서 구현될 수도 있다. 일반적으로, 용어 "프로세서" 또는 "프로세싱 회로부"는 임의의 전술한 논리 회로부만을 지칭할 수도 있거나, 또는 다른 논리 회로부 또는 임의의 다른 등가의 회로부, 이를 테면, 프로세싱을 수행하는 별개의 하드웨어와 조합하여 지칭할 수도 있다.
이러한 하드웨어, 소프트웨어, 및 펌웨어는 본 개시물에서 설명된 여러 동작들, 및 기능들을 지원하기 위해 동일한 디바이스 내에서 또는 별개의 디바이스들 내에서 구현될 수도 있다. 또한, 설명된 유닛들, 모듈들 또는 컴포넌트들의 어떠한 것도 함께 또는 독립된 그러나 상호 동작가능한 로직 디바이스들로서 별개로 구현될 수도 있다. 모듈들 또는 유닛들로서의 상이한 피쳐들의 묘사는 상이한 기능의 양태들을 강조하기 위해 의도된 것이며 이러한 모듈들 또는 유닛들이 반드시 별개의 하드웨어, 또는 소프트웨어 컴포넌트들에 의해 실현되어야만 하는 것을 의미하는 것은 아니다. 대신, 하나 이상의 모듈들 또는 유닛들과 관련된 기능성은 별개의 하드웨어, 펌웨어, 및/또는 소프트웨어 컴포넌트들에 의해 수행될 수도 있거나, 또는 공통의 또는 별개의 하드웨어, 또는 소프트웨어 컴포넌트들 내에 통합될 수도 있다.
본 개시에 설명된 기법들이 또한 컴퓨터 판독가능 매체, 이를 테면, 명령들을 저장한 컴퓨터 판독가능 저장 매체에 저장, 수록 또는 인코딩될 수도 있다. 컴퓨터 판독가능 매체에 수록 또는 인코딩된 명령들은 명령들이 예를 들어, 하나 이상의 프로세서들에 의해 실행될 때 하나 이상의 프로세서들로 하여금, 본원에 설명된 기술들을 수행하게 할 수도 있다. 컴퓨터 판독가능 저장 매체들은 랜덤 액세스 메모리 (RAM), 판독 전용 메모리 (ROM), 프로그래밍가능 판독전용 메모리 (PROM), 소거가능 프로그래밍가능 판독 전용 메모리 (EPROM), 전기적 소거가능 프로그래밍 판독 전용 메모리 (EEPROM), 플래시 메모리, 하드디스크, CD-ROM, 플로피 디스크, 카세트, 자기 매체들, 광학 매체들, 또는 유형인 다른 컴퓨터 판독 가능한 매체들을 포함할 수도 있다.
컴퓨터 판독가능 매체는 위에 나열된 것과 같은 유형의 저장 매체에 대응하는 컴퓨터 판독가능 저장 매체를 포함할 수도 있다. 컴퓨터 판독가능 매체는 또한, 예를 들어, 통신 프로토콜에 따라 한 위치에서 다른 위치로 컴퓨터 프로그램의 전달을 용이하게 하는 임의의 매체를 포함한 통신 매체를 포함할 수도 있다. 이 방식으로, 어구 "컴퓨터 판독가능 매체"는 일반적으로 (1) 비일시적인 유형의 컴퓨터 판독가능 저장 매체들 또는 (2) 일시적 신호 또는 반송파와 같은 비유형의 컴퓨터 판독가능 통신 매체에 대응할 수도 있다.
여러 양태들 및 예들이 설명되었다. 그러나, 변경들이 다음 청구항들의 범위로부터 벗어남이 없이 본 개시의 기법들 또는 구조에 대해 이루어질 수도 있다.

Claims (30)

  1. 방법으로서,
    프로세싱 유닛에 의해, 메모리 요청들의 배치들 (batches) 을 생성하는 단계로서, 메모리 요청들의 각각의 배치는 스레드들의 개별적인 그룹의 실행으로부터 각각 기원하는, 상기 메모리 요청들의 배치들을 생성하는 단계;
    상기 프로세싱 유닛에 의해, 상기 메모리 요청들의 배치들 중 메모리 요청들의 제 1 배치를 제 1 메타데이터로 태깅하는 단계로서, 상기 제 1 메타데이터는 상기 메모리 요청들의 제 1 배치가 기원하는 스레드들의 그룹을 식별하는 데이터를 포함하고, 상기 메모리 요청들의 제 1 배치가 기원하는 스레드들의 그룹은 스레드들의 제 1 그룹인, 상기 제 1 메타데이터로 태깅하는 단계;
    상기 프로세싱 유닛에 의해, 상기 메모리 요청들의 배치들 중 메모리 요청들의 제 2 배치를 제 2 메타데이터로 태깅하는 단계로서, 상기 제 2 메타데이터는 상기 메모리 요청들의 제 2 배치가 기원하는 스레드들의 그룹을 식별하는 데이터를 포함하고, 상기 메모리 요청들의 제 2 배치가 기원하는 스레드들의 그룹은 상기 스레드들의 제 1 그룹인, 상기 제 2 메타데이터로 태깅하는 단계;
    상기 메모리 요청들의 제 1 배치의 임의의 메모리 요청을 제 1 메모리 또는 메모리 제어기로 전송하기 전에, 상기 메모리 요청들의 제 1 배치 및 상기 제 1 메타데이터를 충돌 중재 큐에 저장하는 단계;
    상기 메모리 요청들의 제 2 배치의 임의의 메모리 요청을 상기 제 1 메모리 또는 상기 메모리 제어기로 전송하기 전에, 상기 메모리 요청들의 제 2 배치 및 상기 제 2 메타데이터를 상기 충돌 중재 큐에 저장하는 단계; 및
    상기 제 1 메타데이터 및 상기 제 2 메타데이터를 이용하여, 상기 충돌 중재 큐에 저장된 상기 메모리 요청들의 제 1 배치와 상기 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하는 단계로서, 상기 충돌 중재 큐에 저장된 메모리 요청들의 적어도 하나의 다른 배치는 상기 스레드들의 제 1 그룹과는 상이한 스레드들의 적어도 하나의 그룹으로부터 기원하는, 상기 충돌 중재를 수행하는 단계를 포함하는, 방법.
  2. 제 1 항에 있어서,
    상기 충돌 중재 큐에 저장된 메모리 요청들의 적어도 하나의 다른 배치는 상기 메모리 요청들의 제 1 배치와 상기 메모리 요청들의 제 2 배치 사이에 저장되는, 방법.
  3. 제 1 항에 있어서,
    상기 충돌 중재 큐에 저장된 상기 메모리 요청들의 제 1 배치와 상기 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하는 단계는:
    상기 제 1 메타데이터를 이용하여, 상기 메모리 요청들의 제 1 배치가 상기 스레드들의 제 1 그룹으로부터 기원한다고 결정하는 단계; 및
    상기 제 2 메타데이터를 이용하여, 상기 메모리 요청들의 제 2 배치가 상기 스레드들의 제 1 그룹으로부터 기원한다고 결정하는 단계를 포함하는, 방법.
  4. 제 1 항에 있어서,
    상기 메모리 요청들의 제 1 배치가 기원하는 스레드들의 그룹을 식별하는 데이터는 제 1 스레드 그룹 식별자이고, 상기 메모리 요청들의 제 2 배치가 기원하는 스레드들의 그룹을 식별하는 데이터는 상기 제 1 스레드 그룹 식별자인, 방법.
  5. 제 1 항에 있어서,
    상기 프로세싱 유닛에 의해, 상기 메모리 요청들의 배치들 중 메모리 요청들의 제 3 배치를 제 3 메타데이터로 태깅하는 단계로서, 상기 제 3 메타데이터는 상기 메모리 요청들의 제 3 배치가 기원하는 스레드들의 그룹을 식별하는 데이터를 포함하고, 상기 메모리 요청들의 제 3 배치가 기원하는 스레드들의 그룹은 스레드들의 제 2 그룹인, 상기 제 3 메타데이터로 태깅하는 단계;
    상기 프로세싱 유닛에 의해, 상기 메모리 요청들의 배치들 중 메모리 요청들의 제 4 배치를 제 4 메타데이터로 태깅하는 단계로서, 상기 제 4 메타데이터는 상기 메모리 요청들의 제 4 배치가 기원하는 스레드들의 그룹을 식별하는 데이터를 포함하고, 상기 메모리 요청들의 제 4 배치가 기원하는 스레드들의 그룹은 상기 스레드들의 제 2 그룹인, 상기 제 4 메타데이터로 태깅하는 단계;
    상기 메모리 요청들의 제 3 배치의 임의의 메모리 요청을 상기 제 1 메모리 또는 상기 메모리 제어기로 전송하기 전에, 상기 메모리 요청들의 제 3 배치 및 상기 제 3 메타데이터를 상기 충돌 중재 큐에 저장하는 단계;
    상기 메모리 요청들의 제 4 배치의 임의의 메모리 요청을 상기 제 1 메모리 또는 상기 메모리 제어기로 전송하기 전에, 상기 메모리 요청들의 제 4 배치 및 상기 제 4 메타데이터를 상기 충돌 중재 큐에 저장하는 단계; 및
    상기 제 3 메타데이터 또는 상기 제 4 메타데이터 중 적어도 하나를 이용하여, 상기 충돌 중재 큐에 저장된 상기 메모리 요청들의 제 1 배치와 상기 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하는 단계를 더 포함하는, 방법.
  6. 제 5 항에 있어서,
    상기 충돌 중재 큐에 저장된 상기 메모리 요청들의 제 1 배치와 상기 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하는 단계는:
    상기 제 1 메타데이터를 이용하여, 상기 메모리 요청들의 제 1 배치가 상기 스레드들의 제 1 그룹으로부터 기원한다고 결정하는 단계;
    상기 제 2 메타데이터를 이용하여, 상기 메모리 요청들의 제 2 배치가 상기 스레드들의 제 1 그룹으로부터 기원한다고 결정하는 단계; 및
    상기 제 3 메타데이터를 이용하여, 상기 메모리 요청들의 제 3 배치가 상기 스레드들의 제 1 그룹으로부터 기원하지 않는다고 결정하는 단계; 또는
    상기 제 4 메타데이터를 이용하여, 상기 메모리 요청들의 제 4 배치가 상기 스레드들의 제 1 그룹으로부터 기원하지 않는다고 결정하는 단계 중 적어도 하나를 수행하는 단계를 포함하는, 방법.
  7. 제 6 항에 있어서,
    상기 메모리 요청들의 제 3 배치가 상기 스레드들의 제 1 그룹으로부터 기원하지 않는다고 결정하는 단계는 상기 메모리 요청들의 제 3 배치가 상기 스레드들의 제 2 그룹으로부터 기원한다고 결정하는 단계를 포함하거나, 또는 상기 메모리 요청들의 제 4 배치가 상기 스레드들의 제 1 그룹으로부터 기원하지 않는다고 결정하는 단계는 상기 메모리 요청들의 제 4 배치가 상기 스레드들의 제 2 그룹으로부터 기원한다고 결정하는 단계를 포함하는, 방법.
  8. 제 5 항에 있어서,
    상기 메모리 요청들의 제 1 배치가 기원하는 스레드들의 그룹을 식별하는 데이터는 제 1 스레드 그룹 식별자이고, 상기 메모리 요청들의 제 2 배치가 기원하는 스레드들의 그룹을 식별하는 데이터는 상기 제 1 스레드 그룹 식별자이고, 상기 메모리 요청들의 제 3 배치가 기원하는 스레드들의 그룹을 식별하는 데이터는 제 2 스레드 그룹 식별자이고, 상기 메모리 요청들의 제 4 배치가 기원하는 스레드들의 그룹을 식별하는 데이터는 상기 제 2 스레드 그룹 식별자인, 방법.
  9. 제 5 항에 있어서,
    상기 충돌 중재 큐에 저장된 상기 메모리 요청들의 제 1 배치와 상기 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하는 것과 병행하여, 상기 충돌 중재 큐에 저장된 상기 메모리 요청들의 제 3 배치와 상기 메모리 요청들의 제 4 배치 사이에서만 충돌 중재를 수행하는 단계를 더 포함하는, 방법.
  10. 제 3 항에 있어서,
    상기 충돌 중재 큐에 저장된 상기 메모리 요청들의 제 1 배치와 상기 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하는 단계는:
    상기 메모리 요청들의 제 1 배치와 상기 메모리 요청들의 제 2 배치 사이에서 상기 프로세싱 유닛에 의해 해결될 충돌이 존재하는지의 여부를 결정하는 단계를 포함하는, 방법.
  11. 제 10 항에 있어서,
    상기 충돌은 실제적 또는 잠재적 충돌인, 방법.
  12. 제 10 항에 있어서,
    상기 충돌 중재 큐에 저장된 상기 메모리 요청들의 제 1 배치와 상기 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하는 단계는:
    상기 메모리 요청들의 제 1 배치와 상기 메모리 요청들의 제 2 배치 사이에서 상기 프로세싱 유닛에 의해 해결될 충돌이 없다고 결정시, 상기 메모리 요청들의 제 1 배치와 상기 메모리 요청들의 제 2 배치를 상기 충돌 중재 큐로부터 상기 제 1 메모리 또는 상기 메모리 제어기로 전송하는 단계를 포함하는, 방법.
  13. 제 10 항에 있어서,
    상기 충돌 중재 큐에 저장된 상기 메모리 요청들의 제 1 배치와 상기 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하는 단계는:
    상기 메모리 요청들의 제 1 배치와 상기 메모리 요청들의 제 2 배치 사이에서 상기 프로세싱 유닛에 의해 해결될 충돌이 없다고 결정시, 프로세싱이 상기 메모리 요청들의 제 1 배치의 모든 메모리 요청들에 대해 완료될 때까지 상기 메모리 요청들의 제 2 배치를 상기 충돌 중재 큐로부터 상기 제 1 메모리 또는 상기 메모리 제어기로 전송하는 것을 중단하지 않는 단계를 포함하는, 방법.
  14. 제 10 항에 있어서,
    상기 충돌 중재 큐에 저장된 상기 메모리 요청들의 제 1 배치와 상기 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하기 전에, 수행하는 동안에 또는 수행한 후에, 상기 메모리 요청들의 제 1 배치의 하나 이상의 메모리 요청들을 상기 충돌 중재 큐로부터 제 1 메모리 또는 메모리 제어기로 전송하는 단계를 더 포함하는, 방법.
  15. 제 10 항에 있어서,
    상기 충돌 중재 큐에 저장된 상기 메모리 요청들의 제 1 배치와 상기 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하는 단계는:
    상기 메모리 요청들의 제 1 배치와 상기 메모리 요청들의 제 2 배치 사이에서 상기 프로세싱 유닛에 의해 해결될 충돌이 있다고 결정시, 프로세싱이 상기 메모리 요청들의 제 1 배치의 모든 메모리 요청들에 대해 완료될 때까지 상기 메모리 요청들의 제 2 배치를 상기 충돌 중재 큐로부터 상기 제 1 메모리 또는 상기 메모리 제어기로 전송하는 것을 중단하는 단계를 포함하는, 방법.
  16. 제 15 항에 있어서,
    상기 충돌 중재 큐에 저장된 상기 메모리 요청들의 제 1 배치와 상기 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하기 전에, 수행하는 동안에 또는 수행한 후에, 상기 메모리 요청들의 제 1 배치의 하나 이상의 메모리 요청들을 상기 충돌 중재 큐로부터 제 1 메모리 또는 메모리 제어기로 전송하는 단계를 더 포함하는, 방법.
  17. 제 10 항에 있어서,
    상기 메모리 요청들의 제 1 배치의 배치 유형이 판독이고 상기 메모리 요청들의 제 2 배치의 배치 유형이 판독일 때, 상기 메모리 요청들의 제 1 배치와 상기 메모리 요청들의 제 2 배치 사이에서 상기 프로세싱 유닛에 의해 해결될 충돌이 있다고 결정하는 단계를 더 포함하고, 상기 메모리 요청들의 제 2 배치는 상기 메모리 요청들의 제 1 배치 후에 상기 충돌 중재 큐에 포지셔닝되는, 방법.
  18. 제 17 항에 있어서,
    상기 스레드들의 제 1 그룹으로부터 기원하는 상기 메모리 요청들의 제 2 배치의 전송을 중단한 후에 그리고 상기 스레드들의 제 1 그룹으로부터 기원하는 상기 메모리 요청들의 제 2 배치를 상기 제 1 메모리 또는 상기 메모리 제어기로 전송하기 전에 스레드들의 제 2 그룹으로부터 기원하는 메모리 요청들의 제 3 배치를 상기 제 1 메모리 또는 상기 메모리 제어기로 전송하는 단계를 더 포함하는, 방법.
  19. 제 1 항에 있어서,
    상기 프로세싱 유닛에 의해, 상기 메모리 요청들의 배치들 중 메모리 요청들의 제 3 배치를 제 3 메타데이터로 태깅하는 단계로서, 상기 제 3 메타데이터는 상기 메모리 요청들의 제 3 배치가 기원하는 스레드들의 그룹을 식별하는 데이터를 포함하고, 상기 메모리 요청들의 제 3 배치가 기원하는 스레드들의 그룹은 상기 스레드들의 제 1 그룹인, 상기 제 3 메타데이터로 태깅하는 단계;
    상기 메모리 요청들의 제 3 배치의 임의의 메모리 요청을 상기 제 1 메모리 또는 상기 메모리 제어기로 전송하기 전에, 상기 메모리 요청들의 제 3 배치 및 상기 제 3 메타데이터를 상기 충돌 중재 큐에 저장하는 단계;
    상기 제 2 메타데이터 또는 상기 제 3 메타데이터를 이용하여, 상기 충돌 중재 큐에 저장된 상기 메모리 요청들의 제 2 배치와 상기 메모리 요청들의 제 3 배치 사이에서만 충돌 중재를 수행하는 단계를 더 포함하는, 방법.
  20. 제 19 항에 있어서,
    상기 충돌 중재 큐에 저장된 상기 메모리 요청들의 제 1 배치와 상기 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행한 후에, 상기 충돌 중재 큐에 저장된 상기 메모리 요청들의 제 2 배치와 상기 메모리 요청들의 제 3 배치 사이에서만 충돌 중재를 수행하는 단계를 더 포함하는, 방법.
  21. 제 19 항에 있어서,
    상기 충돌 중재 큐에 저장된 상기 메모리 요청들의 제 2 배치와 상기 메모리 요청들의 제 3 배치 사이에서만 충돌 중재를 수행하는 단계는:
    상기 제 2 메타데이터를 이용하여, 상기 메모리 요청들의 제 1 배치가 상기 스레드들의 제 1 그룹으로부터 기원한다고 결정하는 단계; 및
    상기 제 3 메타데이터를 이용하여, 상기 메모리 요청들의 제 2 배치가 상기 스레드들의 제 1 그룹으로부터 기원한다고 결정하는 단계를 포함하고, 상기 제 1, 제 2 및 제 3 메타데이터는 제 1 스레드 그룹 식별자를 포함하고, 상기 메모리 요청들의 제 1 배치가 기원하는 스레드들의 그룹을 식별하는 데이터는 제 1 스레드 그룹 식별자이고, 상기 메모리 요청들의 제 2 배치가 기원하는 스레드들의 그룹을 식별하는 데이터는 상기 제 1 스레드 그룹 식별자이고, 상기 메모리 요청들의 제 3 배치가 기원하는 스레드들의 그룹을 식별하는 데이터는 상기 제 1 스레드 그룹 식별자인, 방법.
  22. 제 21 항에 있어서,
    상기 충돌 중재 큐에 저장된 상기 메모리 요청들의 제 2 배치와 상기 메모리 요청들의 제 3 배치 사이에서만 충돌 중재를 수행하는 단계는:
    상기 메모리 요청들의 제 2 배치와 상기 메모리 요청들의 제 3 배치 사이에서 상기 프로세싱 유닛에 의해 해결될 충돌이 존재하는지의 여부를 결정하는 단계를 포함하는, 방법.
  23. 제 1 항에 있어서,
    상기 프로세싱 유닛은 GPU (graphics processing unit) 인, 방법.
  24. 디바이스로서,
    제 1 메모리;
    상기 제 1 메모리에 통신가능하게 커플링된 메모리 제어기; 및
    상기 제 1 메모리 또는 상기 메모리 제어기 중 적어도 하나에 통신가능하게 커플링된 프로세싱 유닛을 포함하고,
    상기 프로세싱 유닛은:
    메모리 요청들의 배치들을 생성하는 것으로서, 메모리 요청들의 각각의 배치는 스레드들의 개별적인 그룹의 실행으로부터 각각 기원하는, 상기 메모리 요청들의 배치들을 생성하고;
    상기 메모리 요청들의 배치들 중 메모리 요청들의 제 1 배치를 제 1 메타데이터로 태깅하는 것으로서, 상기 제 1 메타데이터는 상기 메모리 요청들의 제 1 배치가 기원하는 스레드들의 그룹을 식별하는 데이터를 포함하고, 상기 메모리 요청들의 제 1 배치가 기원하는 스레드들의 그룹은 스레드들의 제 1 그룹인, 상기 제 1 메타데이터로 태깅하고;
    상기 메모리 요청들의 배치들 중 메모리 요청들의 제 2 배치를 제 2 메타데이터로 태깅하는 것으로서, 상기 제 2 메타데이터는 상기 메모리 요청들의 제 2 배치가 기원하는 스레드들의 그룹을 식별하는 데이터를 포함하고, 상기 메모리 요청들의 제 2 배치가 기원하는 스레드들의 그룹은 상기 스레드들의 제 1 그룹인, 상기 제 2 메타데이터로 태깅하고;
    상기 메모리 요청들의 제 1 배치의 임의의 메모리 요청을 상기 제 1 메모리 또는 상기 메모리 제어기로 전송하기 전에, 상기 메모리 요청들의 제 1 배치 및 상기 제 1 메타데이터를 충돌 중재 큐에 저장하고;
    상기 메모리 요청들의 제 2 배치의 임의의 메모리 요청을 상기 제 1 메모리 또는 상기 메모리 제어기로 전송하기 전에, 상기 메모리 요청들의 제 2 배치 및 상기 제 2 메타데이터를 상기 충돌 중재 큐에 저장하고; 그리고
    상기 제 1 메타데이터 및 상기 제 2 메타데이터를 이용하여, 상기 충돌 중재 큐에 저장된 상기 메모리 요청들의 제 1 배치와 상기 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하는 것으로서, 상기 충돌 중재 큐에 저장된 메모리 요청들의 적어도 하나의 다른 배치는 상기 스레드들의 제 1 그룹과는 상이한 스레드들의 적어도 하나의 그룹으로부터 기원하는, 상기 충돌 중재를 수행하도록 구성되는, 디바이스.
  25. 제 24 항에 있어서,
    상기 충돌 중재 큐는 제 2 메모리에 할당되는, 디바이스.
  26. 제 25 항에 있어서,
    상기 제 2 메모리는 상기 프로세싱 유닛의 내부에 있거나 또는 상기 프로세싱 유닛의 외부에 있는, 디바이스.
  27. 장치로서,
    메모리 요청들의 배치들을 생성하기 위한 수단으로서, 메모리 요청들의 각각의 배치는 스레드들의 개별적인 그룹의 실행으로부터 각각 기원하는, 상기 메모리 요청들의 배치들을 생성하기 위한 수단;
    상기 메모리 요청들의 배치들 중 메모리 요청들의 제 1 배치를 제 1 메타데이터로 태깅하기 위한 수단으로서, 상기 제 1 메타데이터는 상기 메모리 요청들의 제 1 배치가 기원하는 스레드들의 그룹을 식별하는 데이터를 포함하고, 상기 메모리 요청들의 제 1 배치가 기원하는 스레드들의 그룹은 스레드들의 제 1 그룹인, 상기 제 1 메타데이터로 태깅하기 위한 수단;
    상기 메모리 요청들의 배치들 중 메모리 요청들의 제 2 배치를 제 2 메타데이터로 태깅하기 위한 수단으로서, 상기 제 2 메타데이터는 상기 메모리 요청들의 제 2 배치가 기원하는 스레드들의 그룹을 식별하는 데이터를 포함하고, 상기 메모리 요청들의 제 2 배치가 기원하는 스레드들의 그룹은 상기 스레드들의 제 1 그룹인, 상기 제 2 메타데이터로 태깅하기 위한 수단;
    상기 메모리 요청들의 제 1 배치의 임의의 메모리 요청을 제 1 메모리 또는 메모리 제어기로 전송하기 전에, 상기 메모리 요청들의 제 1 배치 및 상기 제 1 메타데이터를 충돌 중재 큐에 저장하기 위한 수단;
    상기 메모리 요청들의 제 2 배치의 임의의 메모리 요청을 상기 제 1 메모리 또는 상기 메모리 제어기로 전송하기 전에, 상기 메모리 요청들의 제 2 배치 및 상기 제 2 메타데이터를 상기 충돌 중재 큐에 저장하기 위한 수단; 및
    상기 제 1 메타데이터 및 상기 제 2 메타데이터를 이용하여, 상기 충돌 중재 큐에 저장된 상기 메모리 요청들의 제 1 배치와 상기 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하기 위한 수단으로서, 상기 충돌 중재 큐에 저장된 메모리 요청들의 적어도 하나의 다른 배치는 상기 스레드들의 제 1 그룹과는 상이한 스레드들의 적어도 하나의 그룹으로부터 기원하는, 상기 충돌 중재를 수행하기 위한 수단을 포함하는, 장치.
  28. 제 27 항에 있어서,
    상기 충돌 중재 큐에 저장된 상기 메모리 요청들의 제 1 배치와 상기 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하기 위한 수단은:
    상기 제 1 메타데이터를 이용하여, 상기 메모리 요청들의 제 1 배치가 상기 스레드들의 제 1 그룹으로부터 기원한다고 결정하기 위한 수단; 및
    상기 제 2 메타데이터를 이용하여, 상기 메모리 요청들의 제 2 배치가 상기 스레드들의 제 1 그룹으로부터 기원한다고 결정하기 위한 수단을 포함하는, 장치.
  29. 제 28 항에 있어서,
    상기 충돌 중재 큐에 저장된 상기 메모리 요청들의 제 1 배치와 상기 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하기 위한 수단은:
    상기 메모리 요청들의 제 1 배치와 상기 메모리 요청들의 제 2 배치 사이에서 상기 충돌 중재를 수행하기 위한 수단에 의해 해결될 충돌이 존재하는지의 여부를 결정하기 위한 수단을 포함하는, 장치.
  30. 명령들을 저장한 컴퓨터 판독가능 저장 매체로서,
    상기 명령들은 실행될 때 하나 이상의 프로세싱 유닛들로 하여금:
    메모리 요청들의 배치들을 생성하게 하는 것으로서, 상기 메모리 요청들의 각각의 배치는 스레드들의 개별적인 그룹의 실행으로부터 각각 기원하는, 상기 메모리 요청들의 배치들을 생성하게 하고;
    상기 메모리 요청들의 배치들 중 메모리 요청들의 제 1 배치를 제 1 메타데이터로 태깅하게 하는 것으로서, 상기 제 1 메타데이터는 상기 메모리 요청들의 제 1 배치가 기원하는 스레드들의 그룹을 식별하는 데이터를 포함하고, 상기 메모리 요청들의 제 1 배치가 기원하는 스레드들의 그룹은 스레드들의 제 1 그룹인, 상기 제 1 메타데이터로 태깅하게 하고;
    상기 메모리 요청들의 배치들 중 메모리 요청들의 제 2 배치를 제 2 메타데이터로 태깅하게 하는 것으로서, 상기 제 2 메타데이터는 상기 메모리 요청들의 제 2 배치가 기원하는 스레드들의 그룹을 식별하는 데이터를 포함하고, 상기 메모리 요청들의 제 2 배치가 기원하는 스레드들의 그룹은 상기 스레드들의 제 1 그룹인, 상기 제 2 메타데이터로 태깅하게 하고;
    상기 메모리 요청들의 제 1 배치의 임의의 메모리 요청을 제 1 메모리 또는 메모리 제어기로 전송하기 전에, 상기 메모리 요청들의 제 1 배치 및 상기 제 1 메타데이터를 충돌 중재 큐에 저장하게 하고;
    상기 메모리 요청들의 제 2 배치의 임의의 메모리 요청을 상기 제 1 메모리 또는 상기 메모리 제어기로 전송하기 전에, 상기 메모리 요청들의 제 2 배치 및 상기 제 2 메타데이터를 상기 충돌 중재 큐에 저장하게 하고; 그리고
    상기 제 1 메타데이터 및 상기 제 2 메타데이터를 이용하여, 상기 충돌 중재 큐에 저장된 상기 메모리 요청들의 제 1 배치와 상기 메모리 요청들의 제 2 배치 사이에서만 충돌 중재를 수행하게 하는 것으로서, 상기 충돌 중재 큐에 저장된 메모리 요청들의 적어도 하나의 다른 배치는 상기 스레드들의 제 1 그룹과는 상이한 스레드들의 적어도 하나의 그룹으로부터 기원하는, 상기 충돌 중재를 수행하게 하는, 명령들을 저장한 컴퓨터 판독가능 저장 매체.
KR1020197000618A 2016-07-13 2017-05-22 메모리 요청 중재 KR20190028427A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/209,346 US10572399B2 (en) 2016-07-13 2016-07-13 Memory request arbitration
US15/209,346 2016-07-13
PCT/US2017/033818 WO2018013225A1 (en) 2016-07-13 2017-05-22 Memory request arbitration

Publications (1)

Publication Number Publication Date
KR20190028427A true KR20190028427A (ko) 2019-03-18

Family

ID=59014755

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197000618A KR20190028427A (ko) 2016-07-13 2017-05-22 메모리 요청 중재

Country Status (7)

Country Link
US (1) US10572399B2 (ko)
EP (1) EP3485384B1 (ko)
JP (1) JP2019525324A (ko)
KR (1) KR20190028427A (ko)
CN (1) CN109416673A (ko)
BR (1) BR112019000310A8 (ko)
WO (1) WO2018013225A1 (ko)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10095431B2 (en) * 2015-06-18 2018-10-09 John Edward Benkert Device controller and method of enforcing time-based sector level security
JP6971063B2 (ja) * 2017-06-13 2021-11-24 株式会社小糸製作所 監視装置及びランプの配光制御装置
US11681567B2 (en) 2019-05-09 2023-06-20 International Business Machines Corporation Method and processor system for executing a TELT instruction to access a data item during execution of an atomic primitive
US11321146B2 (en) 2019-05-09 2022-05-03 International Business Machines Corporation Executing an atomic primitive in a multi-core processor system
US11321135B2 (en) * 2019-10-31 2022-05-03 Oracle International Corporation Rate limiting compliance assessments with multi-layer fair share scheduling
US11709711B2 (en) * 2020-09-27 2023-07-25 Advanced Micro Devices, Inc. Allocation of memory access bandwidth to clients in an electronic device
CN113176911A (zh) * 2021-04-29 2021-07-27 上海阵量智能科技有限公司 一种配置方法、数据处理方法、芯片和电子设备
US11443479B1 (en) * 2021-05-19 2022-09-13 Apple Inc. Snapshot arbitration techniques for memory requests

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7107371B1 (en) * 1997-09-22 2006-09-12 Intel Corporation Method and apparatus for providing and embedding control information in a bus system
US6816947B1 (en) * 2000-07-20 2004-11-09 Silicon Graphics, Inc. System and method for memory arbitration
US7406554B1 (en) * 2000-07-20 2008-07-29 Silicon Graphics, Inc. Queue circuit and method for memory arbitration employing same
US6961834B2 (en) 2001-10-12 2005-11-01 Sonics, Inc. Method and apparatus for scheduling of requests to dynamic random access memory device
US6891543B2 (en) * 2002-05-08 2005-05-10 Intel Corporation Method and system for optimally sharing memory between a host processor and graphics processor
US7571284B1 (en) 2004-06-30 2009-08-04 Sun Microsystems, Inc. Out-of-order memory transactions in a fine-grain multithreaded/multi-core processor
US7617368B2 (en) * 2006-06-14 2009-11-10 Nvidia Corporation Memory interface with independent arbitration of precharge, activate, and read/write
US7796137B1 (en) 2006-10-24 2010-09-14 Nvidia Corporation Enhanced tag-based structures, systems and methods for implementing a pool of independent tags in cache memories
US8180975B2 (en) * 2008-02-26 2012-05-15 Microsoft Corporation Controlling interference in shared memory systems using parallelism-aware batch scheduling
US9170844B2 (en) * 2009-01-02 2015-10-27 International Business Machines Corporation Prioritization for conflict arbitration in transactional memory management
GB2469299B (en) * 2009-04-07 2011-02-16 Imagination Tech Ltd Ensuring consistency between a data cache and a main memory
US8607234B2 (en) * 2009-07-22 2013-12-10 Empire Technology Development, Llc Batch scheduling with thread segregation and per thread type marking caps
US8667493B2 (en) * 2010-05-07 2014-03-04 Advanced Micro Devices, Inc. Memory-controller-parallelism-aware scheduling for multiple memory controllers
US8453150B2 (en) 2010-06-08 2013-05-28 Advanced Micro Devices, Inc. Multithread application-aware memory scheduling scheme for multi-core processors
US8972995B2 (en) 2010-08-06 2015-03-03 Sonics, Inc. Apparatus and methods to concurrently perform per-thread as well as per-tag memory access scheduling within a thread and across two or more threads
US9256915B2 (en) * 2012-01-27 2016-02-09 Qualcomm Incorporated Graphics processing unit buffer management
US8775762B2 (en) 2012-05-07 2014-07-08 Advanced Micro Devices, Inc. Method and apparatus for batching memory requests
US8886886B2 (en) 2012-09-28 2014-11-11 Apple Inc. System cache with sticky removal engine
US9405688B2 (en) * 2013-03-05 2016-08-02 Intel Corporation Method, apparatus, system for handling address conflicts in a distributed memory fabric architecture
US9135179B2 (en) * 2013-05-01 2015-09-15 Qualcomm, Incorporated System and method of arbitrating cache requests
JP6311330B2 (ja) * 2014-01-29 2018-04-18 日本電気株式会社 情報処理装置、情報処理方法およびプログラム
US9575807B2 (en) 2014-04-15 2017-02-21 Intel Corporation Processing accelerator with queue threads and methods therefor
US9928564B2 (en) * 2014-06-26 2018-03-27 Intel Corporation Efficient hardware mechanism to ensure shared resource data coherency across draw calls

Also Published As

Publication number Publication date
US10572399B2 (en) 2020-02-25
WO2018013225A1 (en) 2018-01-18
US20180018097A1 (en) 2018-01-18
BR112019000310A8 (pt) 2023-01-31
JP2019525324A (ja) 2019-09-05
EP3485384B1 (en) 2020-07-29
BR112019000310A2 (pt) 2019-04-16
CN109416673A (zh) 2019-03-01
EP3485384A1 (en) 2019-05-22

Similar Documents

Publication Publication Date Title
KR20190028427A (ko) 메모리 요청 중재
US9286119B2 (en) System, method, and computer program product for management of dependency between tasks
US9256623B2 (en) System, method, and computer program product for scheduling tasks associated with continuation thread blocks
JP6390021B2 (ja) グラフィック処理ユニットのためのワークロードバッチサブミットメカニズム
US20120242672A1 (en) Fast queries in a multithreaded queue of a graphics system
US20130198760A1 (en) Automatic dependent task launch
CN110678847A (zh) 用于gpu任务调度的连续分析任务
US7898554B2 (en) Asymmetric two-pass graphics scaling
US9477482B2 (en) System, method, and computer program product for implementing multi-cycle register file bypass
US9378533B2 (en) Central processing unit, GPU simulation method thereof, and computing system including the same
JP2016509280A (ja) グラフィックスプロセッシングユニットベースのメモリ転送動作を行うためのマルチモードメモリアクセス技法
US8832712B2 (en) System and method for synchronizing threads using shared memory having different buffer portions for local and remote cores in a multi-processor system
US10114755B2 (en) System, method, and computer program product for warming a cache for a task launch
CN112368688A (zh) 作为用于虚拟化的gpu任务容器的vmid
CN109074289B (zh) 子组间数据共享
US9304772B2 (en) Ordering thread wavefronts instruction operations based on wavefront priority, operation counter, and ordering scheme
US20220092725A1 (en) Register compaction with early release
US8959296B2 (en) Method and apparatus for centralized timestamp processing
US10742834B2 (en) Buffer management for plug-in architectures in computation graph structures
US11948000B2 (en) Gang scheduling for low-latency task synchronization
US10796399B2 (en) Pixel wait synchronization
US9378139B2 (en) System, method, and computer program product for low latency scheduling and launch of memory defined tasks

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E601 Decision to refuse application