KR20160042948A - 데이터 처리 시스템 - Google Patents

데이터 처리 시스템 Download PDF

Info

Publication number
KR20160042948A
KR20160042948A KR1020167006004A KR20167006004A KR20160042948A KR 20160042948 A KR20160042948 A KR 20160042948A KR 1020167006004 A KR1020167006004 A KR 1020167006004A KR 20167006004 A KR20167006004 A KR 20167006004A KR 20160042948 A KR20160042948 A KR 20160042948A
Authority
KR
South Korea
Prior art keywords
data
cache line
atomic
memory
threads
Prior art date
Application number
KR1020167006004A
Other languages
English (en)
Other versions
KR102284477B1 (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 KR20160042948A publication Critical patent/KR20160042948A/ko
Application granted granted Critical
Publication of KR102284477B1 publication Critical patent/KR102284477B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0842Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • G06F9/3828Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage with global bypass, e.g. between pipelines, between clusters
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

데이터 처리 시스템은 실행 스레드들에 대한 원자 메모리 요청들을 개시하도록 작동되는 한 개 이상의 프로세서 4, 5, 6, 7과 원자 메모리 조작이 수행될 때 원자 메모리 조작을 수행하는 데에 필요한 데이터를 저장하기 위해서 사용되는 복수의 데이터 캐시 8, 9, 10, 11을 포함한다. 원자 조작들이 데이터 캐시에 대해 수행될 때, 같은 메모리 위치를 액세스하는 원자 조작들의 결과들은, 메모리로부터 "참" 캐시 라인의 캐시에의 도착을 기다리고 있는 데이터 캐시 내의 임시 캐시 라인에 축적된다. 임시 캐시 라인에 저장된 원자 조작들의 축적 결과들은, 캐시 라인이 캐시에 도착했을 때 메모리로부터의 캐시 라인과 결합된다. 캐시 라인이 캐시에 도착하면 개개의 원자 값들도 재구성될 수 있다.

Description

데이터 처리 시스템{DATA PROCESSING SYSTEMS}
본 발명은 데이터 처리 시스템에 관한 것으로, 특히 한 개 이상의 프로그래머블 처리 스테이지("쉐이더(shaders)")를 포함하는 그래픽 처리 시스템의 동작에 관한 것이다.
본 기술분야에서 알려진 것처럼, 그래픽 처리는 일반적으로 파이프라인 방식으로 수행되고, 한 개 이상의 파이프라인 스테이지는, 최종 렌더 출력, 예를 들면 표시되는 프레임을 발생하도록 데이터에 대해 작동한다. 많은 그래픽 처리 파이프라인들은 지금 보통 "쉐이더"라고 칭하는 한 개 이상의 프로그래머블 처리 스테이지들을 포함한다. 예를 들면, 그래픽 처리 파이프라인은 지오메트리 쉐이더, 버텍스 쉐이더 및 프래그먼트 (픽셀) 쉐이더 중의 한 개 이상 및 일반적으로는 모두를 포함할 수 있다. 이들 쉐이더는 그래픽 파이프라인의 나머지가 처리하기 위한 및/또는 출력하기 위한 출력 데이터(예를 들면, 버텍스 쉐이더의 경우에 적절히 변형 및 비추어진 버텍스 데이터)의 원하는 세트를 발생하기 위해서 입력 데이터 값들에 대해 쉐이더 프로그램을 실행하는 프로그래머블 처리 스테이지들이다. 그래픽 처리 파이프라인의 쉐이더들은, 프로그래머블 처리 회로를 공유할 수 있고, 또는 각각 독특한 프로그래머블 처리 유닛들일 수도 있다.
이와 같이 그래픽 처리 유닛(GPU) 쉐이더 코어는, 렌더 타겟, 예를 들면 프레임 등 발생될 그래픽 출력에서 각 그래픽 항목에 대한 작은 프로그램을 실행함으로써 그래픽 처리를 수행하는 처리 유닛이다(이 점에 있어서 "항목"은 보통 버텍스 또는 프래그먼트(픽셀))이다. 이것은 일반적인 렌더 출력, 예를 들면, 프레임이 그 각각이 독립적으로 처리될 수 있는 상당히 많은 수의 버텍스 및 프래그먼트를 특징으로 한다는 점에서, 일반적으로 높은 수준의 병렬성을 가능하게 한다.
본 기술분야에서 알려진 것처럼, 그래픽 처리 파이프라인의 일정한 "쉐이더"에 의해 실행되는 쉐이더 프로그램은, GLSL, HLSL, OpenCL 등, 고레벨 쉐이더 프로그래밍 언어를 이용해서 그래픽 처리를 필요로 하는 어플리케이션에 의해 제공될 것이다. 이 쉐이더 프로그램은 관련 언어 표준(사양)으로 정의된 원하는 프로그래밍 스텝들을 나타내는 "표현(expressions)"으로 구성될 것이다. 고레벨 쉐이더 프로그램은 그리고 나서 쉐이더 언어 컴파일러에 의해 타겟 그래픽 처리 파이프라인에 대한 2진 코드로 변형된다. 이 2진 코드는 정해진 타겟 그래픽 처리 파이프라인에 대한 명령어 세트 사양으로 특정되는 "명령어(instructions)"로 구성될 것이다. 쉐이더 언어 표현을 2진 코드 명령어로 변환하기 위한 편집 프로세스는, 본 기술분야에서 알려진 것처럼, 컴파일러 내부의 프로그램의 다수의 중간 표현(intermediate representations)을 통해서 일어날 수 있다. 이와 같이 고레벨 쉐이더 언어로 기록된 프로그램은 컴파일러 특정 중간 표현으로 변형될 수 있고(컴파일러 내부에는 몇 개의 연속적인 중간 표현들이 있을 수도 있다), 최종 중간 표현은 타겟 그래픽 처리 파이프라인에 대한 2진 코드 명령어로 변형된다.
현대의 그래픽 처리 유닛에 있어서는 명령어를 가지고 "원자" 메모리 조작을 수행하는 것이 일반적이다. "원자" 메모리 조작은 메모리 위치를 판독하는 조작 시퀀스이며, 메모리 값과 오퍼랜드 값(일반적으로 레지스터 값) 사이에서 산술 연산을 수행하고, 그리고 나서 산술 연산의 결과를 같은 메모리 위치에 라이트백(write back)한다. 이 조작의 시퀀스는 모든 관찰자에게는 마치 이 시퀀스가 전혀 수행되지 않거나 전부 수행된 것처럼 보이도록 수행된다. 그것은 한 개의 불가분 유닛(indivisible unit)으로서, 즉 "원자"라는 명칭으로서 실행된다.
원자의 일부로서 수행되는 산술 연산은 보통 가환적이며 연관적인 단순한 조작이다. 그러한 조작의 공통 예로서는 Integer Add; Bitwise AND, OR, XOR; Minimum Value; Maximum Value이 있다.
공통적이지만 연관성이 없는 다른 원자 조작들은, 다음과 같다.
Swap(Exchange로서도 알려짐) - 레지스터 값은 메모리 위치에 기록되고, 메모리 위치의 오래된 값은 그리고 나서 쉐이더로 돌아간다(이 조작은 연관성이 있다).
Compare-And-Swap(Compare and Exchange) - 2개의 레지스터 값을 제공하고, 메모리 값과 그들 중의 첫 번째 레지스터 값을 비교하며, 그들이 같다고 비교되면, 제2 레지스터 값을 메모리 위치에 기록한다(이 조작은 비교 값이 일정하게 유지되면 연관성이 있다.
원자 메모리 조작은 일반적으로 2개의 변이체(variants), 즉 "Return" 및 "NoRetrun"으로 발생한다. "Return" 변이체는 "원자" 조작이 수행되기 전에 메모리 위치에 존재했던 데이텀(datum)을 쉐이더로 다시 돌려보낸다. "NoReturn" 변이체는 어떤 값이든 쉐이더로 다시 돌려보내지 않는다. 일반적으로, GPU에 있어서는, 상기 언급된 모든 조작은 양쪽 변이체에서 이용 가능하다(NoReturn 변이체에서 이용 가능하지 않은 Swap 제외).
GPU 원자에 대한 사용 사례의 일반적인 예는 증분 메모리 할당기("Retrun" 타입의 Integer Add), 히스토그램("NoReturn" 타입의 Integer Add) 및 바운딩 박스 계산("NoReturn" 타입의 Minimum/Maximum Value)을 포함한다.
다수의 원자가 같은 메모리 위치에서 수행되면, 그들은 시리즈화될 필요가 있다. 이것은 그들 각각이 전부 수행되었거나 전혀 수행되지 않은 관찰 가능한 시맨틱(semantic)을 유지하는 데에 필요하다. 그러면, 이것은 다수의 메모리 캐시를 가진 시스템에서 스루풋 문제와 코히런시 프로토콜(coherency protocol)을 야기시킨다.
예를 들면, 그러한 방식에 있어서는, 정해진 메모리 위치에 대해 원자 조작들을 수행하기 원하는 처리 코어가 맨 먼저 문제의 메모리 위치에 대한 데이터를 그것의 캐시의 라인에 저장하는 캐시 라인을 메모리로부터 페치(fetch)할 필요가 있을 것이다. 그리고 나서, 캐시 라인이 캐시에 존재하면, 원자 조작들은, 캐시 라인 내의 데이터를 이용해서, 하나씩 순차적으로 수행될 수 있다. 그렇지만, 캐시 라인이 문제의 코어의 캐시에 존재하지만, 다른 캐시들을 이용하여 문제의 데이터(캐시 라인)를 필요로 하는 다른 코어들은, 그것의 원자 조작들을 수행할 수 없기 때문에, 이들 코어에 대한 원자 조작들은, 캐시 라인이 현재 그것을 가지고 있는 캐시에 의해 해방될 때까지 정지되어야 한다(그것은 또 다른 코어의 캐시로 페치될 수 있다).
이와 같이, 코어가 캐시 라인을 기다리고 있는 동안(즉, 캐시 라인이 그것의 캐시에 존재하지 않는 동안), 그 코어에 대한 원자 조작들은 정지되어 전혀 수행될 수 없다. 마찬가지로, 캐시 라인이 하나의 캐시로부터 다른 캐시로 이동하고 있을 때는, 원자 조작들이 캐시 라인 내의 데이터에 대해서 결코 수행될 수 없다.
이것은, 원자 조작들이 수행 가능하기 전에 캐시 라인이 그들 각각의 캐시로 이동하기를 기다려야 하기 때문에, 모두 다수의 캐시를 이용하는 시스템에 있어서 같은 메모리 위치에 대한 원자 조작들의 스루풋이 비교적 낮을 수 있다고 하는 효과가 있다.
도 1 및 도 2는 이 조작을 나타낸다.
도 1은 4개의 처리 코어 40, 41, 42, 43과 각각의 레벨 1(L1) 캐시 44, 45, 46, 47을 갖는 예시적인 데이터 처리 시스템을 나타낸다. 각 처리 코어는 원자 조작들을 수행할 수 있고, 원자 조작이 정해진 메모리 위치에 대해 수행될 때, 그 메모리 위치에 데이터를 포함하고 있는 캐시 라인이 맨 먼저 메인 메모리(48)로부터 문제의 코어의 각각의 레벨 1 캐시 내의 캐시 라인으로 로드(load)된다. 상기 설명한 것처럼, 한 개 이상의 처리 코어 40, 41, 42, 43가 메인 메모리(48) 내의 같은 위치에 대해 원자 조작을 수행하고 있으면, 메인 메모리(48)로부터의 캐시 라인은 필요한 원자 조작 시맨틱을 유지하기 위해서 연속 방식으로 캐시 라인을 필요로 하는 코어들의 각각의 레벨 1 캐시로 로드될 필요가 있을 것이다. 이것은 캐시 라인이 처리 코어들 중의 하나의 각각의 레벨 1 캐시에 있으면, 캐시 라인이 문제의 코어에 대한 캐시로 페치될 때까지 그 캐시 라인을 필요로 하는 어떤 다른 처리 코어가 그것의 원자 조작들을 정지해야 한다.
도 2a 및 2b는 이 조작을 나타내고, 하나의 예로서 처리 코어들(40) 중의 하나에 대한 원자 조작(이 경우에는 원자 ADD 조작)을 수행하는 스레드 A, B, C, D의 세트(50)를 나타낸다. 이 프로세스의 시작 시에는, 실행될 스레드들(50)이 코어(40)에 의해 실행 준비되지만, 메인 메모리로부터의 관련 캐시 라인(데이터)가 처리 코어(40)용 캐시(41)로 페치되지 않았다고 가정한다.
요청(57)은 관련 캐시 라인을 처리 코어(40)용 캐시(41)로 페치하도록 전송된다. 동시에 페치된 캐시 라인에 대한 공간(58)은 캐시(41) 내에서 따로 설정되어 있다(그렇지만, 캐시 라인은 아직 도착되지 않았다).
그리고 나서, 얼마 후에 문제의 메모리 위치(어드레스)에 데이터를 포함하는 요청된 캐시 라인(51)이 처리 코어(40)용 데이터 캐시(41)에 도착한다. 그 후에 (스레드 A에 대한) 제1 원자 조작(52)이 실행된다. 도 2에 나타낸 바와 같이, 스레드 A(52)에 대한 원자 조작은 1(+1)씩 메모리 어드레스 내의 값을 증분시키는 것이고, 그래서 문제의 메모리 위치에 대한 캐시 라인(51) 내의 값은 1씩(이 경우에 "124"로) 증분된다.
스레드 A는 또한 메모리 어드레스에 대한 이전 값 54(이 경우에 "123")를 처리 코어로 돌려보낸다(이 경우에는 원자 조작이 리턴 타입이라고 가정한다).
도 2a에 나타낸 바와 같이, 스누프(snoop) 요청(59)이 캐시 라인(51) 내의 데이터에 대해서 이루어지고(즉, 시스템의 또 다른 부분이 캐시 라인(51) 내의 데이터를 요구하고), 이것에 응답해서, 캐시 라인(51)이 처리 코어(40)용 데이터 캐시(41)로부터 33 퇴거되는 것으로 가정한다. 따라서, 스레드 B, C, D에 대한 원자 조작은, 처리 코어(40)용 데이터 캐시(41)가 더 이상 관련 캐시 라인을 포함하지 않기 때문에 정지되어야 한다. 이렇게, 도 2a에 나타낸 바와 같이, 캐시 라인을 페치하기 위한 추가 요청(32)이 전송되어야 한다.
그 다음, 관련 캐시 라인이 다시 문제의 처리 코어(40)용 데이터 캐시(41)에 도착하면, 다음 스레드, 스레드 B가 그것의 원자 add 조작(53)을 실행하여 2(+2)씩 메모리 어드레스에 대한 캐시 라인 내의 값을 증분시키고, 또한 메모리 어드레스에 대한 이전 값 56(이 경우에 "124")을 처리 코어로 돌려보낸다.
스누프 요청에 의해 캐시 라인이 데이터 캐시(41)로부터 퇴거되고, 그래서 스레드 C가 그것의 원자 조작을 수행할 수 있기 전에, 캐시 라인이 데이터 캐시(41)에 도착할 때까지 추가 페치 요청 및 대기가 발생한다.
다시 캐시 라인이 처리 코어용 데이터 캐시에 도착하면, 다음 스레드 C가 그것의 원자 조작(55)을 수행하고, 도 2b에 나타낸 것처럼, 스레드 D에 대한 그것의 관련 출력 값 등을 돌려보낸다.
이 조작의 끝에서는, 처리 코어(40)용 데이터 캐시(41) 내의 캐시 라인이, 메인 메모리로 되돌아와서 및/또는 그 코어에 대한 또 다른 코어용 캐시로 전달될 수 있는, 원자 조작들의 축적된 결과를 저장하여 문제의 메모리 위치에서 그것의 원자 조작들을 수행할 것이다.
이 조작에 있어서는, 다수의 스누프 요청들이, 원자 조작들이 수행되고 있는 중에 수신되면, 원자 조작들의 스루풋이 상당히 지연될 수 있는 것을 알 수 있다.
본 출원인은 예를 들면, 한 개 이상의 쉐이더 스테이지들을 포함하는 그래픽 처리 파이프라인에 있어서 다수의 예를 들면 L1, 캐시를 이용하는 시스템에 있어서의 원자 조작의 처리에 대한 개선의 여지가 남아 있다고 믿는다.
본 발명의 제1 국면에 의하면, 실행 스레드들에 대한 원자 메모리 요청들을 개시하도록 작동되는 한 개 이상의 이니시에이터(initiator)와, 원자 메모리 조작이 수행될 때 원자 메모리 조작을 수행하는 데에 필요한 데이터를 저장하기 위해서 사용되는 한 개 이상의 데이터 캐시를 포함하는 데이터 처리 시스템의 작동방법이 제공되고, 상기 방법은,
관련 산술 연산을 갖는 특정 원자 조작을, 같은 메모리 어드레스에 대해 차례로 각각 실행하는 한 개 이상의 실행 스레드들의 세트에 대해서,
상기 세트 내의 제1 스레드에 대하여 상기 원자 조작을 수행하기 전에, 상기 원자 조작을 수행하는 데에 필요한 데이터를 저장하는 데이터 캐시가 상기 원자 조작이 수행되는 메모리 어드레스에 데이터를 이미 저장하고 있는지 여부를 판정하고, 상기 데이터 캐시가 이미 그 데이터를 저장하고 있지 않으면,
상기 원자 조작이 수행되는 메모리 어드레스에 데이터를 포함하고 있는 데이터 항목을 포함하고 있는 캐시 라인을 상기 데이터 캐시로 페치하라는 메모리 요청을 보내고,
상기 원자 조작에 대한 상기 데이터 캐시에 임시 캐시 라인을 할당하며,
상기 원자 조작에 대한 상기 임시 캐시 라인 내에 데이터 항목들을 준비하고,
상기 세트 내의 제1 스레드에 대한 원자 조작용 산술 연산에 대한 오퍼랜드 값을, 상기 임시 캐시 라인에 있어서 상기 원자 조작이 수행되는 메모리 어드레스용 데이터 항목에 저장시키며,
상기 한 개 이상의 실행 스레드들의 세트가 한 개 이상의 스레드를 포함하면, 상기 원자 조작이 수행되는 메모리 어드레스에 데이터를 포함하고 있는 캐시 라인이 상기 데이터 캐시에 도착할 때까지, 차례로 상기 데이터 캐시 내의 상기 임시 캐시 라인에 있어서 상기 원자 조작이 수행되는 메모리 어드레스용 데이터 항목에 대해서 상기 세트 내의 한 개 이상의 다음 스레드에 대하여 상기 원자 조작을 수행하고,
상기 원자 조작이 수행되는 메모리 어드레스에 데이터를 포함하고 있는 캐시 라인이 상기 데이터 캐시에 도착하는 경우에는, 하나의 오퍼랜드로서 상기 임시 캐시 라인 내의 메모리 어드레스용 데이터 항목을 이용해서, 그리고 다른 오퍼랜드로서 도착한 캐시 라인 내의 메모리 어드레스용 데이터 항목을 이용해서 상기 원자 조작용 산술 연산을 수행함으로써, 상기 원자 조작이 수행되는 메모리 어드레스에 대해 원자 메모리 조작들의 결합 결과를 포함하고 있는 결과 데이터 항목을 제공하며,
상기 결과 데이터 항목을 포함하고 있는 결과 캐시 라인을 저장하는 것을 포함한다.
본 발명의 제2 국면에 의하면,
실행 스레드들에 대한 원자 메모리 요청들을 개시하도록 작동되는 한 개 이상의 이니시에이터들과,
원자 메모리 조작이 수행될 때 원자 메모리 조작을 수행하는 데에 필요한 데이터를 저장하기 위해서 사용되는 한 개 이상의 데이터 캐시들을 구비하는, 데이터 처리 시스템에 제공되고,
상기 한 개 이상의 데이터 캐시들은, 관련 산술 연산을 갖는 특정 원자 조작을 같은 메모리 어드레스에 대해서 차례로 각각 실행하는 한 개 이상의 실행 스레드들의 세트에 대해서,
상기 세트 내의 제1 스레드에 대해 상기 원자 조작을 수행하기 전에, 상기 원자 조작을 수행하는 데에 필요한 데이터를 저장하는 데이터 캐시가 이미 상기 원자 조작이 수행되는 메모리 어드레스에 데이터를 저장하고 있는지를 판정하고, 상기 데이터 캐시가 그 데이터를 이미 저장하고 있지 않으면,
상기 원자 조작이 수행되는 메모리 어드레스에 데이터를 포함하고 있는 데이터 항목을 포함하고 있는 캐시 라인을 상기 데이터 캐시에 페치하라는 메모리 요청을 보내고,
상기 원자 조작에 대한 상기 데이터 캐시에 임시 캐시 라인을 할당하며,
상기 원자 조작에 대한 상기 임시 캐시 라인에 데이터 항목들을 준비하고,
상기 세트 내의 제1 스레드에 대한 원자 조작용 산술 연산에 대한 오퍼랜드 값을, 상기 임시 캐시 라인에 있어서 상기 원자 조작이 수행되는 메모리 어드레스용 데이터 항목에 저장시키며,
상기 한 개 이상의 실행 스레드들의 세트가 한 개 이상의 스레드를 포함하면, 상기 원자 조작이 수행되는 메모리 어드레스에 데이터를 포함하고 있는 캐시 라인이 상기 데이터 캐시에 도착할 때까지, 차례로 상기 데이터 캐시 내의 상기 임시 캐시 라인에 있어서 상기 원자 조작이 수행되는 메모리 어드레스용 데이터 항목에 대해서 상기 세트 내의 한 개 이상의 다음 스레드들에 대한 상기 원자 조작을 수행하고,
상기 원자 조작이 수행되는 메모리 어드레스에 데이터를 포함하고 있는 캐시 라인이 상기 데이터 캐시에 도착하는 경우에는, 한 개의 오퍼랜드로서 상기 임시 캐시 라인 내의 메모리 어드레스용 데이터 항목을 이용하여, 그리고 다른 오퍼랜드로서 도착한 캐시 라인 내의 메모리 어드레스용 데이터 항목을 이용해서 상기 원자 조작용 산술 연산을 수행함으로써, 상기 원자 조작이 수행되는 메모리 어드레스에 대해 원자 메모리 조작들의 결합 결과를 포함하고 있는 결과 데이터 항목을 제공하며,
상기 결과 데이터 항목을 포함하고 있는 결과 캐시 라인을 저장하도록 구성된다.
본 발명은 원자 메모리 조작들에 대해 사용되는 메인 메모리로부터의 데이터를 저장하는 다수의 데이터 캐시를 갖는 데이터 처리 시스템에 있어서의 원자 메모리 조작들의 실행에 관한 것이다. 본 발명에 있어서, 원자 메모리 조작이 수행되고, 원자 메모리 조작에 대한 데이터가 원자 메모리 조작이 수행되는 데이터 캐시 내에 존재하지 않을 때, 데이터가 캐시 내에 존재할 때까지 원자 메모리 조작의 실행을 정지하는 것보다는, 원자 조작에 대한 임시 캐시 라인을 캐시에 할당하고, 그리고 나서 원자 메모리 조작을, 캐시 내의 원하는 "참(true)" 캐시 라인의 도착을 기다리고 있는 그 임시 캐시 라인에 대해 수행한다. 또한, 추가로 이하에 설명하는 것처럼, 같은 타입의 다수의 원자 조작들이 임시 캐시 라인에 대해서 수행될 수 있다. 그리고 나서, 메인 메모리로부터의 데이터를 포함하고 있는 캐시 라인이 캐시로 페치될 때, 임시 캐시 라인과 인커밍 캐시 라인(메인 메모리 데이터)을 결합해서 (즉, 문제의 메모리 내의 어드레스에서의 데이터에 대해서 원자 메모리 조작을 수행하도록 병합된) 원자 메모리 조작에 대한 필요한 출력(결과)을 제공한다.
이하에 더 설명하는 것처럼, 이것에 의해 원자 메모리 조작들이 효율적으로 수행될 수 있어, 원자 조작을 위한 메모리 위치에 대한 데이터를 포함하고 있는 캐시 라인이 데이터 캐시에 도착하는 경우, (이하에 더 설명하는 것처럼) 원자 조작들의 시맨틱을 여전히 완벽하게 유지하면서, 축적된 원자 조작들의 세트가 (하나의 클럭 사이클에서) 즉시 캐시 라인에 커밋(committed)될 수 있다. 이것은 캐시 라인이 수행될 원자 메모리 조작들의 세트에 존재해야 하는 시간을 최소화하는 것을 용이하게 한다. 이것은 그리고 나서 상당히 원자 메모리 조작 성능을 향상시킬 수 있고, 다수의 데이터 캐시를 갖는 시스템에 있어서의 원자 메모리 조작에 대한 스루풋을 증가시킬 수 있다.
또한, 본 발명의 방식에 있어서의 이 조작은 데이터 캐시의 레벨에서 수행되기 때문에, 본 발명은 문제의 데이터 캐시 레벨에서의 조작에만 변화를 요청할 수 있고, 데이터 처리 시스템의 어떤 다른 서브시스템(예를 들면 더 낮은 캐시 레벨, 메인 메모리 조작 등)에는 어떤 변화도 요구하지 않는다. 예를 들면, 코히런트(coherent) 메모리 및 원자들을 이미 지지하고 있는 시스템에 있어서는, 본 발명은 예를 들면 L1, 캐시에 대한 국부적인 변화만을 요구할 수 있고, 예를 들면 L1, 캐시가 그것의 마스터 및 메인 메모리 서브시스템과 통신하기 위해 사용하는 어떤 프로토콜들은 본 발명의 사용 및 존재에 영향을 받지 않는다.
이하에 더 설명하는 것처럼, 상기 스텝들은 노 리턴(no return) 원자 및 리턴 원자 양쪽에 요구되지만, 리턴 원자에 대해서는, 추가 스텝들이 요구될 수도 있다(바람직하게는 수행될 수도 있다).
원자 메모리 조작들을 요구할 수 있는 이니시에이터들은 어떤 적절한 프로세서 또는 처리 유닛을 구비할 수 있다. 바람직한 실시예에 있어서는, 그들은 각각의 처리 코어들을 구비한다. 바람직한 실시예에 있어서는, 각 이니시에이터는 명령들을 실행해서 실행 스레드들에 대한 데이터 처리 조작들을 수행하는 한 개 이상의 바람직하게 프로그램 가능한 실행 스테이지들을 포함하는 실행 파이프라인의 바람직하게 프로그램 가능한 실행 스테이지를 구비한다.
상기 설명한 것처럼, 본 발명은 그래픽 처리 시스템에 있어서 특정한 어플리케이션을 가질 것이라는 것을 믿는다. 이와 같이 데이터 처리 시스템은 그래픽 처리 시스템을 구비하는 것이 바람직하고, 이니시에이터는, 그래픽 쉐이더 프로그램들을 실행해서 그래픽 처리 조작들을 수행하는 한 개 이상의 프로그램 가능한 그래픽 쉐이딩 스테이지(쉐이더)의 형태의 실행 스테이지들을 갖는, 그래픽 처리 파이프라인들, 및/또는 그래픽 처리 파이프라인들의 실행 스테이지들을 구비하는 것이 바람직하다. 그렇지만, 본 발명은 CPU와 같은, 데이터 처리 시스템의 다른 형태에도 동등하게 적용 가능하다.
본 발명은 원자 메모리 조작들에 대한 데이터를 저장할 수 있는 다수의 데이터 캐시가 있는 상황에 적용 가능하다. 그것은 원자 조작들을 수행하기 위한 데이터를 저장하는 데에 사용될 수 있는 다수의 데이터 캐시를 갖는 원자 조작들을 수행할 수 있는 싱글 이니시에이터 유닛(예를 들면, GPU)이 있는 시스템에 사용될 수 있고, 및/또는 그것은 원자 메모리 조작들을 수행하기 위한 메인 메모리로부터의 데이터를 저장하기 위해 사용되는 그들 소유의 각자의 데이터 캐시 또는 캐시들을 각각 갖는 다수의 이니시에이터 유닛(예를 들면, GPU)이 있는 상황에서 사용될 수 있다. 바람직한 실시예에 있어서는, 데이터 처리 시스템은 각자의 데이터 캐시를 각각 갖는 복수의 이니시에이터 유닛을 갖는다.
데이터 캐시들은 데이터 처리 시스템의 어떤 적절한 데이터 캐시일 수도 있다. 바람직한 실시예에 있어서는, 그들은 레벨 1(L1) 캐시들이다. 그렇지만, 이것은 필수적인 것은 아니며, 본 발명은 원한다면 다른 캐시 레벨에서 구현될 수 있다(모든 데이터 캐시가 같은 레벨이어야 하고, 바람직하게는 같은 레벨이지만, 그래서 본 발명은 데이터 처리 시스템의 레벨 2 캐시에서 구현되는 경우, 모든 데이터 캐시는 바람직하게는 L2 캐시이다).
본 발명의 방식으로 처리될 수 있는 원자 메모리 조작들은, 어떤 적절한 원하는 원자 메모리 조작들일 수도 있다. 바람직한 실시예에 있어서는, 본 발명의 방식으로 처리되는 특정한 선택 원자 메모리 조작들의 세트가 있다. 바람직한 실시예에 있어서는, 본 발명의 방식으로 처리되는 원자 메모리 조작들은, 원자의 일부로서 수행되는 산술 연산이 연관적인, 바람직하게는 가환적이며 연관적인 원자 조작들을 포함한다. 그렇지만, 이것은 필수적인 것이 아니며 본 발명은 또한 원한다면 이들 특성을 가지 않는 Swap(Exchange) 및 Compare-And-Swap(Compare-and-Exchange)과 같은, 다른 원자 조작들에 대해 사용될 수 있다.
바람직한 실시예에 있어서는, 본 발명의 방식으로 처리되는 원자 메모리 조작들은, Integer Add; Bitwise AND, OR, XOR; Minimum Value; Maximum Value; Saturating unsigned integer add; Integer multiply; floating-point add; floating point multiply; integer add, modulo a constant K 중의 한 개 이상 및 바람직하게는 모두를 포함한다.
본 발명의 방식으로 처리되는 원자 메모리 조작들은, 바람직하게는 (이하에 설명하는 것처럼, 이것은 필수적인 것은 아니지만) 적절한 "아이덴티티 값(identity value)"을 갖는다. 이 "아이덴티티 값"은, 변경되지 않은 산술 연산에 대해 아이덴티티 값과 결합되는 값을 남기는 원자 조작용 산술 연산에 대한 값이다(즉, 정해진 산술 연산이 오퍼레이터 %로 표시되면, 산술 연산의 아이덴티티 값은 값 V이므로 모든 가능한 입력 값들 X에 대해서는, V % X = X % V = X이다). 이와 같이, 예를 들면, integer ADD 조작에 대해서는, 아이덴티티 값이 "0"이고, bitwise OR 또는 bitwise XOR 조작에 대해서는, 아이덴티티 값 = "0"이며, bitwise AND에 대해서는, 아이덴티티 값이 모든 1 비트 벡터이고, minimum value 조작에 대해서는, 아이덴티티 값이 메모리 값의 포맷의 가장 큰 표현 가능한 수이고, maximum value 조작에 대해서는, 아이덴티티 값이 메모리 값의 포맷(등)의 가장 작은 표현 가능한 수이다.
그에 대응하여 다른 원자 메모리 조작들에 대한 아이덴티티 값들이 결정될 수 있다.
원자 조작이 수행되는 메모리 어드레스에 데이터를 포함하고 있는 캐시 라인을 데이터 캐시로 페치하라는 메모리 요청은, 예를 들면 문제의 메모리 시스템에 의존해서, 원하는 대로 전송 및 구성될 수 있다.
임시 캐시 라인은, 예를 들면, 문제의 캐시 및/또는 시스템에 대한 보통의 캐시 라인 할당 프로세스에 따라 어떤 원한 적절한 방식으로 원자 조작에 대해 할당될 수 있다.
임시 캐시 라인은 바람직하게는 원자 조작들의 세트에 대한 적절한 메모리 어드레스; 그것이 본 발명의 방식의 조작을 위한 임시 캐시 라인이라는 사실; 및 이것이 축적하는 원자 조작용 산술 연산 중의 한 개 이상 및 바람직하게는 모두(가 적힌 태그가 붙여져 있다)를 가지고 있다.
임시 캐시 라인은 바람직하게는 (즉, 임시 캐시 라인(같은 원자 조작, 같은 메모리 어드레스(또는 적어도 같은 캐시 라인 내부의 메모리 어드레스)의 태그와 매치하는) 문제의 적절한 원자 메모리 조작들의 축적에 단지 사용될 수 있고, 바람직하게는 그렇지 않으면 판독, 기록, 스누프, 또는 어떤 다른 방식으로 교류될 수 없다. 즉, 임시 캐시 라인은, 그것이 처리하도록 의도된 것인 원자 조작들의 특정한 서브세트보다는 모든 다른 목적을 위해서, 효과적으로 시스템에서는 볼 수 없도록("존재"하지 않도록) 구성되는 것이 바람직하다.
바람직한 실시예에 있어서는, 임시 캐시 라인에 태그를 붙이기 위해서 사용되는 "원자 조작"은, 적어도 선택된 원자 조작들에 대해서, 수행될 산술 연산의 형태뿐만 아니라, 조작 사이즈도 구별한다. 예를 들면, 32비트 원자 ADD 및 64비트 원자 ADD는 2개의 상이한 조작이 되도록 고려되는 것이 바람직하다. 마찬가지로, 기본 구현이 엔디언(endianness)을 구별하면, 이것은 또한 적어도 선택된 원자 조작의 형태에 대해서, 고려되는 것이 바람직하다. (그렇지만, 이들 구별은 원자 조작의 모든 형태에 필요하지 않다.)
임시 캐시 라인의 "데이터" 부는 보통의 캐시 라인에 대해서는, 한 개 이상의 데이터 항목(데이터 엔트리)을 포함할 것이다. 임시 캐시 라인 내의 데이터 항목의 수는 캐시의 구성(예를 들면, 각 캐시 라인이 얼마나 많은 데이터를 저장할 수 있는지) 및 문제의 원자 조작의 종류(예를 들면, 그것이 32 또는 16비트 값 등에 작동하는지)에 의존할 것이다. 임시 캐시 라인은 수행되고 있는 원자 조작에 적당한 크기의 데이터 항목들로 분할되어야 한다. 임시 캐시 라인 내에는 단 한 개의 데이터 항목만이 있지만, 일반적으로는 복수의 데이터 항목이 있을 것이다(원자 조작에 대한 메모리 어드레스에 대응하는 캐시 라인 내의 특정한 데이터 항목은, 메모리 어드레스로부터의 데이터를 포함하고 있는 캐시 라인의 도착을 기다리고 있는 원자 조작들의 결과들을 축적하는 데에 사용된다).
임시 캐시 라인 내에 데이터 항목들을 준비하는 것은, 문제의 메모리 어드레스에 대한 데이터를 포함하고 있는 캐시 라인의 도착을 기다리고 있는 스레드 또는 스레드들에 대한 원자 조작들을 임시 캐시 라인이 적절히 축적하는 것을 허용하도록 한 것이다.
하나의 바람직한 실시예에 있어서는, 임시 캐시 라인 내의 각 데이터 항목은, 그것을 문제의 원자 조작용 산술 연산에 대한 아이덴티티 값으로 초기화(설정)함으로써 준비된다. 이와 같이, 바람직한 실시예에 있어서는, 원자 조작에 대한 임시 캐시 라인은, 임시 캐시 라인 내의 데이터 항목들의 모두를 문제의 원자 조작용 산술 연산에 대한 아이덴티티 값으로 설정함으로써 준비된다. (상기 설명한 것처럼, 산술 연산의 "아이덴티티 값"은 산술 연산이 또 다른 값으로 수행될 때, 다른 값이 변경되지 않은 채로 남아 있는 값이다.)
또 다른 바람직한 실시예에 있어서는, 임시 캐시 라인 내의 각 데이터 항목은 그것을 무효라고 표시함으로써 (즉, 실제로는 "초기화되고 있지 않는다"고 표시함으로써) 준비된다. 각 데이터 항목은 예를 들면 이 목적을 위해 관련된 무효 또는 초기화되지 않은 비트 또는 플래그를 가질 수 있다. 그러면 이것에 의해 아이덴티티 값을 갖지 않는 원자 산술 연산들이 본 발명의 방식으로 처리될 수 있다.
따라서 또 다른 바람직한 실시예에 있어서는, "초기화되지 않은" 비트("무효" 비트)가, 아이덴티티 값 대신에, 그것을 준비하는 경우에 임시 캐시 라인 내의 데이터 항목마다 저장된다. (이것은 원한다면, 산술 연산이 아이덴티티 값을 갖는 경우에도 행해질 수 있다.) (임시 캐시 라인 내의 데이터 항목이 "초기화되지 않은" 것으로 표시되는 경우, 데이터 항목이 유효 데이터 값을 포함하지 않을 것이지만, 일단 "초기화"되면, 데이터 항목이 유효 데이터 값을 포함할 것이라는 것을 알 수 있을 것이다.)
이 경우에, 원자 조작들의 모두가 기본 스토리지 유닛(바이트 등)의 배수인 크기를 가지고 있으면, 임시 캐시 라인 내의 각 데이터 항목에 대해 적어도 한 개의 그러한 비트가 존재하고 있는 한은, 데이터 항목마다 대신에 스토리지 유닛마다 초기화되지 않은 비트를 제공하는 것이 가능할 것이다. 이 경우에, 임시 캐시 라인이 예를 들면 비트마다 더티 비트(per-byte dirty-bits)를 이미 추적할 수 있는 캐시에 저장되면, 더티 비트들은, 원한다면, 초기화되지 않은 비트(무효 비트) 기능을 제공하기 위해서 사용될 수 있다.
임시 개시 라인이 준비된 후에는, 그렇지만 메모리로부터의 캐시 라인이 도착하기 전에는, 스레드들의 세트에 대한 원자 조작이 데이터 캐시 내의 임시 캐시 라인에 대해서 수행된다(즉, 스레드들에 대한 원자 조작들은, 원자 조작이 수행되는 메모리 어드레스에 대응하는 임시 캐시 라인 내의 데이터 항목에 대해서 수행된다).
본 발명은 단지 문제의 메모리 어드레스에 대해서 수행되는 단 한 개의 원자 메모리 요청이 있는 경우에 사용될 수 있다(즉, 실행 스레드들의 세트는 단 한 개의 스레드만을 구비한다). 그렇지만, 본 출원인은 정해진 실행 스레드들의 세트가, 예를 들면, 같은 메모리 어드레스에 대해서 같은 원자 조작을 차례로 각각 실행하는 상황이 있을 수 있다는 것을 인식했다. 이 경우에, 임시 캐시 라인은 메모리로부터의 캐시 라인이 데이터 캐시에 도착하기를 기다리는 동안 복수의 원자 조작들의 결과들을 축적하기 위해서 사용될 수 있고, 바람직하게는 사용된다.
이와 같이, 특히 바람직한 실시예에 있어서는, 같은 메모리 어드레스에 대해서 같은 원자 조작을 수행하는 복수의 실행 스레드들의 세트가 있고, 일단 원자 조작을 위한 임시 캐시 라인이 준비되었으면, 원자 조작이 수행되는 메모리 어드레스에 데이터를 포함하고 있는 캐시 라인이 데이터 캐시에 도착할 때까지, 원자 조작이, 스레드들의 세트 내의 각 스레드에 대한 데이터 캐시 내의 임시 캐시 라인에 대해서 차례로 수행된다(그러면 임시 캐시 라인은 스레드들의 세트에 대한 원자 조작의 결합 결과를 저장할 것이다). 그리고 나서 임시 캐시 라인과 도착하는 캐시 라인을 결합하여, 원자 조작들이 임시 캐시 라인에 대해서 수행되었던 스레드들의 세트에 대해서는 원자 조작이 수행되는 메모리 어드레스에 원자 메모리 조작의 결과를 포함하고 있는 결과 캐시 라인을 제공할 수 있다.
이 경우에, 메모리 어드레스에 대한 데이터를 포함하고 있는 캐시 라인이 도착하기 전에 임시 캐시 라인에 대해서 스레드들의 세트 내의 모든 스레드들에 대한 원자 조작이 수행될 수 있을지도 모르고, 또는 메모리 어드레스에 대한 데이터를 포함하고 있는 캐시 라인이 도착하기 전에 임시 캐시 라인에 대해서 스레드들의 세트 내의 스레드들 중의 모두가 아니라 일부만이 처리될 수 있을지도 모른다.
이 조작을 용이하게 하기 위해서, 각 데이터 캐시는 바람직하게는 관련 원자 조작들을 갖는 실행 스레드들을 저장하는 관련 큐(queue)를 갖는다(인커밍 원자 메모리 요청들의 큐를 유지한다). 그리고 나서, 임시 캐시 라인이 정해진 원자 조작 및 메모리 어드레스에 대해서 할당될 때는, 적절한 요청들이 큐로부터 취득되어 임시 캐시 라인에 대해서 차례로 수행될 수 있다. 큐 내의 각 엔트리는 바람직하게는 메모리 어드레스, 데이터 항목 및 그것과 관련된 메모리 요청에 필요한 어떤 다른 메타데이터를 갖는다.
이와 같이, 바람직한 실시예에 있어서는, 임시 캐시 라인이 준비된 후에는, 그렇지만 메모리로부터의 데이터(캐시 라인)가 도착하기 전에는, 큐로부터 각 원자 메모리 요청을 취득해서 그것을 마치 임시 캐시 라인이 보통의 캐시 라인이었던 것처럼 임시 캐시 라인에 대해서 차례로 수행함으로써, 데이터 캐시가, 같은 메모리 어드레스를 사용하는 대기(대응하는) 원자 메모리 조작들을, 임시 캐시 라인에 축적한다. 이것은, 문제의 메모리 위치에 대한 "참" 데이터를 포함하고 있는 캐시 라인이 데이터 캐시에 도착할 때까지, 같은 메모리 위치를 이용해서 (만약 있다면) 그 메모리 위치에 대해 같은 산술 연산을 수행하는 각 대기 원자 메모리 요청에 대해서 반복된다.
임시 캐시 라인에 대해서 제1 원자 조작을 수행하는 것은 임시 캐시 라인 내의 적절한 데이터 항목에 (제1 스레드에 대한) 제1 원자 조작용 산술 연산(원자 오퍼랜드)에 대한 오퍼랜드 값을 저장해야 하고, 바람직하게는 저장한다. 이 원자 오퍼랜드 값은, 본 기술분야에서 알려진 것처럼, 보통은 제1 스레드에 대한 원자 조작용 레지스터 값일 것이고, 바람직한 실시예에 있어서는 레지스터 값이지만, 마찬가지로 원자 조작이 분명한 레지스터 값을 가지고 있지 않은 암시된 오퍼랜드 값일 수도 있다.
이와 같이, 임시 캐시 라인 내의 데이터 항목들이 임시 캐시 라인에 있어서의 원자 조작에 대한 아이덴티티 값을 저장함으로써 준비되는 경우에는, 이것은 (아이덴티티 값인) 문제의 임시 캐시 라인 내의 메모리 위치에 대한 현재의 콘텐트를 판독(페치)하고, 원자 조작에 대한 제1 스레드의 (제1 원자 조작의) 오퍼랜드 값과 아이덴티티 값을 이용해서 원자 조작용 산술 연산을 수행하고, 그 다음에 그 결과를 임시 캐시 라인(내의 적절한 데이터 항목)에 라이트백함으로써 행해질 수 있고, 바람직하게 행해진다.
이와 같이, 하나의 바람직한 실시예에 있어서는, 제1 스레드에 대한 원자 조작용 오퍼랜드 값은, 임시 캐시 라인에 저장된 원자 조작용 산술 연산에 대한 아이덴티티 값과 원자 조작에 대한 제1 스레드의 오퍼랜드 값을 이용해서 원자 조작용 산술 연산을, 제1 스레드에 대해 수행함으로써 임시 캐시 라인 내에 저장된다.
임시 캐시 라인 내의 데이터 항목들이, 무효한(초기화되지 않은) 비트들로 그들을 표시해(flagging) 놓음으로써 준비되는 경우, 임시 캐시 라인 내의 적절한 데이터 항목에 제1 원자 조작에 대한 오퍼랜드 값을 저장하는 것은, 임시 캐시 라인 내의 문제의 데이터 항목에 문제의 원자 메모리 요청에 대한 오퍼랜드 값을 저장(기록)함으로써 행해질 수 있고, 바람직하게는 행해지며, 이 데이터 항목은 초기화된(유효한) 것으로 표시된다. 또한, 원자 조작에 대한 아이덴티티 값은, 임시 캐시 라인 내의 초기화되지 않은(무효한) 데이터 항목에 기록될 수 있고, 그러면 원자 조작이 상기 설명한 것처럼 아이덴티티 값을 이용해서 수행된다(여기서 데이터 항목은 다시 초기화된(유효한) 것으로 표시된다).
임시 캐시 라인 내의 적절한 데이터 항목에 (제1 스레드에 대한) 제1 원자 조작에 대한 오퍼랜드 값을 저장하기 위한 다른 방식도 원한다면 사용될 수 있다. 예를 들면, 임시 캐시 라인 내의 데이터 항목에 오퍼랜드 값을 전송하는 "무브(move)" 또는 "바이패스(bypass)" 조작 또는 명령도 원한다면 사용될 수 있다. 일반적으로, 임시 캐시 라인 내의 적절한 데이터 항목에 제1 원자 조작에 대한 오퍼랜드 값을 저장할 수 있는 어떤 조작이든 사용될 수 있다.
임시 캐시 라인에 대해 수행되는 어떤 다음의 원자 조작에 대해서는, 바람직하게는 임시 캐시 라인 내의 문제의 메모리 위치에 대한 현재의 콘텐트(데이터 항목)이 페치되고, 원자 조작용 산술 연산이, 임시 캐시 라인에 저장된 값과 문제의 스레드에 대한 원자 조작용 오퍼랜드(예를 들면 레지스터) 값을 이용해서 수행되고, 그 다음에 임시 캐시 라인 내의 값에 대한 원자 조작의 결과가 임시 캐시 라인 내의 적절한 데이터 항목(위치)에 라이트백된다.
이와 같이, 바람직한 실시예에 있어서는, 임시 캐시 라인에 대해서 수행되는 원자 조작들을 갖는 스레드들의 세트가 있고, 임시 캐시 라인이 원자 조작용 아이덴티티 값으로 초기화되었을 경우에는, 제1 스레드가 (임시 캐시 라인에 저장된) 원자 조작용 산술 연산에 대한 아이덴티티 값과 원자 조작에 대한 제1 스레드의 오퍼랜드 값을 이용해서 원자 조작용 산술 연산을 수행하고, 그 결과를 임시 캐시 라인에 라이트백할 것이다. 제2 스레드는 (지금부터 원자 조작용 제1 스레드의 오퍼랜드 값인) 임시 캐시 라인에 저장된 값과 원자 조작용 제2 스레드의 오퍼랜드 값을 이용해서 원자 조작용 산술 연산을 수행하고, 그 결과를 임시 캐시 라인에 라이트백할 것이다. 제3 스레드(존재한다면)는 그 다음에 (지금부터 원자 조작용 제1 및 제2 스레드의 오퍼랜드 값의 결합 결과인) 임시 캐시 라인에 저장된 값과 원자 조작용 제3 스레드의 오퍼랜드 값을 이용해서 원자 조작용 산술 연산을 수행하고, 그 결과를 스레드들의 세트 내의 다른 스레드에 대한 임시 캐시 라인 등에 라이트백하고, 그것에 의해 스레드들의 세트에 대한 산술 연산의 결합 결과를 임시 캐시 라인에 저장할 것이다.
그에 대응하여, 원자 조작이 임시 캐시 라인 내의 "초기화되지 않은" 데이터 항목에 대해 수행되는 경우, 문제의 원자 메모리 요청에 대한 오퍼랜드 값이 바람직하게는 임시 캐시 라인 내의 문제의 데이터 항목에 저장되고, 그 데이터 항목은 그리고 나서 초기화된(유효한) 것으로 표시된다. 임시 캐시 라인 내의 데이터 항목에 대한(즉, "초기화된"(유효한) 데이터 항목에 대한) 다음 원자 조작들은 임시 캐시 라인에 저장된 값을 이용해서, 보통의 방식으로 수행될 수 있다.
이와 같이, 바람직한 실시예에 있어서는, 임시 캐시 라인에 대해서 수행되는 원자 조작들을 갖는 스레드들의 세트가 있고, 임시 캐시 라인이 초기화되지 않은(무효한) 비트들을 이용해서 준비되었던 경우에는, 제1 스레드는 원자 메모리 요청에 대한 그것의 오퍼랜드 값을 임시 캐시 라인 내의 문제의 데이터 항목에 효율적으로 기록할 것이고, 그 데이터 항목을 초기화된(유효한) 것으로서 표시해 놓을 것이다. 제2 스레드는 그 다음에 (지금부터 원자 조작용 제1 스레드의 오퍼랜드 값인) 임시 캐시 라인에 저장된 값과 원자 조작용 제2 스레드의 오퍼랜드 값을 이용해 원자 조작용 산술 연산을 수행하고, 그 결과를 임시 캐시 라인에 라이트백할 것이다. 제3 스레드(존재한다면)는 그 다음에 (지금부터 원자 조작용 제1 및 제2 스레드의 오퍼랜드 값의 결합 결과인) 임시 캐시 라인에 저장된 값과 원자 조작용 제3 스레드의 오퍼랜드 값을 이용해 원자 조작용 산술 연산을 수행하고, 원한다면, 그 결과를 스레드들의 세트 내의 다른 스레드들에 대한 임시 캐시 라인 등에 라이트백함으로써, 스레드들의 세트에 대한 산술 연산의 결합 결과를 임시 캐시 라인에 저장할 것이다.
일단 원자 조작이 수행되는 메모리 어드레스에 데이터를 포함하고 있는 캐시 라인이 데이터 캐시에 도착하면, 그 캐시 라인은, 오퍼랜드들로서 캐시 라인들 내의 (문제의 메모리 어드레스에 관한) 데이터 항목들의 각각의 쌍을 이용해서 원자 조작용 산술 연산을 수행함으로써 (예를 들면, 원자 조작이 원자 부가인 경우에 (각 캐시 라인으로부터의 하나) 데이터 항목들의 각각의 쌍을 이용해서 원자 부가를 수행함으로써) 임시 캐시 라인과 결합되어, "결과" 캐시 라인을 제공한다.
바람직한 실시예에 있어서는, 결합 조작은 또한 "결과" 캐시 라인 내의 어떤 다른 데이터 항목들이 이들 데이터 항목에 대한 (즉, "참" 캐시 라인에 있던) 메모리로부터 페치된 값을 포함한다는 것을 보증한다.
이와 같이, 예를 들면, 임시 캐시 라인이 각 데이터 항목을 산술 연산용 아이덴티티 값으로 설정함으로써 준비되었던 경우에, 원자 조작이 수행되는 메모리 어드레스에 데이터를 포함하고 있는 캐시 라인이 데이터 캐시에 도착하면, 그 캐시 라인은 바람직하게는 캐시 라인들 내의 데이터 항목들의 각각의 쌍에 대한 원자 조작용 산술 연산을 수행함으로써 (예를 들면, 원자 조작이 원자 부가인 경우에 데이터 항목들의 각각의 쌍에 대한 원자 부가(각 캐시 라인으로부터의 하나)를 수행함으로써) 임시 캐시 라인과 결합되어, "결과" 캐시 라인을 제공한다.
이에 대응하여, "초기화되지 않은" 비트들이 임시 캐시 라인을 준비하기 위해서 사용되었던 경우에는, 이 프로세스는 바람직하게는 임시 캐시 라인 내의 어떤 "초기화되지 않은" 데이터 항목들에 대한 인커밍 캐시 라인 내의 데이터 항목들을 변경되지 않은 "결과" 캐시 라인에 복사하는 것을 포함한다(즉, 임시 캐시 라인 내의 어떤 초기화되지 않은 데이터 항목들에 의해 결합 조작이 단지 변경되지 않은 인커밍 캐시 라인으로부터의 대응하는 데이터를 이용하게 된다).
결합된 결과 캐시 라인은 데이터 캐시에 기록되어야 한다. 신규 캐시 라인은 이 목적을 위해서 할당될 수 있지만, 바람직한 실시예에 있어서는, 적어도 노 리턴 원자들에 대해서는, 현존하는 임시 캐시 라인이 결과 캐시 라인을 저장하는 데에 사용된다. 결과 캐시 라인은 일단 발생되었으면 보통의 방식으로 (예를 들면, 또 다른 데이터 캐시에 의해) 사용하기 위해 해방될 수 있고, 바람직하게는 즉시 해방된다(즉, 그것은 "임시" 캐시 라인으로서 표시되지 않고 및/또는 더 이상 표시되지 않는다).
원자 조작을 이용해서 캐시 라인들을 결합하는 상기 조작은 원자 조작들의 세트에 대한 메모리 위치에 적절한 결과 값을 제공할 것이다. 이와 같이 "노 리턴" 원자에 대해서는, 프로세스가 이 시점에서 정지될 수 있다.
그렇지만, 원자가 "리턴" 변이체인 경우에는, 각 개개의 스레드가 그 개개의 스레드에 대한 원자 조작이 수행되기 전에 메모리 위치에 존재했던 데이텀을 리턴하는 것이 또한 필요하다. 이것을 달성하기 위해서, 메모리 어드레스에 대한 최종 결과를 제공하기 위해서 상기 방식으로 캐시 라인들을 결합할 뿐만 아니라, 각 개개의 스레드가 그것의 적절한 값을 리턴하는 것을 보증하는 것이 또한 필요하다.
이 조작을 용이하게 하기 위해서, 바람직한 실시예에 있어서는, 적어도 리턴 원자 조작에 대해서는, (스레드에 대한) 원자 조작이 임시 캐시 라인에 대해서 수행될 때, 스레드에 대한 원자 메모리 조작이 이니시에이터로 돌아가지 않고 대신 임시 캐시 라인의 결합 조작 및 메모리 어드레스에 대한 페치된 캐시 라인이 완료되었을 때까지 정지된다. 이것을 하기 위해서, 원자 메모리 조작은 바람작하게는 정지된 메모리 요청들에 대한 버퍼에 있다. 버퍼에 저장되는 각 원자 메모리 조작은 바람직하게는 그것과 관련된 스레드의 아이덴티티(그래서 원자 조작의 결과는 정확한 장소로 리턴될 수 있다), 문제의 원자 조작, 및 원자 조작에 대한(에 필요한) 어떤 인수(arguments)를 가지고 있었다. 그에 대응하여, 정지된 메모리 요청에 대한 버퍼 내의 각 엔트리는 바람직하게는 메모리 어드레스, 데이터 항목 및 그것과 관련된 메모리 요청에 필요한 어떤 다른 메타데이터를 가지고 있다.
하나의 바람직한 실시예에 있어서, 원자 메모리 요청이 "정지된 요청" 버퍼에 놓여 있을 때는, 그것의 원래의 인수 값을 유지한다. 또 다른 바람직한 실시예에 있어서는, 그것은 그것의 인수 값을 임시 캐시 라인으로부터 판독된 데이터 값으로 교체한다. 바람직한 실시예에 있어서는, 이들 접근법 중의 어느 것을 사용할지가 문제의 원자 조작의 형태에 의존해서 선택될 수 있다.
그러면 원자 메모리 요청은 바람직하게는 "정지된(stalled)" 것으로서 표시된다.
그리고 나서, 일단 임시 캐시 라인과 인커밍 "참" 캐시 라인을 결합해서 결과 캐시 라인을 제공했었다면, 문제의 메모리 어드레스와 관련된 어떤 정지된 메모리 요청들은 바람직하게는 인커밍 캐시 라인으로부터 메모리 어드레스에서의 데이터를 이용해서 수행된다. 이것을 수행하기 위해서, 적절한 정지된 메모리 요청들이 바람직하게는 차례로 버퍼로부터 판독되어 수행된다.
이 조작을 용이하게 하기 위해서, 인커밍 캐시 라인 내의 데이터가 바람직하게는 정지된 원 조작들이 수행되는 동안 데이터 캐시 내에 보유된다. 이것은 예를 들면 인커밍 캐시 라인의 데이터를 (임시 캐시 라인이라고 표시되는 것이 바람직한) 또 다른 캐시 라인에 복사함으로써 원하는 대로 달성될 수 있다. 바람직한 실시예에 있어서는, 인커밍 캐시 라인은 일단 결합 조작이 완료되었으면 임시 캐시 라인이라고 표시되는 것이 바람직하다(원자 조작들의 세트가 데이터 캐시 내에 계속 보유되기 전에 메모리 어드레스로부터의 원래의 데이터). 이것은, 캐시 라인이 다른 원자 조작 등이 필요로 할 수도 있는 문제의 메모리 어드레스에 대한 "참" 데이터를 지금부터 포함하는 신규 결합된 결과 캐시 라인이기 때문에 가능하다.
정지된 메모리 요청들은 문제의 원자 조작에 대해 적절한 방식으로 완료되어야 한다.
이와 같이, 각 정지된 원자 메모리 요청에 대해서는, 임시 캐시 라인의 콘텐츠와 정지된 요청의 저장된 데이터 항목(인수 값)이 판독되는 것이 바람직하고, 그리고 나서 원자 산술 연산을 이용해서 그들을 적절히 결합하는 것이 바람직하며, 적절한 값은 이니시에이터로 리턴된다.
이 점에 있어서는, 원자 조작을 완료하기 위해 수행하는 정확한 동작은, 원자 조작이 정지된 요청들 버퍼 내에 놓여 있었을 때 정지된 원자 조작의 원자 인수 값이 (상기 설명한 것처럼) "유지" 또는 "교체"되었는지 여부에 의존할 것이다
원자 인수 값들이 "교체"되었으면, 바람직한 실시예에 있어서, 각 정지된 원자 메모리 요청에 대해서는, 메모리로부터의 캐시 라인의 이전 콘텐츠를 포함하고 있는 임시 캐시 라인을 판독하고, 판독한 값을, 원자 조작용 산술 연산을 이용해서 (정지된 요청들 버퍼 내에서) 원자 요청의 오퍼랜드 값(데이터 항목)과 결합하고, 그리고 나서 결합된 값을 이니시에이터로 돌려보낸다. 메모리로부터의 캐시 라인의 이전 콘텐츠를 포함하고 있는 임시 캐시 라인은 그 자체가 변경되지 않은 채로 남아 있다.
원자 인수 값들이 "유지"되었으면, 바람직한 실시예에 있어서, 각 정지된 원자 요청에 대해서는, 메모리로부터의 캐시 라인의 이전 콘텐츠를 포함하고 있는 임시 캐시 라인을 판독하고, 원자 판독 변경 기록 조작을 임시 캐시 라인에 대해서 수행하며, 임시 캐시 라인으로부터 판독된 오래된 값을 이니시에이터로 돌려보낸다. 즉, 이 경우에, 정지된 원자 메모리 조작은 바람직하게는 캐시 라인으로부터 그 값을 판독하고, 판독한 값을 그것의 이니시에이터로 돌려보내며, 판독한 값을 이용해서 그것의 원자 조작을 수행하고 원자 조작의 결과를 캐시 라인으로 라이트백한다.
바람직한 실시예에 있어서는, (각각의) 데이터 캐시는 정해진 임시 캐시 라인에 대해서 추적하고, 그 정지된 메모리 엔트리들은 메모리("참" 캐시 라인)로부터의 데이터를 기다리면서 파킹된다. 그리고 나서, 임시 캐시 라인과 "참" 캐시 라인을 결합한 후에, 수행될 관련 정지된 원자 메모리 요청들을, 추적 정보를 이용해서 식별하는 것이 바람직하다.
정지된 원자 메모리 요청들이 임시 캐시 라인으로부터 판독된 데이터 값으로 교체된 그들의 인수 값들을 갖는 경우의 방식에서 초기화되지 않은 비트들이 사용되면, 임시 캐시 라인으로부터 판독되어 메모리 요청과 함께 저장되는 값은, 정지된 메모리 요청들 버퍼 내에 놓여 있을 때, 초기화되지 않은 비트들을 그것과 함께 전달해야 하고, 바람직하게는 전달한다.
노 리턴 원자들의 경우에도, 엄격한 메모리 순서가 시행되는 것을 필요로 하는 데이터 처리 시스템에 있어서의 상기 정지된 원자 메모리 요청 "리플레잉(replaying)" 동작을 수행하는 것이 또한 필요할 수도 있다.
같은 캐시 라인에서 모두 나타나는 인접해 배치된 메모리 어드레스들에 대해서 복수의 원자 조작들을 수행하는 경우에, 단 한 개의 임시 캐시 라인을 이용해서 복수의 원자 메모리 조작들에 대한 결과들을 축적할 수 있고, 바람직하게는 축적한다. 이와 같이, 바람직한 실시예에 있어서는, 단 한 개의 임시 캐시 라인을 이용해서 상이한 메모리 어드레스들을 각각 이용하는 복수의 원자 메모리 조작들에 대한 결과들을 축적한다. 이와 같이, 바람직한 실시예에 있어서는, 원자 조작들이 수행되는 정해진 임시 캐시 라인에 다수의 데이터 항목이 있다.
또한, 같은 캐시 라인에서 모두 나타나는 메모리 어드레스들과 각각 관련된 복수의 임시 캐시 라인들을 동시에 할당하고, 그리고 나서 "참" 캐시 라인이 데이터 캐시에 도착할 때 개별적으로 각각의 임시 캐시 라인과 "참" 캐시 라인을 결합하는 것이 가능할 것이다.
상기로부터 알 수 있는 것처럼, 캐시 라인 결합(병합) 조작을 수행한 후에는, 다른 데이터 캐시들로부터의 스누프(snoops)에 의해 "참" 캐시 라인이 정지된 메모리 요청들의 스풀링(spooling)이 완료되기 전에 메모리 캐시로부터 사라지게 된다. 이 경우에, 같은 메모리 어드레스에 대해서 신규 원자 요청이 나타나면, 같은 메모리 어드레스에 대해 오래된 임시 캐시 라인이 여전히 존재하더라도, 메모리 어드레스에 대한 신규 임시 캐시 라인이 할당되는 것이 바람직하다. 이 경우에, 어떤 임시 캐시 라인 히트들(hits)은, 오래된 임시 캐시 라인이 아닌, 신규 임시 캐시 라인을 히트해야 하고, 바람직하게는 히트한다. 이것을 용이하게 하기 위해서, 캐시 라인 결합 프로세스는 또한 오래된 임시 캐시 라인들에 히트를 주는 것을 방지하기 위해서 문제의 임시 캐시 라인의 상태를 변경하는 것이 바람직하다.
바람직한 실시예에 있어서는, 임시 캐시 라인의 어드레스와는 매치하지만 임시 캐시 라인의 원자 조작과는 매치하지 않는 메모리 액세스들이 시도되면, 캐시 라인 병합 프로세스가 현존하는 임시 캐시 라인에 대해서 완료되었을 때까지 시도된 액세스가 정지되거나, 또는 추가 임시 캐시 라인이 메모리 어드레스에 대한 각 별개의 원자 조작에 대해서 할당된다. 후자의 경우에, 외부 데이터(캐시 라인)가 메모리로부터 도착하는 경우에는, 다수의 캐시 라인 "병합" 조작들이 메모리 어드레스에 묶여 있는 각 임시 캐시 라인에 대해서 수행되는 것이 바람직하다. 바람직하게는 이들 접근법 중의 어느 것을 사용할지가 상이한 원자 조작들에 대해서 선택될 수 있다.
상기는 원자 조작에 필요한 데이터가 데이터 캐시에 존재하지 않는 경우의 상황을 설명한다. 원자 조작에 필요한 메인 메모리로부터의 데이터가 이미 관련된 데이터 캐시에 존재하면, 원자 조작은 보통의 방식으로 그 데이터를 데이터 캐시 내에 저장하는 캐시 라인에 대해서 간단히 수행될 수 있다.
원자 조작들을 수행하기 위한 명령들은, 실행 스테이지에 대한 컴파일러에 의해 (실행 파이프라인의) 실행 스테이지에 대한 명령 스트림(instruction stream)에 포함될 것이다. 이와 같이, 그래픽 처리 시스템의 경우에는, 그래픽 처리 파이프라인에 대한 쉐이더 컴파일러는 이 조작을 수행하는 것아 바람직하다. 컴파일러는 예를 들면, 실행 파이프라인을 포함하는 데이터 처리 시스템의 호스트 프로세서에서 작동될 수 있고, 바람직한 실시예에 있어서는 작동된다(실행 파이프라인은, 호스트 프로세서와 관련 있는 그래픽 프로세서와 같은, 또 다른 프로세스 위에 있다(그래서 컴파일러 및 컴파일된 코드(compiled code)는 모두 전체 데이터 처리 시스템, 예를 들면 그래픽 처리 시스템 내부의 별개의 프로세서들에서 작동된다)). 그렇지만, 컴파일러가 컴파일된 코드와 같은 프로세서에서 작동되고, 또는 그 컴파일러가 별개의 프로세서에서 작동되는 등, 프로그램이 별개의 시스템 위에 프리 컴파일(pre-compiled)되어 컴파일된 형태로 분배되는 등, 다른 방식도 가능할 것이다.
그래픽 처리 파이프라인의 경우에, 실행 유닛들(스테이지들)은 바람직하게는 버텍스 쉐이더, 프래그먼트 쉐이더 등과 같은 그래픽 처리 파이프라인의 프로그래머블, 쉐이딩 스테이지들을 구비한다. 이들 스테이지는 원하는 대로 어떤 적절한 방식으로 구현될 수 있고, 어떤 원하는 적절한 쉐이딩, 예를 들면 버텍스 쉐이딩, 프래그먼트 쉐이딩 등, 기능을 각각 적절하게 수행할 수 있다. 프래그먼트 쉐이더의 경우에, 예를 들면, 프래그먼트 쉐이더는, 프리미티브 또는 프리미티브들을 렌더링하여 예를 들면, 표시용 프레임을 나타내는 렌더 출력 값들의 세트를 발생할 수도 있다. 그리고 나서 이들 출력 값은 저장 및 사용을 위한 외부 메모리에, 예를 들어 디스플레이용 프레임 버퍼에 전해질 수도 있다.
바람직하게는, 실행 파이프라인의 모든 실행 스테이지들(각 실행 스테이지)은 본 발명의 방식으로 작동할 수 있고 작동한다.
각 프로그래머블 처리 스테이지(실행 유닛)는 프로그래머블 처리 회로와 같은 어떤 적절한 프로그래머블 하드웨어 요소를 구비할 수도 있다. 각 프로그래머블 처리 스테이지는 별개의 회로 요소로서 처리 파이프라인의 다른 프로그래머블 스테이지들에 제공될 수도 있고, 또는 프로그래머블 처리 스테이지들은 (원하는 프로그래머블 처리 스테이지로서의 역할을 하도록 다르게 프로그램되는) 그들의 프로그래머블 처리 회로의 일부 또는 모두를 공유할 수도 있다.
프로그래머블 처리(쉐이더) 스테이지들뿐만 아니라, 그래픽 처리 파이프라인은 또한 래스터화기, 얼리 심도(early depth)(또는 얼리 심도 및 스텐실) 테스터, 레이트 심도(late depth)(또는 심도 및 스텐실) 테스터, 블렌더, 타일 버퍼, 라이트 아웃 유닛 등과 같이 그래픽 처리 파이프라인이 포함할 수도 있는 어떤 다른 적절한 원하는 처리 스테이지들도 포함할 수 있다.
본 발명은 예를 들어, 표시용 프레임, 렌더 투 텍스처(render-to-texture) 출력 등을 발생하기 위해서 그래픽 처리 파이프라인이 사용될 수도 있는 출력의 모든 형태에 대해서 사용될 수 있다. 그래픽 처리로부터의 출력, 예를 들면 프래그먼트 쉐이드된, 데이터 값들은, 저장 및 사용을 위한 외부, 예를 들면 메인 메모리에, 예를 들어 디스플레이용 프레임 버퍼에 전해지는 것이 바람직하다.
몇몇 실시예에 있어서는, 그래픽 처리 파이프라인은 여기에 기술된 데이터를 저장하는 한 개 이상의 메모리들 및/또는 메모리 디바이스들을 구비하고, 및/또는 그들과 통신하며, 및/또는 여기에 기술된 프로세스들을 수행하기 위한 소프트웨어를 저장한다. 그래픽 처리 파이프라인은 또한 호스트 마이크로프로세서와 통신할 수도 있고, 및/또는 그래픽 프로세서에 의해 발생된 데이터에 근거해서 화상들을 표시하기 위한 디스플레이와 통신할 수도 있다.
본 발명은 그래픽 프로세서의 어떤 적절한 형태 또는 구성에 적용 가능하다. 그것은 특히 타일 기반 그래픽 프로세서들 및 그래픽 처리 시스템들에 적용 가능하다. 이와 같이, 바람직한 실시예에 있어서는, 그래픽 처리 시스템 및 그래픽 처리 파이프라인은 각각 타일 기반 시스템 및 파이프라인이다.
특히 바람직한 실시예에 있어서는, 본 발명의 다양한 기능들은 예를 들면, 디스플레이 디바이스용 프레임 버퍼에 기록되는 렌더링된 프래그먼트 데이터를 발생하여 출력하는 단 한 개의 그래픽 처리 플랫폼에 대해 수행된다.
본 발명은 적절하게 구성된 마이크로프로세서 기반 시스템과 같은, 어떤 적절한 시스템에서 구현될 수 있다. 바람직한 실시예에 있어서는, 본 발명은 컴퓨터 및/또는 마이크로 프로세서 기반 시스템에서 구현된다.
본 발명의 다양한 기능들은 어떤 원하는 적절한 방식으로 수행될 수 있다. 예를 들면, 본 발명의 기능들은, 원하는 대로, 하드웨어 또는 소프트웨어로 구현될 수 있다. 이와 같이, 예를 들면, 달리 명시하지 않는 한, 본 발명의 다양한 기능 요소들 및 "수단들"은, 원하는 방식으로 작동하도록 프로그램될 수 있는 적절한 전용의 하드웨어 요소들 및/또는 프로그래머블 하드웨어 요소들과 같은, 다양한 기능 등을 수행하도록 작동될 수 있는, 적절한 프로세서 또는 프로세서들, 컨트롤러 또는 컨트롤러들, 기능 유닛들, 회로, 처리 로직, 마이크로프로세서 배치 등을 구비할 수도 있다.
여기에서는 본 기술분야의 당업자가 알 수 있는 것처럼, 본 발명의 다양한 기능 등은 정해진 프로세서에 대해 복사 및/또는 병렬로 수행될 수도 있다는 점에 또한 유념해야 한다. 마찬가지로, 다양한 처리 스테이지들은, 원하는 대로 처리 회로 등을 공유할 수도 있다.
상기 설명한 특정 기능들을 수행하는 데에 필요한 어떤 하드웨어에 따라, 데이터 처리 시스템 및 파이프라인은, 그 외에 데이터 처리 파이프라인들이 포함하는 보통의 기능 유닛들 중의 어느 한 개 이상 또는 모두 등을 포함할 수 있다.
기술한 본 발명의 국면들 및 실시예들의 모두가 여기에 기재된 바람직하고 선택적인 특징들 중의 어느 한 개 이상 또는 모두를 적절하게 포함할 수 있고, 바람직하게는 포함한다는 것을 본 기술분야의 당업자가 알 수 있을 것이다.
본 발명에 따른 방법들은 적어도 부분적으로는 소프트웨어, 예를 들면 컴퓨터 프로그램을 이용해서 구현될 수도 있다. 이와 같이 추가 국면에서 봤을 때, 본 발명은 데이터 처리 수단에 설치될 때 여기에 기재된 방법들을 수행하는 데에 특별히 알맞은 컴퓨터 소프트웨어와, 프로그램 요소가 데이터 처리 수단에서 작동될 때 여기에 기재된 방법들을 수행하기 위한 컴퓨터 소프트웨어 코드부들을 포함하는 컴퓨터 프로그램 요소와, 프로그램이 데이터 처리 시스템에서 작동될 때 여기에 기재된 방법 또는 방법들의 모든 스텝들을 수행하는 데에 알맞은 코드 수단들을 포함하는 컴퓨터 프로그램을 제공한다 것을 알 수 있을 것이다. 데이터 프로세서는 마이크로프로세서 시스템, 프로그래머블 FPGA(field programmable gate array) 등일 수도 있다.
본 발명은 또한 데이터 처리 수단을 구비하는 그래픽 프로세서, 렌더러(renderer) 또는 마이크로프로세서 시스템을 작동시키는 데에 사용될 때, 상기 데이터 처리 수단과 함께 상기 프로세서, 렌더러 또는 시스템이 본 발명의 방법들의 스텝들을 수행시키는 그러한 소프트웨어를 포함하는 컴퓨터 소프트웨어 캐리어에도 확장된다. 그러한 컴퓨터 소프트웨어 캐리어는 ROM 칩, CD ROM, RAM, 플래시 메모리, 또는 디스크와 같은 물리적 기억매체일 수도 있고, 또는 유선상의 전자 신호, 광학 신호 또는 위성 등에 관한 무선 신호 또는 그 밖의 유사한 것 등의 신호일 수 있다.
본 발명의 방법들의 모든 스텝들은 컴퓨터 소프트웨어에 의해 수행될 필요가 없고, 따라서 더 넓은 국면에서 본 발명은 여기에 설명된 방법들의 스텝들 중의 적어도 하나를 수행하기 위한 컴퓨터 소프트웨어 캐리어에 인스톨된 컴퓨터 소프트웨어 및 그러한 소프트웨어를 제공한다는 것을 더 인식할 것이다.
따라서, 본 발명은 컴퓨터 시스템에 사용하기 위한 컴퓨터 프로그램 제품으로서 적절하게 구현될 수도 있다. 그러한 구현은 컴퓨터 판독 가능한 매체, 예를 들면, 디스켓, CD-ROM, ROM, RAM, 플래시 메모리, 또는 하드 디스크와 같은, 유형의 비일시 매체에 고정된 일련의 컴퓨터 판독 가능한 명령들을 포함할 수도 있다. 또한, 본 발명은 광학적이거나 아날로그적인 통신 회선들을 포함하지만 그들에 한정되지 않는 유형의 매체상에서, 혹은 마이크로파, 적외선 또는 다른 전송 기술을 포함하지만 그것에 한정되지 않는 무선 기술을 무형으로 이용해서, 모뎀 또는 다른 인터페이스 디바이스를 통해서, 컴퓨터 시스템에 전송 가능한 일련의 컴퓨터 판독 가능한 명령들을 포함할 수 있다. 일련의 컴퓨터 판독 가능한 명령들은 여기에 이전에 기술된 기능의 모두 또는 일부를 구현하다.
본 기술분야의 당업자는 그러한 컴퓨터 판독 가능한 명령들이 많은 컴퓨터 아키텍처 또는 오퍼레이팅 시스템에 사용하기 위한 다수의 프로그래밍 언어로 기록될 수 있다는 것을 인식할 것이다. 또, 그러한 명령들은 반도체, 마그네틱, 또는 광(optical)을 포함하지만 그것에 한정되지 않는, 현재 또는 미래의, 어떤 메모리 기술이든 이용해서 저장될 수도 있고, 또는 광, 적외선, 또는 마이크로파를 포함하지만 그것에 한정되지 않는, 현재 또는 미래의, 어떤 통신 기술이든 이용해서 전송될 수도 있다. 그러한 컴퓨터 프로그램 제품은, 인쇄된 문서나 전자 문서가 첨부되는 이동 매체로서, 예를 들면, 컴퓨터 시스템에, 예를 들어, 시스템 ROM 또는 고정된 디스크 위에 프리 로드된, 슈링크 랩 소프트웨어(shrink wrapped software)로서 배포될 수도 있고, 또는 네트워크, 예를 들면, 인터넷 또는 월드 와이드 웹을 통해서 서버 또는 전자 게시판으로부터 배포될 수도 있다고 생각된다.
이하, 본 발명의 다수의 바람직한 실시예는 한 예로서만 첨부도면을 참조하여 설명될 것이다.
도 1은 다수의 데이터 캐시를 갖는 예시적인 데이터 처리 시스템을 나타낸다.
도 2a 및 2b는 다수의 데이터 캐시를 갖는 데이터 처리 시스템에 있어서의 종래의 원자 조작 처리를 나타낸다.
도 3은 다수의 데이터 캐시를 갖는 예시적인 컴퓨터 그래픽 처리 시스템을 나타낸다.
도 4는 본 발명의 방식으로 작동될 수 있는 도 3의 컴퓨터 그래픽 처리 시스템의 그래픽 처리 유닛을 개략적으로 나타낸다.
도 5a, 5b, 5c 및 6a, 6b, 6c는 본 발명의 바람직한 실시예의 동작을 나타낸다.
도면에 있어서 같은 참조번호는 같은 구성요소에 대해서 적절히 사용된다.
이하, 본 발명의 다수의 바람직한 실시예는 디스플레이용 컴퓨터 그래픽의 처리의 관점에서 설명될 것이다.
도 3은 호스트 프로세서(1)와, 호스트 프로세서(1)의 제어 하에서 처리 동작을 수행하는 4개의 관련 그래픽 처리 유닛(GPU)을 포함하는 예시적인 컴퓨터 그래픽 처리 시스템을 나타낸다. 각 GPU는 그래픽 처리 파이프라인의 형태이며, 문제의 GPU에 대한 동작을 위해 메인 메모리(12)로부터 데이터를 저장하는 데에 사용되는 관련 레벨 1(L1) 캐시 8, 9, 10, 11을 갖는다.
호스트 프로세서(1)상에서 실행하는 게임과 같은 어플리케이션(2)은, 관련 그래픽 처리 유닛(그래픽 처리 파이프라인) 4, 5, 6, 7에 의해 수행되는 그래픽 처리 동작을 필요로 할 것이다. 이것을 행하기 위해서, 어플리케이션은 호스트 프로세서(1)에서 작동하고 있는 그래픽 처리 유닛용 드라이버(3)에 의해 해석되는 API(Application Programming Interface) 콜(call)들을 발생하여 적절한 커멘드들을 그래픽 처리 유닛들에 발생해 어플리케이션(2)이 필요로 하는 그래픽 출력을 발생할 것이다. 이것을 용이하게 하기 위해서, "커멘드들"의 세트가 (예를 들면, 표시될 프레임을 발생하기 위해서) 그래픽 출력을 위해 호스트 시스템(1)에서 작동하는 어플리케이션(2)으로부터의 커멘드들에 응답해서 그래픽 처리 유닛들에 제공될 것이다.
도 4는 본 실시예의 그래픽 처리 유닛들 중의 하나를 좀 더 상세히 나타낸 것이다. 도 3에 나타낸 그래픽 처리 유닛들의 각각은 도 4에 나타낸 구성을 갖는다.
도 4에 나타낸 GPU(graphics processing pipeline)는 타일 기반 렌더러(tile-based renderer)이므로, 본 기술분야에서 알려진 것처럼, 발생될 출력 프레임과 같은, 렌더 출력 데이터 어레이의 타이들을 생성한다.
(본 기술분야에서 알려진 것처럼, 타일 기반 렌더링에 있어서는, 즉시 모드 렌더링과 같이 한꺼번에 효율적으로 처리되고 있는 전체 렌더 출력, 예를 들면 프레임보다는, 표시될 렌더 출력, 예를 들면 프레임은, 보통 "타일(tiles)"이라고 칭하는 복수의 작은 서브 영역들로 분리될 수 있다. 각 타일(서브 영역)은 따로따로(보통, 차례로) 렌더링되고, 렌더링된 타일들(서브 영역들)은 그 후에 완전한 렌더 출력, 예를 들면 표시용 프레임을 제공하기 위해서 재결합된다. 그러한 방식에 있어서는, 렌더 출력은 일반적인 크기 및 모양의 서브 영역들(보통, 예를 들면 사각형 또는 직사각형인)(타일들)로 보통 분리되지만, 이것은 필수적인 것은 아니다.)
렌더 출력 데이터 어레이는, 본 기술분야에서 알려진 것처럼, 보통 스크린 또는 프린터와 같은, 디스플레이 디바이스에 표시하기 위한 출력 프레임일 수도 있지만, 예를 들면, 나중에 렌더링 패스(rendering passes)("렌더 투 텍스처(render to texture)" 출력이라고도 알려짐) 등에 사용하기 위한 중간 데이터도 구비할 수 있다.
(본 기술분야에서 알려진 것처럼, 컴퓨터 그래픽 이미지가 표시되어야 할 때, 그것은 보통 먼저 일련의 프리미티브들(폴리곤)로서 정의되고, 그 프리미티브들은 그 후에 차례로 그래픽 렌더링을 위한 그래픽 프래그먼트(fragment)들로 분할된다. 보통의 그래픽 렌더링 동작 시에는, 렌더러가 각 프래그먼트와 관련된 투명도(알파) 데이터와 (예를 들면) 컬러(레드, 그린, 및 블루, RGB)를 변경함으로써 프래그먼트들이 정확하게 표시될 수 있다. 일단 프래그먼트들이 렌더러를 완전히 횡단했으면, 그들의 관련 데이터 값들이, 예를 들면 표시용 출력에 대해 준비된 메모리에 저장된다.)
도 4는 본 실시예의 동작과 관련 있는 그래픽 처리 파이프라인의 메인 요소들 및 파이프라인 스테이지들을 나타낸다. 본 기술분야의 당업자가 알 수 있는 것처럼, 도 4에 나타내지 않은 그래픽 처리 파이프라인의 다른 요소들이 있을 수도 있다. 또한, 도 4는 단지 개략적인 것이며, 비록 기능유닛들 및 파이프라인 스테이지들이 도 4에 있어서 별개의 스테이지들로서 개략적으로 도시되어 있지만, 예를 들면, 실제로 도시된 기능 유닛들 및 파이프라인 스테이지들은 중요한 하드웨어 회로들을 공유할 수도 있다는 점에 유념해야 한다. 도 4에 도시한 바와 같이 그래픽 처리 파이프라인의 스테이지들, 요소들 및 유닛들 등의 각각은 원하는 대로 구현될 수도 있으므로 필요한 동작 및 기능들을 수행하기 위한, 예를 들면, 적절한 회로 및/또는 처리 로직 등을 구비할 것이라는 것도 알 수 있을 것이다.
도 4에 도시한 바와 같이, 그래픽 처리 파이프라인(3)은 버텍스 쉐이더(vertex shader)(20), 헐 쉐이더(hull shader)(21), 테셀레이터(tesselator)(22), 도메인 쉐이더(23), 지오메트리(geometry) 쉐이더(24), 래스터화(rasterisation) 스테이지(25), 얼리(early) Z(심도) 및 스텐실(stencil) 테스트 스테이지(26), 프래그먼트 쉐이딩 스테이지(27)의 형태의 렌더러, 레이트(late) Z(심도) 및 스텐실 테스트 스테이지(28), 블렌딩(blending) 스테이지(29), 타일 버퍼(30) 및 다운샘플링 및 라이트아웃(writeout)(멀티샘플 리졸브(multisample resolve)) 스테이지(31)를 포함하는 다수의 스테이지를 포함한다.
버텍스 쉐이더(20)는, 본 기술분야에서 알려진 것처럼, 발생될 출력에 대해 정의된, 버텍스들과 관련된 입력 데이터 값들을 취하여, 그래픽 처리 파이프라인(3)의 다음 스테이지들에 의해 사용하기 위한 대응하는 "버텍스 쉐이드된(vertex shaded)" 출력 데이터 값들의 세트를 발생한다. 버텍스 쉐이딩은, 예를 들면, 입력 데이터를 변경해서 렌더링될 이미지에의 조명 효과를 고려한다.
본 기술분야에서 알려진 것처럼, 헐 쉐이더(21)는 패치 제어점들의 세트들에 대한 동작들을 수행하고, 패치 상수(patch constants)로서 알려진 추가 데이터를 발생하며, 테셀레이션(tessellation) 스테이지(22)는 지오메트리를 세분하여 헐(hull)의 고차(higher-order) 표현을 창출하고, 도메인 쉐이더(23)는 (버텍스 쉐이드와 비슷한) 테셀레이션 스테이지에 의해 출력된 버텍스들에 대한 동작들을 수행하고, 지오메트리 쉐이더(24)는 삼각형, 포인트들 또는 라인들과 같은 전체 프리미티브들을 처리한다. 버텍스 쉐이더(21)와 함께 이들 스테이지들은, 그래픽 처리 파이프라인(3)에 제공된 커멘드들 및 버텍스 데이터에 응답해서, 효율적으로 변형 및 조명 동작과 같은, 모든 불필요한 프래그먼트 프론트엔드 동작과, 프리미티브 셋업을 수행하여, 렌더링될 프리미티브들을 셋업한다.
그래픽 처리 파이프라인(3)의 래스터화 스테이지(25)는, 본 기술분야에서 알려진 것처럼, 렌더 출력(예를 들면, 표시될 화상)으로 구성되는 프리미티브들을 처리하기 위한 각각의 그래픽 프래그먼트들로 래스터화하도록 작동한다. 이것을 행하기 위해서, 래스터화기(25)는 렌더링하기 위한 그래픽 프리미티브들을 수신하고, 프리미티브들을 샘플링 점에 래스터화하여 프리미티브들을 렌더링하기 위한 (적절한 샘플링 위치들을 나타내는) 적절한 위치들을 갖는 그래픽 프래그먼트들을 발생한다.
래스터화기에 의해 발생된 프래그먼트들은 그 후에 처리하기 위한 파이프라인의 나머지에 앞으로 전해진다.
얼리 Z/스텐실 스테이지(26)는 본 기술분야에서 알려진 것처럼, 이 스테이지에서 어떤 프래그먼트들이 파기될 수 있는지 보려고, 래스터화기(25)로부터 수신하는 프래그먼트들에 대해 Z(심도) 테스트를 수행한다. 이것을 행하기 위해서, 그것은 래스터화기(25)로부터 발행되는 프래그먼트들(과 관련된)의 심도 값들을 이미 렌더링되었던 프래그먼트들의 심도 값들과 비교하여(이들 심도 값들은 타일 버퍼(30)의 일부인 심도(Z) 버퍼에 저장된다) 신규 프래그먼트들이 이미 렌더링되었던 프래그먼트들에 의해 폐쇄될 것인지 (아닌지) 여부를 판정한다. 동시에, 얼리 스텐실 테스트가 수행된다.
프래그먼트 얼리 Z 및 스텐실 테스트 스테이지(26)를 통과하는 프래그먼트들은, 그 후에 프래그먼트 쉐이딩 스테이지(27)에 전해진다. 프래그먼트 쉐이딩 스테이지(27)는, 본 기술분야에서 알려진 것처럼, 얼리 Z 및 스텐실 테스트를 통과하는 프래그먼트들에 대해 적절한 프래그먼트 처리 동작들을 수행하여, 적절한 렌더링된 프래그먼트 데이터를 발생하기 위한 프래그먼트들을 처리한다.
이 프래그먼트 처리는, 본 기술분야에서 알려진 것처럼, 적절한 프래그먼트 데이터를 발생하기 위해서, 프래그먼트들에 대해 프래그먼트 쉐이더 프로그램들을 실행하고, 텍스처들을 프래그먼트들에 적용하며, 포깅(fogging) 또는 다른 동작들을 프래그먼트들에 적용하는 것 등과 같은, 어떤 적절한 원하는 프래그먼트 쉐이딩 프로세스들을 포함한다. 본 실시예에 있어서는, 프래그먼트 쉐이딩 스테이지(27)는 쉐이더 파이프라인(프로그래머블 프래그먼트 쉐이더)의 형태이다.
렌더링된 프래그먼트를, 실제로 최종 이미지에서 볼 수 있는 여부를 판정하기 위해 그 중에서도 쉐이드된 프래그먼트들에 대해 파이프라인 심도 테스트의 마지막을 수행하는 "레이트" 프래그먼트 Z 및 스텐실 스테이지(28)가 있다. 이 심도 테스트는, 본 기술분야에서 알려진 것처럼, 프래그먼트 쉐이딩 스테이지(27)로부터 발행되는 프래그먼트들(과 관련된)의 심도 값들을, 이미 렌더링되었던 프래그먼트들의 심도 값들과 비교함으로써, 타일 버퍼(30) 내의 Z 버퍼에 저장된 프래그먼트의 위치에 대한 Z 버퍼 값을 이용해서 신규 프래그먼트들에 대한 프래그먼트 데이터가 이미 렌더링되었던 프래그먼트들의 프래그먼트 데이터를 대신하는지 여부를 판정한다. 이 레이트 프래그먼트 심도 및 스텐실 테스트 스테이지(28)는 또한 프래그먼트들에 대해 어떤 불필요한 "레이트" 알파 및/또는 스텐실 테스트들을 수행한다.
레이트 프래그먼트 테스트 스테이지(28)를 통과하는 프래그먼트들은, 그 후에 필요하다면, 블렌더(29)에서의 타일 버퍼(30)에 이미 저장된 프래그먼트들과의 어떤 불필요한 블렌딩 동작이 행해진다. 이 스테이지에서는, 디더(dither) 등(미도시)과 같은, 프래그먼트들에 필요한 어떤 다른 나머지 동작들이 또한 수행된다.
최종적으로, (블렌딩된) 출력 프래그먼트 데이터(값들)는 예를 들면, 표시용 프레임 버퍼에 출력될 수 있는 타일 버퍼(30)에 기록된다. 출력 프래그먼트에 대한 심도 값은 또한 타일 버퍼(30) 내부의 Z 버퍼에 적절히 기록된다. (타일 버퍼는, 본 기술분야에서 알려진 것처럼, (본질적으로 처리되고 있는 타일의 각 샘플링 포인트에 대하여) 버퍼들이 나타내는 각 샘플링 포인트에 대해, 각각 Z값 또는 적절한 컬러 등을 저장하는 컬러 및 심도 버퍼들을 저장할 것이다.) 이들 버퍼들은 본 기술분야에서 알려진 것처럼, 전체 렌더 출력(예를 들면, 표시될 이미지)의 일부(타일)를 나타내는 프래그먼트 데이터의 어레이를 저장하고, 이들 버퍼 내의 샘플 값들의 각 세트는 전체 렌더 출력의 각 픽셀에 대응한다(예를 들면, 샘플 값들의 각 2×2 세트는 출력 픽셀에 대응할 수도 있고, 여기서 4× 멀티샘플링이 사용되고 있다).
타일 버퍼는 그래픽 처리 파이프라인(칩)에(국부적인) 위치되는 RAM의 일부로서 제공된다.
타일 버퍼(30)로부터의 데이터는 다운샘플링(멀티샘플 리졸브) 라이트아웃 유닛(31)에 입력되어, 디스플레이 디바이스의 프레임 버퍼(미도시)와 같은, 외부 메모리 출력 버퍼에 출력(라이트백)된다. (디스플레이 디바이스는 컴퓨터 모니터 또는 프린터와 같은, 픽셀들의 어레이를 포함하는 예를 들면 디스플레이를 구비할 수 있다.)
다운샘플링 및 라이트아웃 유닛(31)은, 타일 버퍼(30)에 저장된 프래그먼트 데이터를 출력 버퍼(디바이스)에 대한 적절한 분해능(resolution)으로 다운샘플링하여(즉, 출력 디바이스의 픽셀들에 대응하는 픽셀 데이터의 어레이가 발생되고), 출력 버퍼에 출력하기 위한 출력 값들(픽셀들)을 발생한다.
일단 렌더 출력의 타일이 처리되었고 그것의 데이터가 저장용 메인 메모리(예를 들면, 메인 메모리(미도시)에서의 프레임 버퍼에)에 전해졌다면, 렌더 출력(예를 들면, 표시될 프레임(이미지))을 발생하기 위해서 충분한 타일들이 처리되었을 때까지, 다음 타일이 그 후에 처리 등 된다. 프로세스는 그 후에 다음 렌더 출력(예를 들면, 프레임) 등에 대해서 반복된다.
그래픽 처리 파이프라인(3)에 대한 다른 방식도 물론 가능할 것이다.
상기는 도 3에 나타낸 그래픽 처리 시스템의 동작의 어떤 특징들에 대해서 설명한다. 이하에서는 본 발명의 실시예에 따른 도 3에 나타낸 그래픽 처리 시스템의 동작의 추가 특징들에 대해서 설명할 것이다.
도 4로부터 알 수 있는 것처럼, 각 GPU(graphics processing pipeline)는 다수의 프로그래머블 처리 또는 "쉐이더" 스테이지들, 즉 버텍스 쉐이더(20), 헐 쉐이더(21), 도메인 쉐이더(23), 지오메트리 쉐이더(24), 및 프래그먼트 쉐이더(27)를 포함한다. 이들 프로그래머블 쉐이더 스테이지들은 한 개 이상의 입력 변수(variables)를 가지고 출력 변수의 세트를 발생하고, 어플리케이션에 의해 제공되는, 각 쉐이더 프로그램을 실행한다. 이것을 행하기 위해서, 어플리케이션(2)은 GLSL, HLSL, OpenCL 등과 같은, 하이 레벨 쉐이더 프로그래밍 언어를 이용해서 구현되는 쉐이더 프로그램을 제공한다. 이들 쉐이더 프로그램들은 그 후에 타겟 그래픽 처리 유닛들에 대한 바이너리 코드로 쉐이더 언어 컴파일러에 의해 바뀐다. 이것은, 본 기술분야에서 알려진 것처럼, 컴파일러 내부의 프로그램의 한 개 이상의 중간 표면(intermediate representation)의 창출을 포함할 수도 있다. (컴파일러는, 예를 들면, 드라이버(3)의 일부일 수도 있고, 컴파일러가 실행시키는 특별한 API가 있다. 따라서 컴파일러 실행은 어플리케이션에 의해 발생된 API 콜들에 응답해서 드라이버에 의해 행해진 드로 콜 준비(draw call preparation)의 일부라고 보여질 수 있다.)
상기 설명한 것처럼, 그래픽 처리 파이프라인에서의 각 쉐이더는, 발생될 그래픽 출력에서의 각 그래픽 항목에 대한 작은 프로그램을 실행함으로써 그래픽 처리를 수행하는 처리 유닛이다(이 점에서 "항목"은 보통 버텍스, 프래그먼트 또는 픽셀이다). 본 실시예는 그래픽 처리 유닛의 쉐이더에 의해 실행될 실행 스레드들(execution threads)(여기서 각 스레드는 한 개의 그래픽 항목에 대응한다)은 원자 메모리 조작을 수행하는 상황에 관한 것이다.
상기 설명한 것처럼, "원자" 메모리 조작은 메모리 위치를 판독하고, 메모리 값과 오퍼랜드(예를 들면, 레지스터) 값 간의 산술 연산을 수행하며, 그 후에 산술 연산의 결과를 같은 메모리 위치에 라이트백하는 동작 시퀀스이다. 이 동작의 시퀀스는, 모든 관찰자에게는, 그것은 마치 시퀀스가 전혀 수행되지 않았거나 전부 수행되었던 것처럼 보이도록 수행된다. 그것은 "원자"라고 말하는 하나의 불가분 유닛으로서 실행된다. 원자의 일부로서 수행되는 산술 연산은, 보통 Integer Add; Bitwise AND, OR, XOR; Minimum Value; Maximum Value과 같은, 보통 가환적이며 연관적인(commutative and associative), 단순한 동작이다.
원자 메모리 조작은 일반적으로 2개의 변이체: "Return" 및 "NoReturn"에서 발생한다. "Return" 변이체는 "원자" 조작이 수행되기 전에 메모리 위치에 존재했던 자료를 쉐이더로 돌려보낸다. "NoReturn" 변이체는 어떤 값이든 쉐이더로 돌려보내지 않는다.
본 실시예에 있어서는, 정해진 그래픽 처리 유닛에 대한 원자 조작들이 문제의 그래픽 처리 유닛에 대한 대응하는 L1 캐쉬(에 대해 수행되는)에 저장된 데이터(캐시 라인들)를 이용해서 수행된다. 이와 같이, 원자 메모리 조작을 수행할 수 있도록, 관련 데이터(캐쉬 라인)가 문제의 L1 캐시에 존재해야 한다.
각 L1 캐시는 인커밍 원자 메모리 요청들의 큐와 정지된 원자 메모리 요청들에 대한 버퍼를 유지한다. 상기 큐 및 정지된 요청들 버퍼에서의 각 엔트리는, 한 개의 원자 메모리 요청에 필요한 한 개의 어드레스, 한 개의 데이터 항목, 및 어떤 다른 메타데이터에 대한 공간을 갖는다.
큐에서의 원자 메모리 조작이 그래픽 처리 유닛의 쉐이더에 의해 수행될 때, 관련 데이터(캐시 라인)가 문제의 L1 캐시에 저장되는지를 먼저 확인한다. 그렇다면, 원자 메모리 조작은 보통의 방식으로 진행된다.
그렇지만, 데이터(캐시 라인)가 L1 캐시에 존재하지 않으면, 임시 캐시 라인이 원자 메모리 조작에 할당된다. 이 임시 캐시 라인에는 원자 조작 및 원자 조작 자체(의 형태)에 대한 메모리 어드레스라는 태그가 붙여져 있고, 문제의 원자 조작에 대한 시스템에 있어서의 "참(true)" 캐시 라인만큼의 많은 데이터 항목(데이터 값들)을 포함할 것이다.
임시 캐시 라인은 데이터 캐시 내의 리소시즈(resources)(공간)를 차지하는 (즉, 임시 캐시 라인의 태그(같은 원자 조작, 같은 메모리 어드레스 또는 적어도 같은 캐시 라인 내부의 메모리 어드레스)과 매치하는) "캐시 라인"이지만, 적절한 원자 메모리 조작들의 축적에 단지 사용될 수 있고, 그렇지 않으면 판독, 기록, 스누프, 또는 어떤 다른 방식으로든 교류될 수 없다.
원자 조작에 대한 임시 캐시 라인은 그 후에 임시 캐시 라인에서의 데이터 항목의 모두를 문제의 원자 조작에 대한 산술 연산에 대한 신원 값(identity value)으로 설정함으로써 준비된다.
처음에 임시 캐시 라인을 채우기 위해 사용되는 산술 연산의 "신원 값"은, 또 다른 값으로 산술 연산이 수행될 때, 다른 값이 변경되지 않은 채로 그대로 있는 값이다. 이와 같이, 정해진 산술 연산이 오퍼레이터 %로 표시되면, 산술 연산의 신원 값은 값 V이므로, 모든 가능한 입력 값들 X에 대해서는, V%X = X%V = X이다. 예를 들면, 이하의 산술 연산에 대해서, 그에 대응하는 신원 값들 V는 아래와 같다.
Integer Add: V=0
Bitwise OR, Bitwise XOR: V=0
Bitwise AND: V=an all-1s bitvector
Minimum Value: V=the largest representable number in the memory value's format
Maximum Value: V=the smallest representable number in the memory value's format.
메모리 요청은 또한 문제의 메모리 어드레스의 콘텐츠(즉, 원자 조작에 필요한 데이터)를 L1 캐시로 페치(fetch)하기 위해서 메모리 서브시스템으로 발송된다.
임시 캐시 라인이 준비된 후에, 그러나 메모리로부터의 데이터(캐시 라인)가 도착하기 전에, L1 캐시는 같은 메모리 어드레스를 사용하는 대기(queued) 원자 메모리 조작을 임시 캐시 라인에 축적한다. 이것을 행하기 위해서, 원자 메모리 요청이 큐로부터 취해져 임시 캐시 라인에 대해서 그것이 정상 캐시 라인이었던 것처럼 행해진다. 이와 같이, 임시 캐시 라인에서의 문제의 메모리 위치에 대한 현재의 콘텐트(데이터 항목)가 페치되고, 그 후에는 임시 캐시 라인에서의 값에 대한 원자 조작의 결과가 임시 캐시 라인에서의 적절한 데이터 항목(위치)에 라이트백된다.
원자 메모리 요청은 그 후에 요청(이 경우, GPU의 쉐이더)을 행한 이니시에이터(initiator)로 돌아가지 않지만, 대신 정지된 메모리 요청들 버퍼에 제출된다. 메모리 요청이 정지된 메모리 요청들 버퍼에 놓여 있을 때는, 그것은 그것의 원래의 인수 값(argument value)을 유지하거나, 그것의 인수값을 임시 캐시 라인으로부터 판독된 데이터 값으로 대체할 수 있다. (구현은 다른 원자 조작에 대한 이들 접근법 중의 어느 하나를 선택할 수도 있다. 예를 들면, "유지(keep)" 접근법 또는 "대체" 접근법은 다른 전력 소모를 가질 가능성이 있으므로, 다른 원자 조작에 대해서는 하나 또는 다른 접근법이 더 좋은 것일지도 모른다.)
원자 메모리 요청은 그 후에 정지된 상태로 표시된다.
이것은 그 후에 문제의 메모리 위치에 대한 "참" 데이터를 포함하는 캐시 라인이 L1 캐시에 도착할 때까지, 같은 메모리 위치를 이용하여 그 메모리 위치(만약에 있다면)에 대해 같은 산술 연산을 수행하는 각 대기 원자 메모리 요청에 대해서 반복된다.
메모리로부터의 "참" 데이터가 L1 캐시에 도착할 (메모리 어드레스 콘텐트를 가진 캐시 라인이 도착할) 때, L1 캐시가 그것의 정상 작동을 정지하고, 원자 조작의 산술 연산을 이용해서 임시 캐시 라인과 인커밍 캐시 라인의 콘텐트를 결합한다(임시 캐시 라인과 인커밍 캐시 라인을 "병합"한다).
예를 들면, 원자 조작이 32비트 ADD이면, 32비트 ADD가 임시 캐시 라인과 인커밍 캐시 라인의 모든 각각의 32비트 데이터 항목 사이에서 수행된다.
결합된(병합된) 캐시 라인의 결과를 그 후에 정상 캐시 라인에 넣고, (메모리로부터의 데이터를 가진) 인커밍 캐시 라인을 임시 캐시 라인에 변경되지 않은 채로 카피한다.
L1 캐시는 그 후에 그것의 정상 작동을 다시 시작한다. 이와 같이, 결과로 생긴 병합된 캐시 라인은 보통 메모리 액세스의 모든 종류(로드(loads), 스토어, 및 원자)를 제공하기 위해 사용될 수 있고, 스누프(snoops)에 응답할 수 있다. (캐시 라인이 병합 프로세스 중에서 스누프되면, 그 후에 스누프 응답은 병합이 완료될 때까지 보류된다.)
병합 프로세스가 완료한 후에는, 문제의 메모리 어드레스에 대한 정지된 메모리 요청들 버퍼에 있었던 정지된 원자 메모리 요청들이 완료된다. 이것을 행하기 위해서, 원자 메모리 요청들은 차례로 정지된 메모리 요청들 버퍼로부터 스풀된다(spooled).
각 파킹된(parked) 원자 메모리 요청에 대해서는, (메모리로부터 캐시 라인의 이전 콘텐츠를 지금 계속하는) 요청의 데이터 항목과 임시 라인의 콘텐츠가 판독되고, 그 후에 원자 산술 연산이 그들을 결합하기 위해서 사용된다.
이 점에서, 원자 조작을 완료하기 위해 수행하는 정확 동작은, (상기 설명한 것처럼) 원자 조작이 정지된 메모리 요청들 버퍼에서 "파킹(parked)"되었을 때 원자 조작의 원자 인수값이 "유지"되었거나 "대체"되었는지 여부에 의존할 것이다.
원자 인수 값들이 "대체"되었다면, 그 후에 각 정지된 원자 요청에 대해서는, 임시 캐시 라인이 판독되고, 그 결과는 원자 조작을 위한 산술 연산을 이용해 원자 요청의 데이터 항목과 결합되며, 그 후에 결합된 값이 쉐이더(이니시에이터)로 돌아가게 된다. 임시 캐시 라인 자체는 변경되지 않은 채로 남아 있다.
원자 인수 값들이 "유지"되었다면, 그 후에 각 정지된 원자 요청에 대해서는, 임시 캐시 라인이 판독되고, 원자 판독 수정 기록(read-modify-write) 동작은 임시 캐시 라인에 대해 수행되고, 임시 캐시 라인으로부터 판독된 오래된 값은 쉐이더로 돌아가게 된다.
본 실시예에 있어서는, 각 L1 캐시가 정해진 임시 캐시 라인에 대해 추적하고, 정지된 메모리 요청들 버퍼 엔트리들이 메모리("참" 캐시 라인)로부터 데이터를 기다리면서 파킹된다. 이것은 원하는 대로 행해질 수 있다. 이렇게, 임시 캐시 라인과 "참" 캐시 라인이 "병합"된 후에는, 관련 파킹된 원자 메모리 요청들이 추적 정보를 이용해서 차례로 스풀 아웃될 수 있다. 이것은 프로세스를 보다 효율적으로 행하는 것을 돕는다.
상기에 기술한 구현은 원자 조작의 "Return" 변이체에 대한 지지를 제공한다.
엄격한 메모리 오더링을 필요로 하지 않는 (그래픽 처리에 공통일 수 있는) "NoReturn" 원자에 대해서는, 정지된 메모리 요청들 버퍼에서의 원자 메모리 요청들의 "파킹" 및 메모리로부터의 값들과 임시 캐시 라인 및 인커밍 캐시 라인의 병합(결합) 후의 이들 요청들의 완료가 생략될 수 있다. (즉, 엄격한 메모리 오더링을 필요로 하지 않는 노 리턴(no return) 원자에 대해 필요한 모든 것은, 메모리에 도착할 때, 원자 조작들을 임시 캐시 라인에 축적하고, 그 후에 이들 값들과 "참" 캐시 라인을 결합(병합)하는 것이다(그 후에 사용하기 위한 결합된(병합된) 값들을 제공하는 것이다).
엄격한 메모리 오더링을 필요로 하는 노 리턴 원자들에 대해서는, 그 후에 오더링 개런티(ordering guarantee)를 충족시키기 위해서, 임시 캐시 라인과 페치된 캐시 라인의 병합(결합)이 완료될 때까지 원자 조작이 정지된 요청들 버퍼 내에 유지되는 것이 바람직하지만(그 지점에서 원자 조작이 완료된 것으로 보고될 수 있다), 리턴 원자들에 필요한 것으로 정지된 메모리 요청들의 어떤 추가 처리도 행할 필요가 없다.
본 실시예에 있어서는, 선택된 (대부분) 원자 조작들에 대한 임시 캐시 라인에 태그를 붙이기 위해 사용되는 "원자 조작"은, 수행될 조작뿐만 아니라 조작 크기도 구별한다. 예를 들면, 32비트 원자 ADD 및 64비트 원자 ADD는 2개의 다른 조작이라고 간주된다. 마찬가지로, 기본적인 구현이 엔디언(endianness)을 구별하면, 그 후에 이것은 또한 다음과 같이 고려된다. 예를 들면, 32비트 리틀 엔디언(little-endian) 원자 ADD는, 32비트 빅 엔디언(big-endian) 원자 ADD과 다른 조작으로서 처리된다. (그렇지만, 이들 구별은 모든 원자 조작에 필요하지 않다. 예를 들면, 원자 AND/OR/XOR은 오퍼랜드 크기 또는 엔디언 구별(endianness distinction)을 필요로 하지 않는다.)
"Integer Add Modulo a constant K" 원자 조작이 제공되면, "K"의 각 다른 값이 임시 캐시 라인의 태그를 위한 다른 조작이라고 간주된다. 마찬가지로, "Compare-And-Swap" 원자 조작이 제공되면, 각 다른 비교 값이 임시 캐시 라인의 태그를 위한 다른 조작이라고 간주된다.
도 5a, 5b, 및 5c와 도 6a, 6b 및 6c는 본 발명의 2개의 실시예의 정해진 그래픽 처리 유닛에 대한 상기 조작을 개략적으로 나타낸 것이다.
도 5a, 5b, 및 5c는 각 정지된 원자 조작이 그것의 원래의 인수 값을 유지하는 제1 실시예에 있어서의 조작을 개략적으로 나타낸 것이다.
도 5a에 나타낸 바와 같이, 문제의 그래픽 처리 유닛의 L1 데이터 캐시(61)는 수행될 인커밍 원자 메모리 조작들을 저장하기 위한 큐(60)와, 정지된 원자 메모리 요청들을 저장하기 위한 버퍼(62)를 갖는다.
도 5a에 나타낸 바와 같이, 처음에는 원자 메모리 요청 큐(60)가, 같은 메모리 어드레스(위치)에 대해 (이 경우 원자 ADD 조작인) 원자 조작을 수행하는 것인 각각의 스레드 A, B, C, D에 대한 4개의 펜딩(pending) 원자 메모리 요청들을 포함하고 있는 것으로 간주한다. 또한, 데이터 캐시(61)가 원자 메모리 조작에 필요한 메모리(캐시 라인)로부터의 데이터를 현재 저장하고 있지 않는 것으로 가정한다.
이것을 고려해, 도 5a에 나타낸 바와 같이, 임시 캐시 라인(64)은 데이터 캐시(61)에 할당되고, 이 임시 캐시 라인에는 대기 원자 조작들에 필요한 메모리 어드레스와, 문제의 원자 조작의 형태가 적힌 태그가 붙여져 있다.
임시 캐시 라인에서의 데이터 항목은 그 후에 문제의 원자 조작에 대한 신원 값(따라서 원자 조작이 원자 ADD이므로 이 경우에 "0")으로 초기화된다. 동시에, 메모리 요청(57)은 문제의 메모리 어드레스에서 메모리에 데이터를 포함하고 있는 캐시 라인을 페치하기 위해서 메모리 서브시스템으로 발송되고, 그 캐시 라인에 대한 공간(58)은 버퍼(61)에 할당된다. (여기에서는 (도 6a, 6b, 6c에 나타낸 실시예에 있어서) 데이터 캐시(61) 내의 각 캐시 라인이 (도 5a에 나타낸 바와 같이) 단지 한 개의 데이터 항목을 포함한다고 가정한다. 그렇지만, 각 캐시 라인은 한 개 이상의 데이터 항목을 포함할 수 있다. 그 경우에, 임시 캐시 라인 내의 각 데이터 항목은 문제의 원자 조작에 대한 신원 값으로 초기화될 것이다.)
도 5a에 나타낸 바와 같이, 그래픽 처리 유닛이 메인 메모리(캐시 라인) 내의 메모리 어드레스로부터의 데이터가 도착하기를 기다리는 동안, 대기 원자 메모리 조작은 데이터 캐시(61) 내의 임시 라인(64)에 대해 마치 그것이 정상 캐시 라인인 것처럼 행해짐으로써 원자 메모리 조작의 결과가 임시 캐시 라인(64)에 축적된다.
따라서, 도 5a에 나타나 있는 바와 같이, 제1 스레드 A(67)에 대한 원자 ADD 조작은 데이터 캐시(61) 내의 임시 라인(64)의 콘텐츠에 대해 행해진다.
원자 조작을 수행하기 위해서, 데이터 캐시(61) 내의 임시 캐시 라인(64)에서 문제의 특정 메모리 위치에 대응하는 데이터 항목의 콘텐트(데이터 값)가 페치되고, 원자 조작에 대한 산술 연산은 그 데이터 값을 이용해서 수행되며, 원자 조작의 결과는 그 후에 임시 캐시 라인 내의 데이터 항목(메모리 위치)에 라이트백된다(즉, 임시 캐시 라인 자체가 변경된다).
이와 같이 스레드 A는 임시 캐시 라인(64) 내의 저장된 신원 값("0")을 이용해서 그것의 원자 ADD 조작을 수행하고, 임시 캐시 라인에 그 조작의 결과("1")를 저장한다. 이와 같이, 스레드 A에 대한 원자 조작 후에, 임시 라인 내의 관련 데이터 항목은 이제 도 5a에 나타낸 바와 같이 값 "1"을 가질 것이다.
일단 스레드 A가 그것의 원자 조작을 수행했다면, 스레드 A에 대한 메모리 요청이 그 후에 이니시에이터(쉐이더)로 돌아가지 않고, 그렇지만, 대신, 도 5a에 나타낸 바와 같이, 그것은 정지된 메모리 요청들 버퍼(62)에 놓이게 된다. 도 5a, 5b, 및 5c에 나타낸 실시예에 있어서는, 정지된 메모리 요청들이, 도 5a에 나타낸 바와 같이, 그들의 원래의 인수 값들(이와 같이 스레드 A에 대해서는 "+1")을 유지할 것이다. 메모리 요청은 또한 정지되어 있는 것으로 표시된다.
일단 스레드 A가 임시 캐시 라인에 대해서 그것의 원자 조작을 실행했다면, 그 후에 큐 내의 다음 스레드, 스레드 B가 임시 캐시 라인(64)에 대해서 그것의 원자 조작(68)을 실행할 수 있다. 도 5a에 나타낸 바와 같이, 이것을 행하기 위해서, 스레드 B는 임시 캐시 라인 내의 메모리 위치에서의 캐시 내의 값(지금은 "1")을 판독하고, 임시 라인 내의 그 메모리 위치에서의 데이터 값에 대하여 그것의 원자 ADD 조작(+2)을 수행하며, 그 원자 조작의 결과("3")를 임시 캐시 라인 내의 메모리 위치에 라이트백한다. 따라서, 도 5a에 나타낸 바와 같이, 임시 캐시 라인(64) 내의 메모리 위치는 이제 값 "3"을 포함할 것이다.
다시, 스레드 B에 대한 원자 조작은, 이 경우에 그것의 본래 인수 값 "+2"를 보유하고 있는, 정지된 메모리 요청들 버퍼(62)에 놓여 있다.
도 5a에 나타낸 바와 같이, 이 프로세스가 같은 메모리 어드레스에 액세스하는 큐(60)에서의 나머지 원자 조작에 대해 계속됨으로써, 일단 큐(60) 내의 모든 적절한 원자 조작이 임시 캐시 라인에 대해서 수행되었다면, 데이터 캐시(61) 내의 임시 캐시 라인(64)이, 이 경우에, 같은 메모리 어드레스를 공유하는 대기 원자 메모리 요청들에 대한 11의 축적된(결합된) 증분 값을 저장할 것이다. 이에 대응하여, 정지된 메모리 요청들 버퍼(62)는 큐(60) 내에 있었지만, 지금 데이터 캐시(61) 내의 임시 캐시 라인(64)에 대해서 수행되었던 원자 메모리 요청들을 포함할 것이다.
이 조작은 그 후에 (즉, 문제의 메모리 어드레스에 대한) 원하는 메모리 콘텐츠를 가진 캐시 라인이 데이터 캐시(61)에 도착할 때까지 기다린다.
도 5b는 메인 메모리 콘텐츠를 가진 캐시 라인(65)이 데이터 캐시(61)에 도착할 때의 동작을 나타낸다. 도 5b에 나타낸 바와 같이, 현 시점에서 데이터 캐시(61)는 메모리로부터 임시 캐시 라인(64)과 "참" 캐시 라인(65) 양쪽을 저장할 것이다.
그 후에, 도 5b에 나타낸 바와 같이, 문제의 원자 조작의 산술 연산은 임시 캐시 라인(64)의 콘텐츠와 인커밍 "메임 메모리" 캐시 라인(65)을 결합(병합)하는 데에 사용된다. 따라서, 이 경우에, 원자 조작이 ADD 조작이므로, ADD가 임시 캐시 라인(64) 및 인커밍 "참" 캐시 라인(65)의 모든 데이터 요소 사이에서 수행된다. 이 조작의 결과(이 경우에 "134")가 그 후에 데이터 캐시(61) 내의 정상 캐시 라인(66)에 저장되고, 메인 메모리로부터의 인커밍 캐시 라인(65)(인커밍 데이터)이 임시 캐시 라인(64)에 변경되지 않은 채로 카피된다.
이것의 결과는 도 5b에 나타낸 것이, 데이터 캐시(61)가 원자 조작의 축적된 결과(이 경우에 "134")를 포함하고 있는 "정상" 캐시 라인(66)과, 메인 메모리로부터의 원래의 값들(이 경우에 "123")을 포함하고 있는 임시 캐시 라인(64)을 포함한다는 것이다.
축적된 원자 조작들의 결과를 포함하고 있는 "정상" 캐시 라인(66)은, 그 후에 다른 그래픽 처리 유닛들, 원자 조작들 등이 사용하기 위해 해방될 수 있거나, 또는 적절히 메인 메모리로 돌아갈 수 있게 된다.
이에 따라, 도 5b에 나타낸 바와 같이, 데이터 캐시(61)가 (즉, 원자 조작들이 수행되기 전에) 메모리 내의 원래의 캐시 라인으로부터의 데이터를 포함하고 있는 임시 캐시 라인(64)을 포함할 것이다.
이 프로세스는 대기 원자 조작들의 세트에 대한 결합된 원자 조작을 완료한다. 그렇지만, 적어도 리턴 원자 조작들의 경우에는, 개개의 원자 조작들을 적절히 수행할 필요도 있다. 이 프로세스는 도 5c에 나타낸 바와 같이 본 실시예에 대해서 수행된다.
도 5c에 나타낸 바와 같이, 일단 데이터 캐시(61)가 임시 캐시 라인(64)에 원래의 메모리 값들(즉, 대기 원자 조작들 전의 메모리 내의 값들)을 저장하고 있으면, 그 후에 정지된 메모리 요청들 버퍼(62) 내의 파킹된 원자 조작들이 임시 캐시 라인 내의 데이터를 이용해서 완료될 수 있고 완료된다. 이것은 차례로 정지된 메모리 요청들 버퍼로부터 파킹된 원자 조작들을 스풀링하고, 원자 조작의 데이터 항목과 임시 캐시 라인의 콘텐트를 판독하며, 그 후에 원자 조작에 대한 산술 연산을 이용해 그들을 결합하여 (쉐이더(이니시에이터)로 돌아가는) 원자 조작 리턴 값을 제공함으로써 행해진다.
이 실시예에 있어서는, 각 파킹된 원자 조작이 그것의 원래의 인수 값을 유지했기 때문에, 이 조작은, 각 정지된 원자 요청에 대해서, 임시 캐시 라인을 판독하고, 임시 캐시 라인에 대해 원자 판독 수정 기록 동작을 수행하여 임시 캐시 라인 내의 값을 갱신하며, (리턴 원자 조작에 따라) 임시 캐시 라인으로부터 판독된 오래된 값을 쉐이더로 리턴하는 것을 포함한다.
이와 같이, 도 5c에 나타낸 바와 같이, 스레드 A는 임시 캐시 라인 내의 값("123")을 이용해서 그것의 원자 add 조작("+1")을 수행할 것이고, 적절히 변경된 값(이 경우에 "124")을 임시 캐시 라인(64)에 기록할 것이며, 임시 캐시 라인의 원래의 값(이 경우에 "123")을 69로 돌려보낼 것이다. 도 5c에 나타낸 바와 같이, 스레드 B는 그 후에 임시 캐시 라인에 대해 그것의 원자 add 조작을 수행함으로써, 정지된 메모리 요청들 버퍼(62) 내의 각 파킹된 원자 조작에 대해서 임시 캐시 라인 내의 값을 "126"으로 변경할 것이고, 임시 캐시 라인 내의 이전 값(즉, "124")을 리턴하는 등 할 것이다.
일단 모든 파킹된 원자 조작들이 완료되었으면, 도 5c에 나타낸 바와 같이, 데이터 캐시(61) 내의 임시 라인이 해방될 수 있다.
도 5c에 나타낸 방식은 원자 조작의 "리턴" 변이체에 필요하다는 것을 알 수 있을 것이다. "노 리턴" 원자의 경우에는, 임시 캐시 라인에 대해 각 파킹된 원자 조작을 수행하고 데이터 값을 리턴하는 도 5c에 나타낸 조작은, 엄격한 메모리 오더링을 필요로 하지 않는 노 리턴 원자의 경우의 정지된 메모리 요청들 버퍼(62) 내의 원자 요청들의 파킹일 수 있기 때문에, 생략될 수 있다.
도 6a, 6b 및 6c는 도 5a, 5b, 및 6c에 나타낸 조작의 대안 실시예를 나타낸다.
일반적으로, 도 6a, 6b, 및 6c에 나타낸 조작은 도 5a, 5b, 및 5c에 나타낸 조작에 대응한다(그래서 다시 설명하지 않을 것이다). 그렇지만, 도 6a에 나타낸 바와 같이, 정지된 메모리 요청들 버퍼(62)에 파킹되는 각 원자 메모리 요청이 그것의 원래의 인수 값을 유지하기보다는, 원자 요청의 인수 값이 임시 캐시 라인으로부터 판독된 데이터 값으로 교체된다.
따라서, 도 6a에 나타낸 바와 같이, 예를 들면, "+1"보다는 "+0"의 인수 값이 스레드 A(70)에 대해서 저장된다. 그에 대응하여, 스레드 B에 대해서는, 정지된 메모리 요청들 버퍼(62) 내의 스레드에 대해 저장된 인수 값이 "+2"보다는 "+1"이고 71, 스레드 C에 대해서는, 그것은 "+3", 오히려 "+5" 등이다.
그리고 나서, 도 6c에 나타낸 바와 같이, 병합 조작이 수행된 후에 파킹된 원자 메모리 요청들이 완료되는 경우에는, 임시 캐시 라인을 판독하고 각 파킹된 원자 요청에 대한 임시 캐시 라인에 대해 원자 판독 수정 기록 조작을 수행하기보다는, 임시 라인 값이 대신 판독되고 원자 요청과 결합해 인수 값이 정지된 메모리 요청들 버퍼(62)에 저장되며, 그 후에 그 결합된 값을 원자 조작에 대한 리턴 값으로서 리턴하지만, 임시 캐시 라인 자체는 변경되지 않는 채로 남아 있다.
다시, 노 리턴 원자들에 대해서는, 도 6c에 나타낸 조작과, 엄격한 메모리 오더링을 필요로 하지 않는 노 리턴 원자들의 경우에, 정지된 메모리 요청들 버퍼 내의 원자 메모리 요청들의 파킹이 생략될 수 있다.
원한다면, 상기 실시예에 대한 다양한 대안 및 추가도 가능할 것이다.
예를 들면, 상기 실시예들은 원자 조작들이 수행되어야 하는 각 캐시 라인에 단 한 개의 데이터 값이 있는 경우의 본 발명의 조작을 나타낸다. 그렇지만, 이들 방식은 그에 대응하여 원자 조작들이 수행되어야 하는 정해진 캐시 라인에 다수의 데이터 값들(데이터 항목들, 메모리 어드레스들)이 있는 경우에 사용될 수 있다.
예를 들면, 비록 상기 실시예들은 원자 추가 조작을 참조하여 기술되었지만, 상기 방식은 그에 대응하여 다른 원자 조작들에 대해 사용될 수 있다. 이와 같이, 다른 원자 조작들은 상기 프로세스들의 적절한 변이체로서 구현될 수도 있다.
본 실시예들이 적용될 수 있는 원자 조작들의 예(만약에 있다면, 그들의 대응하는 신원 값들, V)는 다음과 같다.
Integer Add: V = 0
Bitwise OR, Bitwise XOR: V = 0
Bitwise AND: V = an all-1s bitvector
Minimum Value: V = the largest representable number in the memory value's format
Maximum Value: V = the smallest representable number in the memory value's format
Saturating unsigned integer add: V=0
Integer multiply: V=1
Floating-point add: V=-0.0
Floating-point multiply: V=1.0
Integer add, modulo a constant K: V=0(이 조작의 변이체는 일부 GPU에 있어서는, "레지스터" 입력이 상수 1인 경우 원자 증가/감소 명령의 형태로 발생할 수 있고, 값 K는 실제의 인수로서 제공된다).
또한, 상기 실시예들에 있어서는, 임시 캐시 라인에서의 데이터 항목들은 원자 조작에 대한 산술 연산의 신원 값으로 초기화된다. 그렇지만, 신원 값을 가지고 있지 않은 원자 산술 연산들은, 비록 그들이 가환적이며 연관적이더라도, 이렇게 처리될 수 없다. (예를 들면, 플로팅 포인트 min/mix는 가환적이며 연관적이지만, 메모리에서 sNaN 표현들을 진정시키는 것이 필요하면, 그 후에는 신원 값을 가지고 있지 않다.)
그러므로, 또 다른 실시예에 있어서는, "초기화되지 않은" 비트("무효" 비트)는 신원 값 대신, 그것을 준비할 때 임시 캐시 라인에 데이터 항목마다 저장된다. (이것은 원한다면 산술 연산이 신원 값을 가지고 있는 경우에도 행해질 수 있다.) 이것은 여분의 스토리지를 희생시키지만, 초기화되지 않은 비트들을 이용해서 본 발명의 방식으로 신원 값들을 가지고 있지 않은 원자 조작들(예를 들면, Floating-point min/max 및 Atomic-Swap)을 처리하는 것을 가능하게 하는 이점이 있다.
원자 조작이 임시 캐시 라인 내의 "초기화되지 않은" 데이터 항목에 대해 수행될 때, 문제의 원자 메모리 요청에 대한 인수 값이 임시 캐시 라인 내의 데이터 항목에 저장되고, 그 데이터 항목은 그 후에 초기화된 것으로 표시된다. 임시 캐시 라인 내의 데이터 항목에 대한(즉, "초기화된"("유효") 데이터 항목들에 대한) 다음의 원자 조작들은 그 후에 임시 캐시 라인에 저장된 값을 이용해서, 보통의 방식으로 수행될 수 있다.
그리고 임시 캐시 라인이 메모리로부터의 인커밍 "참" 캐시 라인과 결합될 때(즉, 병합 조작이 수행될 때), 임시 캐시 라인 내의 어떤 "초기화되지 않은" 데이터 항목들에 대한 인커밍 캐시 라인 내의 데이터 항목들은 변경되지 않은 "결과" 캐시 라인 전체에 걸쳐 복사된다(즉, 임시 캐시 라인 내의 어떤 초기화되지 않은 데이터 항목들에 의해 병합 조작이 단지 변경되지 않은 인커밍 캐시 라인으로부터의 대응하는 데이터를 (즉, 변경되지 않은 임시 캐시 라인 내의 인커밍 캐시 라인에 데이터 항목들을 저장하기 위해서) 이용하게 된다).
정지된 원자 메모리 요청들이 임시 캐시 라인으로부터 판독된 데이터 값과 교체된 그들의 인수 값들을 가지고 있는 방식에 초기화되지 않은 비트들이 사용되면, 임시 캐시 라인으로부터 판독되고 메모리 요청과 함께 저장되는 값은, 정지된 메모리 요청들 버퍼 내에 놓여 있을 때 초기화되지 않은 비트들을 전달해야 한다.
모든 원자 조작들이 기본 스토리지 유닛(바이트 등)의 배수인 크기를 가지면, 데이터 항목 마다가 아니라 스토리지 유닛마다 초기화되지 않은 비트를 제공하는 것이 가능할 것이다. 이것은 캐시 라인 내의 각 데이터 항목에 대해 적어도 한 개의 그러한 비트가 존재하는 한은 작동할 것이다. 이 경우, 임시 캐시 라인이 예를 들면, 바이트마다 더티 비트들(per-byte dirty bits)을 이미 추적할 수 있는 캐시에 저장되면, 더티 비트들은 초기화되지 않은 비트 기능을 제공하는 데에 사용될 수 있다.
상기로부터 알 수 있는 것처럼, 병합 조작이 수행된 후에는, 다른 L1 캐시들로부터의 스누프(snoops)에 의해 "참" 캐시 라인이 파킹된 메모리 요청들의 스풀링(spooling)이 완료하기 전에 L1 캐시로부터 보이지 않게 된다(즉, 오래된 임시 캐시 라인이 여전히 캐시에 존재할 것이다). 이 경우, 같은 메모리 어드레스에 대해서 신규 원자 요청이 나타나면, 오래된 임시 캐시 라인이 여전히 같은 메모리 어드레스에 대해 존재하더라도, 메모리 어드레스에 대한 신규 임시 캐시 라인이 할당되는 것이 바람직하다. 이 경우, 어떤 임시 캐시 라인 히트들(hits)이 오래된 캐시 라인이 아니라, 신규 임시 캐시 라인을 히트(hit)해야 하고, 바람직하게는 히트한다. 이것을 용이하게 하기 위해서, 병합 프로세스는 또한 문제의 임시 캐시 라인의 캐시 라인 상태를 변경하여 오래된 임시 캐시 라인들을 히트하는 것을 방지하는 것이 바람직하다.
바람직한 실시예에 있어서는, 캐시 라인 스누프 처리가 순차 순환 대기 방식(round-robi)이거나(즉, 캐시 N이 라인을 홀드하고, 모든 다른 캐시들이 그것을 원하면, 캐시 라인을 캐시 N+1로 건네준다), 그렇지 않으면 온당하다. (그렇지만, 이런 종류의 공정성 보장이 충족될 수 없더라도, 이것은 필수적인 것이 아니며 실질적인 성능 향상이 달성될 수 있다.)
상기 실시예에 있어서의 임시 캐시 라인에는 메모리 어드레스와 원자 조작 양쪽이 적힌 태그가 붙여져 있다. 그렇게, 임시 캐시 라인의 어드레스와 매치하지만 임시 캐시 라인의 원자 조작과는 매치하지 않는 메모리 액세스가 시도되면, 그러한 메모리 액세스는 임시 캐시 라인에 축적될 수 없다. 이 상황이 일어나면, 현존하는 임시 캐시 라인에 대해 캐시 라인 병합 프로세스가 완료되었을 때까지 시도된 액세스를 정지하거나, 또는 각 독립된 원자 조작에 대한 추가 임시 캐시 라인을 메모리 어드레스에 할당하는, 2가지의 가능한 접근법이 있다. 후자의 경우, 외부 데이터(캐시 라인)가 메모리로부터 도착할 때, 다수의 캐시 라인 "병합" 조작들이 메모리 어드레스에 묶여 있는 각 임시 캐시 라인에 대하여 수행될 수 있다. 바람직하게는, 구현은 이들 접근법 중의 어느 것을 다른 원자 조작들에 사용하는지를 선택할 수 있다. 예를 들면, 추가 임시 캐기 라인을 할당하는 것은, 원자 min/max 조작들에 특히 이로울 가능성이 높지만, Compare-And-Swap에는 매우 좋지 않다.
상기 실시예에 있어서는, L1 캐시만이 실제로 캐시 라인 병합 프로세스 중에 캐시 라인의 소유권을 유지할 필요가 있다는 것을 알 수 있고, 즉 병합 프로세스가 완료하자마자, 결과의 병합된 캐시 라인이 또 다른 L1 캐시에 전해질 수 있다. 이것은 정지된 원자 조작들이 아직 완전히 처리되지 않았더라도 사실이다(병합 프로세스 후에, L1 캐시는, 결과의 병합된 캐시 라인 없이도 정확한 원자 리턴 값들을 재구성하는 데에 필요한 모든 정보를 포함한다).
또한, 관찰자의 관점에서, 원자 조작들은 마치 캐시 라인 내의 모든 원자 조작들이 병합 단계 중에 투입되는 것처럼 행동한다. (이 이유 때문에, 임시 캐시 라인에 대해 그들의 원자를 투입했던 원자 요청들은, "NoReturn" 타입인 경우에도, 병합이 완료할 때까지 L1 캐시 내에 보류된다(그렇지 않으면, 그들의 오더링은 관찰할 수 있게 비순차적일 것이다).)
이것은 임시 캐시 라인에 대해서 수행되었던 원자 조작들의 수에 관계없이 사실이다. 또한, 병합 단계는 일정한 최악의 경우의 시간(constant worst-case time)이 걸린다(그것의 러닝 타임(running time)은 캐시 라인 길이에 비례한다).
이런 사정으로, 다수의 L1 캐시가 모두 같은 메모리 위치에 대해 원자 조작을 수행하기를 원하면, 캐시 라인이 끊임없이 하나의 L1 캐시로부터 또 다른 캐시로 이동될 것이고, 각 L1 캐시는 바로 라인을 다음 캐시로 전달하기 전에 단 한 개의 "병합" 패스(pass)에 종속된다. 이것은 L1 캐시 내부에서 원자 갱신율과 전세계적으로 관측된 원자 갱신율을 분리시키는 것을 돕는다. 이 갱신율은 단지 캐시 라인이 빨리 이동할 수 있는 방법에 의해 제한된다.
이것은 개개의 캐시가 매우 높은 원자 레이트(atomic rate)를 지속시킬 수 없더라도, 극도로 높은 관찰된 원자 조작의 레이트를 달성하는 것을 가능하게 한다. 예를 들면, 40 L1 캐시들을 가진 시스템에 있어서는, 20 사이클로 하나의 캐시로부터 또 다른 캐시로 캐시 라인을 전달하는 능력과 5 사이클로 "병합"을 행하는 능력을 가지고, 캐시 라인은 25 사이클마다 하나의 L1 캐시의 레이트로 하나의 L1 캐시로부터 또 다른 캐시로 이동할 수 있다. 각 L1 캐시가 1000 스레드를 제공하는 것으로 가정하면, 그 전부 다 하나의 카운터를 증가시키기를 원하고, 그러한 시스템에 있어서는 각 L1 캐시가 1000 카운터 증분의 누적 결과를 저장하는 임시 캐시 라인을 추적할 것이다. 카운터를 포함하고 있는 캐시 라인이 하나의 캐시로부터 또 다른 캐시로 뛰어다닐 때, 클럭 사이클마다 40 증분의 관찰된 글로벌 증분 레이트에 대하여, 25 사이클마다 1000 원자를 제공할 수 있을 것이다. (이것은 각 L1 캐시가 내적으로 클럭마다 1 원자 증분을 제공할 수 있는 것을 필요로 한다.)
또한, 본 실시예는 L1 캐시의 조작에 단지 국부적인 변화만을 필요로 한다. L1 캐시들이 그들의 마스터 및 메모리 서브시스템과 통신하기 위해 사용하는 어떤 프로토콜(일반적으로 마스터에 대해서는 간단한 요청 응답 프로토콜 및 메모리 서브시스템에 대해서는 풀 코히런시(full coherency) 프로토콜)이든 영향을 받지 않는다.
본 발명은, 그것의 바람직한 실시예에 있어서 적어도, 다수의 데이터 캐시를 가진 시스템에 있어서의 원자 조작의 실행을 용이하게 하기 위한 메카니즘을 좀 더 효율적인 방식으로 제공한다는 것을 상기로부터 알 수 있다.
이것은 본 발명의 바람직한 실시예에 있어서 적어도, 메모리로부터 "참" 캐시 라인의 캐시에의 도착을 보류하고 있는 임시 캐시 라인 내의 같은 메모리 위치에 액세스하는 것인 원자 조작들의 결과를 축적하고, 그 후에 "참" 캐시 라인이 캐시에 도착하면 임시 캐시 라인에 저장된 원자 조작들의 축적된 결과들을 메모리로부터 "참" 캐시 라인과 결함으로써 달성된다. 본 발명은 메모리 원자 동작들의 축적을 가능하게 함으로써, 캐시 라인이 정해진 캐시에 도착할 때, 축적된 원자들의 풀 세트가 캐시 라인에 즉시 투입될 수 있다.
바람직한 실시예에 있어서는 적어도, 본 발명은 또한 연속적으로 수행된 원자들을 모두 갖는 것과 동일한 행동을 관찰할 수 있게 생성하기 위해서, 원자 값들을 재구성하는 방식을 특징으로 한다.
이것은 모두 캐시 조작에만 변화가 있고 어떤 다른 서브시스템에는 어떤 변화도 없게 달성된다.

Claims (31)

  1. 실행 스레드들에 대한 원자 메모리 요청들을 개시하도록 작동되는 한 개 이상의 이니시에이터와, 원자 메모리 조작이 수행될 때 원자 메모리 조작을 수행하는 데에 필요한 데이터를 저장하기 위해서 사용되는 한 개 이상의 데이터 캐시를 포함하는 데이터 처리 시스템의 작동방법으로서, 상기 방법은,
    관련 산술 연산을 갖는 특정 원자 조작을, 같은 메모리 어드레스에 대해 차례로 각각 실행하는 한 개 이상의 실행 스레드들의 세트에 대해서,
    상기 세트 내의 제1 스레드에 대한 원자 조작을 수행하기 전에, 원자 조작을 수행하는 데에 필요한 데이터를 저장하는 데이터 캐시가 원자 조작이 수행되는 메모리 어드레스에 데이터를 이미 저장하고 있는지 여부를 판정하고, 상기 데이터 캐시가 이미 그 데이터를 저장하고 있지 않으면,
    원자 조작이 수행되는 메모리 어드레스에 데이터를 포함하는 데이터 항목을 포함하고 있는 캐시 라인을 상기 데이터 캐시로 페치하라는 메모리 요청을 보내고,
    원자 조작에 대한 상기 데이터 캐시에 임시 캐시 라인을 할당하며,
    원자 조작에 대한 상기 임시 캐시 라인에 데이터 항목들을 준비하고,
    상기 세트 내의 제1 스레드에 대한 원자 조작용 산술 연산에 대한 오퍼랜드 값을, 상기 임시 캐시 라인에 있어서 원자 조작이 수행되는 메모리 어드레스용 데이터 항목에 저장시키며,
    상기 한 개 이상의 실행 스레드들의 세트가 한 개 이상의 스레드를 포함하면, 원자 조작이 수행되는 메모리 어드레스에 데이터를 포함하고 있는 캐시 라인이 상기 데이터 캐시에 도착할 때까지, 차례로 상기 데이터 캐시 내의 상기 임시 캐시 라인에 있어서 원자 조작들이 수행되는 메모리 어드레스용 데이터 항목에 대해서 상기 세트 내의 한 개 이상의 다음 스레드에 대한 원자 조작을 수행하고,
    원자 조작이 수행되는 메모리 어드레스에 데이터를 포함하고 있는 캐시 라인이 상기 데이터 캐시에 도착하는 경우에는, 하나의 오퍼랜드로서 상기 임시 캐시 라인에 있어서의 메모리 어드레스용 데이터 항목을 이용해서, 그리고 다른 오퍼랜드로서 도착한 캐시 라인에 있어서의 메모리 어드레스용 데이터 항목을 이용해서 원자 조작용 산술 연산을 수행함으로써, 원자 조작이 수행되는 메모리 어드레스에 대해 원자 메모리 조작들의 결합 결과를 포함하고 있는 결과 데이터 항목을 제공하며,
    상기 결과 데이터 항목을 포함하고 있는 결과 캐시 라인을 저장하는 것을 포함하는 것을 특징으로 하는, 작동방법.
  2. 제 1 항에 있어서,
    상기 실행 스레드들의 세트는 복수의 실행 스레드들을 포함하고, 상기 방법은,
    원자 조작이 수행되는 메모리 어드레스에 데이터를 포함하고 있는 캐시 라인이 상기 데이터 캐시에 도착하기 전에, 차례로 상기 데이터 캐시 내의 상기 임시 캐시 라인에 있어서 원자 조작이 수행되는 메모리 어드레스용 데이터 항목에 대해서 복수의 스레드들에 대한 원자 조작을 수행함으로써, 원자 조작이 수행되는 메모리 어드레스에 데이터를 포함하고 있는 캐시 라인이 상기 데이터 캐시에 도착하기 전에 상기 임시 캐시 라인에 복수의 실행 스레드들에 대한 원자 조작들의 결과들을 축적하는 것을 포함하는 것을 특징으로 하는, 작동방법.
  3. 제 1 항 또는 제 2 항에 있어서,
    같은 임시 캐시 라인을 이용해서 실행 스레드들의 2개 이상의 다른 세트들에 대한 원자 조작들의 결과들을 축적하는 것을 포함하고, 실행 스레드들의 각 세트가 관련 산술 연산을 갖는 특정 원자 조작을 각기 다른 메모리 어드레스에 대해서 실행하며,
    상기 방법은,
    실행 스레드들의 각 세트에 대한 각각의 데이터 항목을 포함하는 캐시 라인을 상기 데이터 캐시로 페치하라는 메모리 요청을 보내고, 각각의 데이터 항목이 문제의 스레드들의 세트에 대해 원자 조작이 수행되는 메모리 어드레스에 데이터를 포함하며,
    스레드들의 각 세트 내의 제1 스레드에 대한 원자 조작용 산술 연산에 대한 오퍼랜드 값을, 상기 임시 캐시 라인에 있어서 문제의 스레드들의 세트에 대한 각각의 메모리 어드레스용 데이터 항목에 저장시키며,
    한 개 이상의 스레드를 포함하는 한 개 이상의 실행 스레드들의 각 세트에 대해서는, 스레드들의 세트들에 대해서 원자 조작들이 수행되는 메모리 어드레스들에 데이터를 포함하는 캐시 라인이 상기 데이터 캐시에 도착할 때까지, 차례로 상기 데이터 캐시 내의 상기 임시 캐시 라인에 있어서 문제의 스레드들의 세트에 대한 메모리 어드레스용 데이터 항목에 대해서 스레드들의 세트 내의 한 개 이상의 다음 스레드들에 대한 원자 조작을 수행하고,
    스레드들의 세트들에 대하여 원자 조작들이 수행되는 메모리 어드레스들에 데이터를 포함하고 있는 캐시 라인이 상기 데이터 캐시에 도착할 때, 스레드들의 각각의 세트에 대해서는, 하나의 오퍼랜드로서 상기 임시 캐시 라인에 있어서의 스레드들의 세트에 대한 메모리 어드레스용 데이터 항목을 이용하여, 그리고 다른 오퍼랜드로서 도착한 캐시 라인 내의 스레드들의 세트에 대한 메모리 어드레스용 데이터 항목을 이용해서 스레드들의 세트에 대한 원자 조작용 산술 연산을 수행함으로써, 스레드들의 세트에 대해 원자 조작이 수행되는 메모리 어드레스에 원자 메모리 조작들의 결합 결과를 포함하고 있는 결과 데이터 항목을 제공하며,
    스레드들의 각 세트에 대한 결과 데이터 항목들을 포함하고 있는 결과 캐시 라인을 저장하는 것을 포함하는 것을 특징으로 하는, 작동방법.
  4. 제 1 항, 제 2 항, 또는 제 3 항 중 어느 한 항에 있어서,
    상기 데이터 처리 시스템은 각자의 데이터 캐시를 각각 갖는 복수의 이니시에이터들을 갖는 것을 특징으로 하는, 작동방법.
  5. 제 1 항 내지 제 4 항 중 어느 한 항에 있어서,
    원자 조작은 Integer Add; Bitwise AND, OR, XOR; Minimum Value; Maximum Value; Saturating unsigned integer add; Integer multiply; floating-point add; floating point multiply; integer add, modulo a constant K; Swap; 및 Compare-and-Swap 중의 하나를 포함하는 것을 특징으로 하는, 작동방법.
  6. 제 1 항 내지 제 5 항 중 어느 한 항에 있어서,
    상기 임시 캐시 라인에 있어서의 각 데이터 항목은 그것을 문제의 원자 조작용 산술 연산을 위한 아이덴티티 값으로 초기화함으로써 준비되고, 혹은 상기 임시 캐시 라인에 있어서의 각 데이터 항목은 그것을 초기화되지 않은 것으로 표시함으로써 준비되는 것을 특징으로하는, 작동방법.
  7. 제 1 항 내지 제 6 항 중 어느 한 항에 있어서,
    요청된 캐시 라인이 상기 데이터 캐시에 도착하기를 기다리는 동안, 큐(queue)로부터 각 원자 메모리 요청을 취해서 그것을 상기 임시 캐시 라인에 대해서 차례로 수행함으로써, 같은 메모리 어드레스를 이용하는 대기 원자 메모리 조작들을 상기 임시 캐시 라인에 축적하는 것을 더 포함하는 것을 특징으로 하는, 작동방법.
  8. 제 1 항 내지 제 7 항 중 어느 한 항에 있어서,
    상기 임시 캐시 라인은 복수의 데이터 항목들을 포함하고, 상기 임시 캐시 라인에 있어서의 각 데이터 항목은 그것을 산술 연산을 위한 아이덴티티 값으로 설정함으로써 준비되고,
    스레드들의 세트 내의 제1 스레드에 대한 원자 조작용 산술 연산에 대한 오퍼랜드 값을, 스레드들의 세트에 대한 상기 임시 캐시 라인에 있어서 원자 조작이 수행되는 메모리 어드레스용 데이터 항목에 저장시키는 단계는, 상기 임시 캐시 라인에 있어서 원자 조작이 수행되는 메모리 어드레스용 데이터 항목에 저장된 아이덴티티 값을 이용해서 상기 제1 스레드에 대한 원자 조작용 산술 연산을 수행하고, 그 결과를, 상기 임시 캐시 라인에 있어서 원자 조작이 수행되는 메모리 어드레스용 데이터 항목에 기록하는 것을 포함하며,
    상기 방법은 원자 조작이 수행되는 메모리 어드레스 또는 어드레스들에 데이터를 포함하고 있는 캐시 라인이 상기 데이터 캐시에 도착할 때, 캐시 라인들 내의 데이터 항목들의 각자의 쌍에 대한 원자 조작용 산술 연산을 수행함으로써 캐시 라인과 상기 임시 캐시 라인을 결합하여 결과 캐시 라인을 제공하는 것을 더 포함하는 것을 특징으로 하는, 작동방법.
  9. 제 1 항 내지 제 7 항 중 어느 한 항에 있어서,
    상기 임시 캐시 라인은 복수의 데이터 항목들을 포함하고, 상기 임시 캐시 라인에 있어서의 각 데이터 항목은 그것을 초기화되지 않는 것으로 표시함으로써 준비되고,
    스레드들의 세트 내의 제1 스레드에 대한 원자 조작용 산술 연산에 대한 오퍼랜드 값을, 스레드들의 세트에 대한 상기 임시 캐시 라인에 있어서 원자 조작이 수행되는 메모리 어드레스용 데이터 항목에 저장시키는 단계는, 상기 세트 내의 제1 스레드에 대한 원자 조작용 산술 연산에 대한 오퍼랜드 값을, 스레드들의 세트에 대한 상기 임시 캐시 라인에 있어서 원자 조작이 수행되는 메모리 어드레스용 데이터 항목에 기록하는 것을 포함하고, 상기 방법은, 상기 임시 캐시 라인에 있어서의 데이터 항목을 초기화되지 않은 것으로 표시하는 것을 포함하며,
    상기 방법은, 원자 조작이 수행되는 메모리 어드레스 또는 어드레스들에 데이터를 포함하고 있는 캐시 라인이 상기 데이터 캐시에 도착할 때,
    초기화되지 않은 것으로 표시되는 상기 임시 캐시 라인에 있어서의 데이터 항목들에 대해서는, 하나의 오퍼랜드로서 상기 임시 캐시 라인에 있어서의 메모리 어드레스용 데이터 항목을 이용하여, 그리고 다른 오퍼랜드로서 도착한 캐시 라인에 있어서의 메모리 어드레스용 데이터 항목을 이용해서 원자 조작용 산술 연산을 수행함으로써, 메모리 어드레스에 대한 결과 데이터 항목을 제공하고,
    상기 임시 캐시 라인에 있어서의 초기화되지 않은 데이터 항목들에 대해서는, 인커밍 캐시 라인에 있어서의 데이터 항목들을, 변경되지 않은 결과 캐시 라인에 복사하는 것을 더 포함하는 것을 특징으로 하는, 작동방법.
  10. 제 1 항 내지 제 9 항 중 어느 한 항에 있어서,
    리턴 원자 조작에 대해서는, 원자 조작이 상기 임시 캐시 라인에 대해 수행될 때, 스레드에 대한 원자 메모리 조작을 이니시에이터로 돌려보내지 않고, 대신 원자 메모리 조작을, 정지된 원자 메모리 요청들에 대한 버퍼에 배치하는 것을 더 포함하는 것을 특징으로 하는, 작동방법.
  11. 제 10 항에 있어서,
    원자 메모리 요청이 정지된 요청들 버퍼에 배치되어 있을 때 원자 메모리 요청에 대한 원래의 인수 값을 유지하거나, 또는 원자 메모리 요청이 정지된 요청들 버퍼에 배치되어 있을 때 원자 메모리 요청에 대한 원래의 인수 값을 상기 임시 캐시 라인으로부터 판독된 데이터 값으로 교체하는 것을 더 포함하는 것을 특징으로 하는, 작동방법.
  12. 제 10 항 내지 제 11 항 중 어느 한 항에 있어서,
    상기 임시 캐시 라인과 요청된 캐시 라인을 결합해서 결과 캐시 라인을 제공했으면, 상기 요청된 캐시 라인으로부터의 메모리 어드레스 또는 어드레스들 내의 데이터를 이용해서 문제의 메모리 어드레스 또는 어드레스들과 관련이 있는 정지된 메모리 요청들을 수행하는 것을 더 포함하는 것을 특징으로 하는, 작동방법.
  13. 제 10 항 내지 제 12 항 중 어느 한 항에 있어서,
    상기 임시 캐시 라인에 대해 추적하는 것을 더 포함하고, 그 정지된 메모리 요청들은 상기 요청된 캐시 라인을 기다리고 있는 것을 특징으로 하는, 작동방법.
  14. 제 1 항 내지 제 13 항 중 어느 한 항에 있어서,
    상기 데이터 처리 시스템은, 그래픽 처리 동작들을 수행하기 위해서 그래픽 쉐이더 프로그램을 실행하는 한 개 이상의 프로그래머블 쉐이더 스테이지들을 각각 포함하는 복수의 그래픽 처리 파이프라인들을 포함하는 그래픽 처리 시스템을 구비하는 것을 특징으로 하는, 작동방법.
  15. 실행 스레드들에 대한 원자 메모리 요청들을 개시하도록 작동되는 한 개 이상의 이니시에이터와,
    원자 메모리 조작이 수행될 때 원자 메모리 조작을 수행하는 데에 필요한 데이터를 저장하기 위해서 사용되는 한 개 이상의 데이터 캐시를 구비하고,
    상기 한 개 이상의 데이터 캐시는, 관련 산술 연산을 갖는 특정 원자 조작을 같은 메모리 어드레스에 대해서 차례로 각각 실행하는 한 개 이상의 실행 스레드들의 세트에 대해서,
    상기 세트 내의 제1 스레드에 대한 원자 조작을 수행하기 전에, 원자 조작을 수행하는 데에 필요한 데이터를 저장하는 데이터 캐시가 이미 원자 조작이 수행되는 메모리 어드레스에 데이터를 저장하고 있는지를 판정하고, 상기 데이터 캐시가 그 데이터를 이미 저장하고 있지 않으면,
    원자 조작이 수행되는 메모리 어드레스에 데이터를 포함하는 데이터 항목을 포함하고 있는 캐시 라인을 상기 데이터 캐시에 페치하라는 메모리 요청을 보내고,
    원자 조작에 대한 상기 데이터 캐시에 임시 캐시 라인을 할당하며,
    원자 조작에 대한 상기 임시 캐시 라인에 데이터 항목들을 준비하고,
    상기 세트 내의 제1 스레드에 대한 원자 조작용 산술 연산에 대한 오퍼랜드 값을, 상기 임시 캐시 라인에 있어서 원자 조작이 수행되는 메모리 어드레스용 데이터 항목에 저장시키며,
    상기 한 개 이상의 실행 스레드들의 세트가 한 개 이상의 스레드를 포함하면, 원자 조작이 수행되는 메모리 어드레스에 데이터를 포함하고 있는 캐시 라인이 상기 데이터 캐시에 도착할 때까지, 차례로 상기 데이터 캐시 내의 상기 임시 캐시 라인에 있어서 원자 조작들이 수행되는 메모리 어드레스용 데이터 항목에 대해서 상기 세트 내의 한 개 이상의 다음 스레드들에 대한 원자 조작을 수행하고,
    원자 조작이 수행되는 메모리 어드레스에 데이터를 포함하고 있는 캐시 라인이 상기 데이터 캐시에 도착하는 경우에는, 하나의 오퍼랜드로서 상기 임시 캐시 라인에 있어서의 메모리 어드레스용 데이터 항목을 이용하여, 그리고 다른 오퍼랜드로서 도착한 캐시 라인에 있어서의 메모리 어드레스용 데이터 항목을 이용해서 원자 조작용 산술 연산을 수행함으로써, 원자 조작이 수행되는 메모리 어드레스에 원자 메모리 조작들의 결합 결과를 포함하고 있는 결과 데이터 항목을 제공하며,
    상기 결과 데이터 항목을 포함하고 있는 결과 캐시 라인을 저장하도록 구성되는 것을 특징으로 하는, 데이터 처리 시스템.
  16. 제 15 항에 있어서,
    상기 실행 스레드들의 세트는 복수의 실행 스레드들을 포함하고, 상기 한 개 이상의 데이터 캐시는,
    원자 조작이 수행되는 메모리 어드레스에 데이터를 포함하고 있는 캐시 라인이 상기 데이터 캐시에 도착하기 전에, 차례로 상기 데이터 캐시 내의 상기 임시 캐시 라인에 있어서 원자 조작이 수행되는 메모리 어드레스용 데이터 항목에 대해서 복수의 스레드들에 대한 원자 조작을 수행함으로써, 원자 조작이 수행되는 메모리 어드레스에 데이터를 포함하고 있는 캐시 라인이 상기 데이터 캐시에 도착하기 전에 상기 임시 캐시 라인에 복수의 실행 스레드들에 대한 원자 조작들의 결과들을 축적하도록 구성되는 특징으로 하는, 데이터 처리 시스템.
  17. 제 15 항 또는 제 16 항에 있어서,
    상기 한 개 이상의 데이터 캐시는,
    같은 임시 캐시 라인을 이용해서 실행 스레드들의 2개 이상의 다른 세트들에 대한 원자 조작들의 결과들을 축적하고, 실행 스레드들의 각 세트가 관련 산술 연산을 갖는 특정 원자 조작을 각기 다른 메모리 어드레스에 대해 실행하며,
    상기 같은 임시 캐시 라인을 이용해서 상기 실행 스레드들의 2개 이상의 다른 세트들에 대한 원자 조작들의 결과들을 축적할 때,
    실행 스레드들의 각 세트에 대한 각각의 데이터 항목을 포함하는 캐시 라인을 상기 데이터 캐시로 페치하라는 메모리 요청을 보내고, 각각의 데이터 항목이 문제의 스레드들의 세트에 대해 원자 조작이 수행되는 메모리 어드레스에 데이터를 포함하며,
    스레드들의 각 세트 내의 제1 스레드에 대한 원자 조작용 산술 연산에 대한 오퍼랜드 값을, 상기 임시 캐시 라인에 있어서의 문제의 스레드들의 세트에 대한 각각의 메모리 어드레스용 데이터 항목에 저장시키며,
    한 개 이상의 스레드를 포함하는 한 개 이상의 실행 스레드들의 각 세트에 대해서는, 스레드들의 세트들에 대해 원자 조작들이 수행되는 메모리 어드레스들에 데이터를 포함하고 있는 캐시 라인이 상기 데이터 캐시에 도착할 때까지, 차례로 상기 데이터 캐시 내의 상기 임시 캐시 라인에 있어서의 문제의 스레드들의 세트에 대한 메모리 어드레스용 데이터 항목에 대하여 스레드들의 세트 내의 한 개 이상의 다음 스레드들에 대한 원자 조작을 수행하고,
    스레드들의 세트들에 대하여 원자 조작들이 수행되는 메모리 어드레스들에 데이터를 포함하고 있는 캐시 라인이 상기 데이터 캐시에 도착할 때, 스레드들의 각각의 세트에 대해서는, 하나의 오퍼랜드로서 상기 임시 캐시 라인에 있어서의 스레드들의 세트에 대한 메모리 어드레스용 데이터 항목을 이용하여, 그리고 다른 오퍼랜드로서 도착한 캐시 라인에 있어서의 스레드들의 세트에 대한 메모리 어드레스용 데이터 항목을 이용해서 스레드들의 세트에 대한 원자 조작용 산술 연산을 수행함으로써, 스레드들의 세트에 대해 원자 조작이 수행되는 메모리 어드레스에 원자 메모리 조작들의 결합 결과를 포함하고 있는 결과 데이터 항목을 제공하며,
    스레드들의 각 세트에 대한 결과 데이터 항목들을 포함하고 있는 결과 캐시 라인을 저장하도록 구성되는, 데이터 처리 시스템.
  18. 제 15 항, 제 16 항, 또는 제 17 항 중 어느 한 항에 있어서,
    상기 데이터 처리 시스템은 각자의 데이터 캐시를 각각 갖는 복수의 이니시에이터들을 갖는 것을 특징으로 하는, 데이터 처리 시스템.
  19. 제 15 항, 제 16 항, 제 17 항, 또는 제 18 중 어느 한 항에 있어서,
    원자 조작은 Integer Add; Bitwise AND, OR, XOR; Minimum Value; Maximum Value; Saturating unsigned integer add; Integer multiply; floating-point add; floating point multiply; integer add, modulo a constant K; Swap; 및 Compare-and-Swap 중의 하나를 포함하는 것을 특징으로 하는, 데이터 처리 시스템.
  20. 제 15 항 내지 제 19 항 중 어느 한 항에 있어서,
    상기 임시 캐시 라인에 있어서의 각 데이터 항목은 그것을 문제의 원자 조작용 산술 연산에 대한 아이덴티티 값으로 초기화함으로써 준비되고, 또는 상기 임시 캐시 라인에 있어서의 각 데이터 항목은 그것을 초기화되지 않는 것으로 표시함으로써 준비되는 것을 특징으로 하는, 데이터 처리 시스템.
  21. 제 15 항 내지 제 20 항 중 어느 한 항에 있어서,
    상기 한 개 이상의 데이터 캐시는, 요청된 캐시 라인이 상기 데이터 캐시에 도착하기를 기다리는 동안, 큐로부터 각 원자 메모리 요청을 취해서 그것을 상기 임시 캐시 라인에 대해서 차례로 수행함으로써, 같은 메모리 어드레스를 이용하는 대기 원자 메모리 조작들을 상기 임시 캐시 라인에 축적하도록 구성되는 것을 특징으로 하는, 데이터 처리 시스템.
  22. 제 15 항 내지 제 21 항 중 어느 한 항에 있어서,
    상기 임시 캐시 라인은 복수의 데이터 항목들을 포함하고, 상기 임시 캐시 라인에 있어서의 각 데이터 항목은 그것을 산술 연산에 대한 아이덴티티 값으로 설정함으로써 준비되고,
    상기 한 개 이상의 데이터 캐시는,
    상기 임시 캐시 라인에 있어서 원자 조작이 수행되는 메모리 어드레스용 데이터 항목에 저장된 아이덴티티 값을 이용해서 제1 스레드에 대한 원자 조작용 산술 연산을 수행하고, 그 결과를, 상기 임시 캐시 라인에 있어서 원자 조작이 수행되는 메모리 어드레스용 데이터 항목에 기록함으로써 스레드들의 세트 내의 제1 스레드에 대한 원자 조작용 산술 연산에 대한 오퍼랜드 값을, 스레드들의 세트에 대한 상기 임시 캐시 라인에 있어서 원자 조작이 수행되는 메모리 어드레스용 데이터 항목에 저장시키고,
    원자 조작이 수행되는 메모리 어드레스 또는 어드레스들에 데이터를 포함하고 있는 캐시 라인이 상기 데이터 캐시에 도착할 때, 캐시 라인들 내의 데이터 항목들의 각각의 쌍에 대한 원자 조작용 산술 연산을 수행함으로써 상기 임시 캐시 라인과 캐시 라인을 결합하여 결과 캐시 라인을 제공하도록 구성되는 것을 특징으로 하는, 데이터 처리 시스템.
  23. 제 15 항 내지 제 21 항 중 어느 한 항에 있어서,
    상기 임시 캐시 라인은 복수의 데이터 항목들을 포함하고, 상기 임시 캐시 라인에 있어서의 각 데이터 항목은 그것을 초기화되지 않은 것으로 표시함으로써 준비되고, 상기 한 개 이상의 데이터 캐시는,
    스레드들의 세트에 대한 상기 임시 캐시 라인에 있어서 원자 조작이 수행되는 메모리 어드레스용 데이터 항목에 상기 세트 내의 제1 스레드에 대한 원자 조작용 산술 연산에 대한 오퍼랜드 값을 기록함으로써 스레드들의 세트 내의 제1 스레드에 대한 원자 조작용 산술 연산에 대한 오퍼랜드 값을, 스레드들의 세트에 대한 상기 임시 캐시 라인에 있어서 원자 조작이 수행되는 메모리 어드레스용 데이터 항목에 저장시키고, 그 후에 상기 임시 캐시 라인에 있어서의 데이터 항목을 초기화된 것으로 표시하도록 구성되고,
    상기 한 개 이상의 데이터 캐시는, 원자 조작이 수행되는 메모리 어드레스 또는 어드레스들에 데이터를 포함하고 있는 캐시 라인이 상기 데이터 캐시에 도착할 때,
    초기화된 것으로 표시되는 상기 임시 캐시 라인에 있어서의 데이터 항목들에 대해서는, 하나의 오퍼랜드로서 상기 임시 캐시 라인에 있어서의 메모리 어드레스용 데이터 항목을 이용하여, 그리고 다른 오퍼랜드로서 도착한 캐시 라인에 있어서의 메모리 어드레스용 데이터 항목을 이용해서 원자 조작용 산술 연산을 수행함으로써, 메모리 어드레스에 대한 결과 데이터 항목을 제공하고,
    상기 임시 캐시 라인에 있어서의 초기화되지 않은 데이터 항목들에 대해서는, 인커밍 캐시 라인에 있어서의 데이터 항목을 변경되지 않은 결과 캐시 라인에 복사하도록 더 구성되는 것을 특징으로 하는, 데이터 처리 시스템.
  24. 제 15 항 내지 제 23 항 중 어느 한 항에 있어서,
    상기 한 개 이상의 데이터 캐시는, 리턴 원자 조작에 대해서는, 상기 임시 캐시 라인에 대해 원자 조작이 수행될 때, 스레드에 대한 원자 메모리 조작을 이니시에이터로 돌려보내지 않고, 대신 원자 메모리 조작을 정지된 원자 메모리 요청들에 대한 버퍼에 배치하도록 구성되는 것을 특징으로 하는, 데이터 처리 시스템.
  25. 제 24 항에 있어서,
    상기 한 개 이상의 데이터 캐시는, 원자 메모리 요청이 정지된 요청들 버퍼에 배치될 때 원자 메모리 요청에 대한 원래의 인수 값을 유지하고, 또는 원자 메모리 요청이 정지된 요청들 버퍼에 배치될 때 원자 메모리 요청에 대한 원래의 인수 값을, 상기 임시 캐시 라인으로부터 판독된 데이터 값으로 교체하도록 구성되는 것을 특징으로 하는, 데이터 처리 시스템.
  26. 제 24 항 내지 제 25 항 중 어느 한 항에 있어서,
    상기 한 개 이상의 데이터 캐시는, 상기 임시 데이터 라인과 요청된 캐시 라인을 결합하여 결과 캐시 라인을 제공했으면, 상기 요청된 캐시 라인으로부터의 메모리 어드레스 또는 어드레스들 내의 데이터를 이용해서 문제의 메모리 어드레스 또는 어드레스들과 관련이 있는 정지된 메모리 요청들을 수행하도록 구성되는 것을 특징으로 하는, 데이터 처리 시스템.
  27. 제 24 항 내지 제 26 항 중 어느 한 항에 있어서,
    상기 한 개 이상의 데이터 캐시는 메모리 캐시 라인에 대해 추적하도록 구성되고, 정지된 메모리 요청들은 요청된 캐시 라인을 기다리고 있는 것을 특징으로 하는, 데이터 처리 시스템.
  28. 제 15 내지 제 27 항 중 어느 한 항에 있어서,
    상기 데이터 처리 시스템은, 그래픽 쉐이더 프로그램을 실행하는 한 개 이상의 프로그래머블 쉐이더 스테이지들을 각각 포함하는 복수의 그래픽 처리 파이프라인들을 포함하는 그래픽 처리 시스템을 구비하여 그래픽 처리 동작을 수행하는 것을 특징으로 하는, 데이터 처리 시스템.
  29. 컴퓨터 프로그램이 데이터 처리 시스템에서 실행될 때 청구항 1 내지 14 중 어느 한 항의 방법의 모든 스텝들을 수행하는 데에 적합한 소프트웨어 코드를 포함하는 컴퓨터 프로그램.
  30. 첨부도면 중의 도 1, 및 도 3 내지 도 6 중 어느 하나를 참조하여 주로 여기에 기술된 것과 같은 데이터 처리 시스템의 작동방법.
  31. 첨부도면 중의 도 1, 및 도 3 내지 도 6 중 어느 하나를 참조하여 주로 여기에 기술된 것과 같은 데이터 처리 시스템.
KR1020167006004A 2013-08-08 2014-08-07 데이터 처리 시스템 KR102284477B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/962,905 2013-08-08
US13/962,905 US9092345B2 (en) 2013-08-08 2013-08-08 Data processing systems
PCT/GB2014/052427 WO2015019102A2 (en) 2013-08-08 2014-08-07 Data processing systems

Publications (2)

Publication Number Publication Date
KR20160042948A true KR20160042948A (ko) 2016-04-20
KR102284477B1 KR102284477B1 (ko) 2021-08-03

Family

ID=51392281

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167006004A KR102284477B1 (ko) 2013-08-08 2014-08-07 데이터 처리 시스템

Country Status (6)

Country Link
US (1) US9092345B2 (ko)
EP (1) EP3031034B1 (ko)
KR (1) KR102284477B1 (ko)
CN (1) CN105659285B (ko)
GB (1) GB2533505B (ko)
WO (1) WO2015019102A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200043698A (ko) * 2018-10-18 2020-04-28 인하대학교 산학협력단 Hbm 도입으로 인한 메모리 보틀넥 문제 해결 방법 및 장치

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9471310B2 (en) * 2012-11-26 2016-10-18 Nvidia Corporation Method, computer program product, and system for a multi-input bitwise logical operation
US9471323B2 (en) * 2013-10-03 2016-10-18 Intel Corporation System and method of using an atomic data buffer to bypass a memory location
GB2539958B (en) * 2015-07-03 2019-09-25 Advanced Risc Mach Ltd Data processing systems
US10535114B2 (en) * 2015-08-18 2020-01-14 Nvidia Corporation Controlling multi-pass rendering sequences in a cache tiling architecture
CN106886504B (zh) * 2017-04-05 2020-12-04 上海弘矽半导体有限公司 基于ahb总线的多核soc中实现原子操作系统及方法
US10409614B2 (en) 2017-04-24 2019-09-10 Intel Corporation Instructions having support for floating point and integer data types in the same register
US10474458B2 (en) 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
US10621086B2 (en) * 2017-10-30 2020-04-14 International Business Machines Corporation Dynamic resource visibility tracking to avoid atomic reference counting
US10769068B2 (en) 2017-11-10 2020-09-08 International Business Machines Corporation Concurrent modification of shared cache line by multiple processors
US10572260B2 (en) 2017-12-29 2020-02-25 Intel Corporation Spatial and temporal merging of remote atomic operations
US10296459B1 (en) 2017-12-29 2019-05-21 Intel Corporation Remote atomic operations in multi-socket systems
US11614889B2 (en) * 2018-11-29 2023-03-28 Advanced Micro Devices, Inc. Aggregating commands in a stream based on cache line addresses
US20220180467A1 (en) 2019-03-15 2022-06-09 Intel Corporation Systems and methods for updating memory side caches in a multi-gpu configuration
BR112021016106A2 (pt) 2019-03-15 2021-11-09 Intel Corp Processador gráfico de propósito geral, método e sistema de processamento de dados
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
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
US11714760B2 (en) * 2019-05-24 2023-08-01 Texas Instmments Incorporated Methods and apparatus to reduce bank pressure using aggressive write merging
US11361400B1 (en) 2021-05-06 2022-06-14 Arm Limited Full tile primitives in tile-based graphics processing
US11726918B2 (en) * 2021-06-28 2023-08-15 Advanced Micro Devices, Inc. Dynamically coalescing atomic memory operations for memory-local computing
US20230028666A1 (en) * 2021-07-19 2023-01-26 Intel Corporation Performing global memory atomics in a private cache of a sub-core of a graphics processing unit
US11960403B2 (en) * 2022-08-30 2024-04-16 Micron Technology, Inc. Variable execution time atomic operations

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110154000A1 (en) * 2009-12-18 2011-06-23 Fryman Joshua B Adaptive optimized compare-exchange operation
US8108610B1 (en) * 2008-10-21 2012-01-31 Nvidia Corporation Cache-based control of atomic operations in conjunction with an external ALU block

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2500101B2 (ja) 1992-12-18 1996-05-29 インターナショナル・ビジネス・マシーンズ・コーポレイション 共用変数の値を更新する方法
US7627723B1 (en) 2006-09-21 2009-12-01 Nvidia Corporation Atomic memory operators in a parallel processor
US8392669B1 (en) 2008-03-24 2013-03-05 Nvidia Corporation Systems and methods for coalescing memory accesses of parallel threads
US20100217937A1 (en) * 2009-02-20 2010-08-26 Arm Limited Data processing apparatus and method
US9639479B2 (en) * 2009-09-23 2017-05-02 Nvidia Corporation Instructions for managing a parallel cache hierarchy
WO2012103359A2 (en) * 2011-01-27 2012-08-02 Soft Machines, Inc. Hardware acceleration components for translating guest instructions to native instructions
US9449360B2 (en) 2011-12-28 2016-09-20 Intel Corporation Reducing the number of sequential operations in an application to be performed on a shared memory cell

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8108610B1 (en) * 2008-10-21 2012-01-31 Nvidia Corporation Cache-based control of atomic operations in conjunction with an external ALU block
US20110154000A1 (en) * 2009-12-18 2011-06-23 Fryman Joshua B Adaptive optimized compare-exchange operation

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200043698A (ko) * 2018-10-18 2020-04-28 인하대학교 산학협력단 Hbm 도입으로 인한 메모리 보틀넥 문제 해결 방법 및 장치

Also Published As

Publication number Publication date
GB201603851D0 (en) 2016-04-20
KR102284477B1 (ko) 2021-08-03
CN105659285B (zh) 2019-04-12
GB2533505B (en) 2020-06-03
EP3031034A2 (en) 2016-06-15
US9092345B2 (en) 2015-07-28
US20150046655A1 (en) 2015-02-12
WO2015019102A2 (en) 2015-02-12
WO2015019102A3 (en) 2015-04-09
EP3031034B1 (en) 2018-01-17
CN105659285A (zh) 2016-06-08
GB2533505A (en) 2016-06-22

Similar Documents

Publication Publication Date Title
KR102284477B1 (ko) 데이터 처리 시스템
CN109564695B (zh) 用于高效3d图形流水线的装置和方法
JP6403436B2 (ja) データ処理システム
US20230290035A1 (en) Graphics library extensions
US9535700B2 (en) Data processing systems
US9256466B2 (en) Data processing systems
US10930047B2 (en) Resource synchronization for graphics processing
US20180113713A1 (en) Compiler-based instruction scoreboarding
US10223822B2 (en) Mid-render compute for graphics processing
US10445852B2 (en) Local image blocks for graphics processing
US10593093B2 (en) Data processing systems
US9013498B1 (en) Determining a working set of texture maps
US20180129499A1 (en) Data processing systems
US10324844B2 (en) Memory consistency in graphics memory hierarchy with relaxed ordering
US20230305963A1 (en) Data processing
US11442731B2 (en) Data processing systems including an intermediate buffer with controlled data value eviction

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