KR20240078413A - 병렬 광선 테스트를 갖는 광선 교차 회로 - Google Patents

병렬 광선 테스트를 갖는 광선 교차 회로 Download PDF

Info

Publication number
KR20240078413A
KR20240078413A KR1020240064379A KR20240064379A KR20240078413A KR 20240078413 A KR20240078413 A KR 20240078413A KR 1020240064379 A KR1020240064379 A KR 1020240064379A KR 20240064379 A KR20240064379 A KR 20240064379A KR 20240078413 A KR20240078413 A KR 20240078413A
Authority
KR
South Korea
Prior art keywords
ray
rays
circuit
node
groups
Prior art date
Application number
KR1020240064379A
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 KR20240078413A publication Critical patent/KR20240078413A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/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]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/04Texture mapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/06Ray-tracing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/506Illumination models
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/60Shadow generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/80Shading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/005Tree description, e.g. octree, quadtree
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/28Indexing scheme for image data processing or generation, in general involving image processing hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/12Bounding box
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/21Collision detection, intersection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/52Parallel processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Graphics (AREA)
  • Software Systems (AREA)
  • Geometry (AREA)
  • General Engineering & Computer Science (AREA)
  • Image Generation (AREA)
  • Investigating Or Analyzing Materials Using Thermal Means (AREA)
  • Details Of Television Scanning (AREA)

Abstract

개시된 기술은 광선 추적을 위한 광선 교차 프로세싱에 관한 것이다. 일부 실시예들에서, 광선 교차 회로는 공간적으로 조직화된 가속도 데이터 구조를 순회하고, 광선이 데이터 구조의 노드에 의해 표시된 다수의 상이한 경계 영역들과 교차하는지 여부를 병렬로 테스트하도록 구성된 경계 영역 회로를 포함한다. 셰이더 회로는 광선 교차 회로에 의한 순회를 호출하기 위해 광선 교차 명령어를 실행할 수 있고, 순회는 교차 결과들을 생성할 수 있다. 셰이더 회로는 교차 결과들에 기초하여 교차된 프리미티브들을 셰이딩할 수 있다. 교차 회로와 셰이더 프로세서들 사이의 프로세싱을 공유하는 개시된 기술들은 종래의 기술들에 비해 성능을 개선하거나, 전력 소비를 감소시키거나, 또는 둘 모두를 할 수 있다.

Description

병렬 광선 테스트를 갖는 광선 교차 회로{RAY INTERSECT CIRCUITRY WITH PARALLEL RAY TESTING}
본 개시내용은 일반적으로 그래픽 프로세서들에서의 광선 추적에 관한 것으로, 더 구체적으로는 광선들과 그래픽 프리미티브(graphics primitive)들 사이의 교차들을 검출하도록 구성된 회로에 관한 것이다.
컴퓨터 그래픽에서, 광선 추적은 이미지 평면에서 픽셀들로서 광의 경로를 추적하고 가상 객체들과의 대면 효과들을 시뮬레이션함으로써 이미지를 생성하기 위한 렌더링 기술이다. 광선 추적은 장면 내의 임의의 2개의 포인트들 사이의 3차원에서 가시성의 해상도를 허용할 수 있는데, 이는 또한 대부분의 계산 비용의 소스이다. 전형적인 광선 추적기는 광원들로부터보다는, 카메라로부터 시작하여 장면으로 전파되는 광 전파의 역방향으로 장면을 통한 광의 경로들을 샘플링한다(이는 때때로 "역방향 광선 추적"으로 지칭됨). 카메라로부터 시작하는 것은 카메라에 가시적인 광선들만을 추적하는 이점을 갖는다. 이 시스템은 래스터라이저(rasterizer)를 모델링할 수 있으며, 여기서 광선들은 단순히 제1 표면에서 정지하고 (프래그먼트 셰이더(fragment shader)와 유사한) 셰이더를 호출하여 컬러를 컴퓨팅한다. 보다 일반적으로, 2차 효과들 - 확산 상호-반사 및 투과와 같은 장면 요소들 사이의 조명의 교환 - 이 또한 모델링된다. 표면 반사 특성들을 평가하는 셰이더들은 다른 표면들로부터의 입사 조명을 캡처하기 위해 추가적인 교차 질의들을 호출(예를 들어, 새로운 광선들을 생성)할 수 있다. 이러한 재귀적 프로세스는 많은 제형들을 갖지만, 통상적으로 경로 추적으로 지칭된다.
광선 추적을 구현하는 그래픽 프로세서들은 전형적으로 전통적인 래스터화 시스템들에 비해 더 현실적인 장면들 및 조명 효과들을 제공한다. 그러나, 광선 추적은 전형적으로 계산적으로 고가이다. 광선 추적 기술들에 대한 개선들은 그래픽 장면들에서 현실성을 개선하고, 성능을 개선하고(예를 들어, 프레임당 더 많은 광선들의 추적, 더 복잡한 장면들에서의 추적, 또는 둘 모두를 허용함), 전력 소비를 감소시키는 것(배터리 구동 디바이스들에서 특히 중요할 수 있음) 등을 할 수 있다.
도 1a는 일부 실시예들에 따른, 예시적인 그래픽 프로세싱 동작들의 개요를 예시하는 도면이다.
도 1b는 일부 실시예들에 따른, 예시적인 그래픽 유닛을 예시하는 블록도이다.
도 2는 일부 실시예들에 따른, ADS를 사용하는 예시적인 광선 추적 절차를 예시하는 도면이다.
도 3a는 일부 실시예들에 따른, 셰이더 프로세서 회로 및 교차 회로를 포함하는 예시적인 그래픽 프로세서를 예시하는 블록도이다.
도 3b는 일부 실시예들에 따른, 광선 교차 회로를 사용하여 광선 교차를 검출하기 위한 예시적인 방법을 예시하는 흐름도이다.
도 4는 일부 실시예들에 따른, 예시적인 ADS 트리 구조를 예시하는 블록도이다.
도 5는 일부 실시예들에 따른, 광선 스택을 사용한 BVH 트리의 예시적인 깊이-우선 순회를 예시하는 도면이다.
도 6은 일부 실시예들에 따른, 다른 그래픽 회로에 대한 광선 교차 회로의 예시적인 연결을 예시하는 블록도이다.
도 7은 일부 실시예들에 따른, 상세한 예시적인 병렬 경계 영역 테스트 회로를 예시하는 블록도이다.
도 8은 일부 실시예들에 따른, 광선 데이터를 저장하기 위한 광선 셰이더 코어 공간(shader core space, SCS)의 예시적인 조직화를 예시하는 도면이다.
도 9는 일부 실시예들에 따른, 예시적인 노드 데이터 구조를 예시하는 도면이다.
도 10은 일부 실시예들에 따른, 예시적인 구성가능한 크기의 리프(leaf) 데이터 구조를 예시하는 도면이다.
도 11은 일부 실시예들에 따른, 가변 크기의 리프 노드들을 갖는 ADS 트리 구조에 대한 예시적인 메모리 레이아웃을 예시하는 도면이다.
도 12는 일부 실시예들에 따른, 셰이더 회로에 의해 실행되는 교차 회로, 노드 테스트 회로, 메모리 영역들 및 SIMD 그룹들 사이의 예시적인 데이터 흐름을 예시하는 도면이다.
도 13은 일부 실시예들에 따른, 도 12의 데이터 흐름과 연관된 예시적인 방법을 예시하는 흐름도이다.
도 14a는 일부 실시예들에 따른, 프리미티브 테스트를 위해 SIMD 그룹들을 동적으로 형성하기 위한 예시적인 기술을 예시하는 블록도이다.
도 14b는 일부 실시예들에 따른, 프리미티브 테스트를 위해 SIMD 그룹들을 동적으로 형성하기 위한 예시적인 방법을 예시하는 흐름도이다.
도 15는 일부 실시예들에 따른, 경계 영역들과 프리미티브들 사이의 예시적인 다대다 맵핑을 예시하는 도면이다.
도 16은 일부 실시예들에 따른, 다대다 맵핑을 갖는 공간적으로 조직화된 데이터 구조를 생성하기 위한 예시적인 방법을 예시하는 흐름도이다.
도 17은 일부 실시예들에 따른, 가속도 데이터 구조를 순회할 때 광선 변환을 위한 SIMD 그룹들의 예시적인 동적 형성을 예시하는 도면이다.
도 18은 일부 실시예들에 따른, 광선 좌표 변환을 위해 SIMD 그룹들을 동적으로 형성하기 위한 예시적인 방법을 예시하는 흐름도이다.
도 19a는 일부 실시예들에 따른, 상이한 광선들이 그들의 순회 동안 ADS 내의 상이한 노드들을 현재 타겟팅하는 예시적인 상황을 예시하는 도면이다.
도 19b는 일부 실시예들에 따른, 예시적인 그룹화 제어 회로를 예시하는 블록도이다.
도 19c는 일부 실시예들에 따른, 광선들을 그룹화하기 위한 예시적인 단일-링크된 리스트 구현을 예시하는 도면이다.
도 20은 일부 실시예들에 따른, ADS의 순회 동안 광선들을 그룹화하기 위한 예시적인 방법을 예시하는 흐름도이다.
도 21은 일부 실시예들에 따른, 광선을 프로세싱하기 위한 예시적인 방법을 예시하는 흐름도이다.
도 22a는 일부 실시예들에 따른, 셰이더 코어에 액세스가능한 예시적인 캐시-메모리 계층구조를 예시하는 블록도이다.
도 22b는 일부 실시예들에 따른, 다수의 셰이더 코어들 및 이들의 코-프로세서들에 액세스가능한 예시적인 캐시-메모리 계층구조를 도시하는 블록도이다.
도 23은 일부 실시예들에 따른, 예시적인 스레드그룹, 셰이더 코어 및 디바이스 메모리 공간들을 예시하는 도면이다.
도 24는 일부 실시예들에 따른, 상이한 메모리 공간들에 대한 예시적인 캐시 구성 및 코히어런스 포인트들을 예시하는 블록도이다.
도 25는 일부 실시예들에 따른, 셰이더 메모리 공간을 사용하기 위한 예시적인 방법을 예시하는 흐름도이다.
도 26은 일부 실시예들에 따른, 예시적인 컴퓨팅 디바이스를 예시하는 블록도이다.
도 27은 일부 실시예들에 따른, 시스템 또는 디바이스의 예시적인 애플리케이션들을 예시하는 도면이다.
도 28은 일부 실시예들에 따른, 회로 설계 정보를 저장하는 예시적인 컴퓨터 판독가능 매체를 예시하는 블록도이다.
본 개시내용은 다양한 광선 추적 기술들, 및 특히 광선 교차 기술들을 제시한다. 도 1a 내지 도 2는 일반적으로 그래픽 프로세스 및 광선 추적의 개요를 제공한다. 도 3a 내지 도 6은 광선 교차 가속기 회로의 예시적인 실시예들에 대한 도입을 제공한다.
도 7 내지 도 21은 광선 교차 회로 및 다른 그래픽 회로와의 상호작용들의 실시예들에 관한 추가적인 세부사항들을 제공한다. 특히, 도 7은 병렬 노드 테스트 회로를 도시하고, 도 8은 셰이더들과 교차 회로 사이에서 광선 데이터를 공유하는 데 사용되는 메모리 공간을 도시하고, 도 9 내지 도 11은 예시적인 데이터 구조들 및 메모리 공간들을 도시하고, 도 12 및 도 13은 예시적인 전체 데이터 흐름을 도시하고, 도 14a 및 도 14b는 프리미티브 테스트를 위해 SIMD 그룹들을 동적으로 형성하기 위한 예시적인 기술들을 도시하고, 도 15 및 도 16은 경계 영역들과 프리미티브들 사이의 다대다 맵핑을 제공하고, 도 17 및 도 18은 (예를 들어, 광선 변환을 위해) 순회 동안 SIMD 그룹들을 동적으로 형성하기 위한 예시적인 기술들을 제공하고, 도 19 및 도 20은 노드 테스트를 위한 예시적인 광선 그룹화 기술들을 제공하고, 도 21은 광선 교차 동작들에 대한 전체 흐름도를 제공한다. 도 21 내지 도 25는 셰이더 코어 메모리 공간의 범위에 관한 세부사항들을 제공한다.
도 26은 그래픽 프로세서를 포함할 수 있는 예시적인 컴퓨팅 디바이스를 도시하고, 도 27은 예시적인 애플리케이션들을 도시하고, 도 28은 회로 설계 정보를 저장하는 예시적인 컴퓨터 판독가능 매체를 도시한다.
그래픽 프로세싱 개요
도 1a를 참조하면, 그래픽 데이터를 프로세싱하기 위한 예시적인 프로세싱 흐름(100)을 예시하는 흐름도가 도시된다. 일부 실시예들에서, 변환 및 조명 절차(110)는 정의된 광원 위치들, 반사율 등에 기초하여 애플리케이션으로부터 수신된 정점들에 대한 조명 정보를 프로세싱하는 것, 정점들을 다각형들(예를 들어, 삼각형들)로 어셈블하는 것, 및/또는 3차원 공간에서의 위치에 기초하여 다각형들을 정확한 크기 및 배향으로 변환하는 것을 수반할 수 있다. 클립 절차(115)는 가시성 영역 외부에 있는 다각형들 또는 정점들을 폐기하는 것을 수반할 수 있다. 래스터화 절차(120)는 각각의 다각형 내의 프래그먼트들을 정의하는 것 및 예를 들어 다각형의 정점들의 텍스처 좌표들에 기초하여 각각의 프래그먼트에 대한 초기 색상 값들을 할당하는 것을 수반할 수 있다. 프그래먼트들은 이들이 중첩되는 픽셀들에 대한 속성들을 특정할 수 있지만, 실제 픽셀 속성들은 (예를 들어, 프레임 버퍼에서) 다수의 프래그먼트들을 조합하고/하거나 하나 이상의 프래그먼트들을 무시하는 것(예를 들어, 그들이 다른 객체들에 의해 커버되는 경우)에 기초하여 결정될 수 있다. 셰이딩 절차(130)는 조명, 셰도우들, 범프 맵핑, 반투명도 등에 기초하여 픽셀 컴포넌트들을 변경하는 것을 수반할 수 있다. 셰이딩된 픽셀들은 프레임 버퍼(135)에서 어셈블될 수 있다. 현대의 GPU들은 전형적으로 애플리케이션 개발자들에 의한 셰이딩 및 다른 프로세싱 절차들의 맞춤화를 허용하는 프로그래밍가능 셰이더들을 포함한다. 따라서, 다양한 실시예들에서, 도 1a의 예시적인 요소들은 다양한 순서들로 수행되거나, 병렬로 수행되거나, 또는 생략될 수 있다. 추가적인 프로세싱 절차들이 또한 구현될 수 있다.
이제, 도 1b를 참조하면, 일부 실시예들에 따라, 그래픽 유닛(150)을 예시하는 단순화된 블록도가 도시된다. 예시된 실시예에서, 그래픽 유닛(150)은 프로그래밍가능 셰이더(160), 정점 파이프(185), 프래그먼트 파이프(175), 텍스처 프로세싱 유닛(texture processing unit, TPU)(165), 이미지 기록 유닛(170), 및 메모리 인터페이스(180)를 포함한다. 일부 실시예들에서, 그래픽 유닛(150)은 다수의 실행 파이프라인들 또는 인스턴스들을 사용하여 그래픽 데이터를 병렬로 프로세싱하도록 구성될 수 있는 프로그래밍가능 셰이더(160)를 사용하여 정점 및 프래그먼트 데이터 둘 모두를 프로세싱하도록 구성된다.
정점 파이프(185)는, 예시된 실시예에서, 정점 데이터를 프로세싱하도록 구성된 다양한 고정 기능 하드웨어를 포함할 수 있다. 정점 파이프(185)는 정점 프로세싱을 조정하기 위해 프로그래밍가능 셰이더(160)와 통신하도록 구성될 수 있다. 예시된 실시예에서, 정점 파이프(185)는 프로세싱된 데이터를 추가적 프로세싱을 위해 프래그먼트 파이프(175) 및/또는 프로그래밍가능 셰이더(160)에 전송하도록 구성된다.
프래그먼트 파이프(175)는, 예시된 실시예에서, 픽셀 데이터를 프로세싱하도록 구성된 다양한 고정 기능 하드웨어를 포함할 수 있다. 프래그먼트 파이프(175)는 프래그먼트 프로세싱을 조정하기 위해 프로그래밍가능 셰이더(160)와 통신하도록 구성될 수 있다. 프래그먼트 파이프(175)는 프래그먼트 데이터를 생성하기 위해 정점 파이프(185) 및/또는 프로그래밍가능 셰이더(160)로부터의 다각형들에 대한 래스터화를 수행하도록 구성될 수 있다. 정점 파이프(185) 및/또는 프래그먼트 파이프(175)는 그래픽 데이터에 액세스하기 위해 메모리 인터페이스(180)에 결합될 수 있다(결합은 도시되지 않음).
프로그래밍가능 셰이더(160)는, 예시된 실시예에서, 정점 파이프(185)로부터의 정점 데이터 및 프래그먼트 파이프(175) 및/또는 TPU(165)로부터의 프래그먼트 데이터를 수신하도록 구성된다. 프로그래밍가능 셰이더(160)는 정점 데이터의 다양한 변환들 및/또는 조정들을 포함할 수 있는 정점 데이터에 대해 정점 프로세싱 태스크들을 수행하도록 구성될 수 있다. 프로그래밍가능 셰이더(160)는 또한, 예시된 실시예에서, 예를 들어 텍스처화 및 셰이딩과 같은 픽셀 데이터에 대해 프래그먼트 프로세싱 태스크들을 수행하도록 구성된다. 프로그래밍가능 셰이더(160)는 데이터를 병렬로 프로세싱하기 위한 다수의 실행 파이프라인들의 다수의 세트들을 포함할 수 있다.
TPU(165)는 예시된 실시예에서, 프로그래밍가능 셰이더(160)로부터 프래그먼트 프로세싱 태스크들을 스케줄링하도록 구성된다. 일부 실시예들에서, TPU(165)는 텍스처 데이터를 프리페치하고 (예를 들어, 메모리 인터페이스(180)를 통해) 프로그래밍가능 셰이더(160)에 의한 추가적 프로세싱을 위해 초기 색상들을 프래그먼트들에 할당하도록 구성된다. TPU(165)는 예를 들어 정규화된 정수 포맷들 또는 부동 소수점 포맷들로 프래그먼트 컴포넌트들을 제공하도록 구성될 수 있다. 일부 실시예들에서, TPU(165)는 프로그래밍가능 셰이더(160) 내의 4개의 실행 파이프라인들의 그룹에 의해 프로세싱될 2x2 포맷인 4개의 ("프래그먼트 쿼드(fragment quad)") 그룹들로 프래그먼트들을 제공하도록 구성된다.
이미지 기록 유닛(IWU)(170)은, 일부 실시예들에서, 이미지의 프로세싱된 타일들을 저장하도록 구성되고, 렌더링된 이미지가 디스플레이를 위해 또는 저장을 위해 메모리에 전송되기 전에 그에 대한 동작들을 수행할 수 있다. 일부 실시예들에서, 그래픽 유닛(150)은 타일-기반 지연 렌더링(tile-based deferred rendering, TBDR)을 수행하도록 구성된다. 타일-기반 렌더링에서, 스크린 공간의 상이한 부분들(예컨대, 픽셀들의 정사각형들 또는 직사각형들)은 별개로 프로세싱될 수 있다. 메모리 인터페이스(180)는 다양한 실시예들에서 다양한 메모리 계층구조들 중 하나 이상과의 통신들을 용이하게 할 수 있다.
예시된 예에서, 그래픽 유닛(150)은 아래에서 상세히 설명되는 바와 같이, 다양한 광선 교차 동작들을 수행하도록 구성된 하드웨어를 포함할 수 있는 광선 교차 가속기(ray intersection accelerator, RIA)(190)를 포함한다.
광선 추적 개요
광선 추적 기술은 전형적으로 광원들로부터보다는, 카메라로부터 시작하여 장면으로 전파되는 광 전파의 역방향으로 장면을 통한 광의 경로들을 샘플링한다(이는 때때로 "역방향 광선 추적"으로 지칭됨). 광선은 원점(O), 방향(D), 및 광선의 활성 부분을 정의하는 파라메트릭 간격(T)을 사용하여 정의될 수 있다. 따라서, 광선은 라인 세그먼트로 생각될 수 있다. 그래픽 프로세서는 주어진 광선에 대해 다양한 질의들을 수행할 수 있다. 예를 들어, "가장 가까운 히트" 질의는 광선을 따라 그리고 파라메트릭 간격 내에서 가장 가까운 교차된 기하학적 구조를 위치확인할 수 있다(이는 가장 일반적인 유형의 질의일 수 있음). "임의의 히트" 질의는 광선을 따라 그리고 파라메트릭 간격 내에서 교차된 기하학적 구조를 위치확인할 수 있다. 이러한 타입의 질의는, 예를 들어, 장면 내의 포인트가 광에 대한 가시성을 갖는지 또는 폐색되는지 여부를 결정하기 위해 셰도우 광선들에 대해 사용될 수 있다. 일단 교차된 기하학적 구조가 결정되면, 그 기하학적 구조는 교차들에 기초하여 셰이딩될 수 있고, 이어서, 예를 들어, 반사 표면들로부터 교차 테스트를 위해 더 많은 광선들을 생성할 수 있다.
광선 교차 계산들은 종종 가속도 데이터 구조들(acceleration data structures, ADS)에 의해 용이하게 된다. 광선 교차 질의들을 효율적으로 구현하기 위해, 공간 데이터 구조는 광선-표면 교차 테스트들의 수를 감소시키고 이로써 질의 프로세스를 가속시킬 수 있다. ADS의 공통 클래스는, 표면 프리미티브들이 교차에 대해 테스트하기에 더 저렴한 기하학적 프록시 체적들(예를 들어, 박스들)의 계층구조로 봉입되는 경계 체적 계층구조(bounding volume hierarchy, BVH)이다. 이들 체적들은 경계 영역들로 지칭될 수 있다. 데이터 구조를 순회하고 방법을 따라 프록시 교차 테스트들을 수행함으로써, 그래픽 프로세서는 주어진 광선에 대한 후보 교차 프리미티브들의 보수적 세트를 위치확인한다. BVH의 통상적인 형태는 3D 축-정렬 경계 박스들(Axis-Aligned Bounding Boxes, AABB)을 사용한다. 일단 구성되면, AABB BVH는 모든 광선 질의들에 대해 사용될 수 있고, 관점-독립적 구조이다. 일부 실시예들에서, 이들 구조들은 장면에서, 그 객체의 로컬 객체 공간 또는 모델 공간에서 각각의 별개의 메시에 대해 한번 구성되고, 광선들은 BVH를 순회하기 전에 세계 공간으로부터 로컬 공간으로 변환된다. 이는 (래스터화에서의 인스턴스화와 유사한) 많은 강성 변환들 및 재료 특성들을 갖는 단일 메시의 기하학적 인스턴스화를 허용할 수 있다. 애니메이션화된 기하학적 구조는 전형적으로 (때때로, "재맞춤"으로 알려진 덜 비싼 업데이트 동작으로) 데이터 구조가 재구축될 것을 요구한다. 단일 프레임에서 단일 장면에 대해 수백만 또는 수십억 개의 광선들이 추적되는 비-실시간 사용 사례들의 경우, ADS 구성의 비용은 "자유로운" 포인트까지 완전히 상각된다. 그러나, 실시간 맥락에서, 전형적으로, 구축 비용들과 순회 비용들 사이에 섬세한 절충이 존재하며, 더 효율적인 구조들은 전형적으로 구축하는 데 더 많은 비용이 든다.
아래에서 상세히 논의되는 일부 실시예들에서, 교차 회로는 그 경계 체적들에 대해 3D 축-정렬 박스들을 사용하는 BVH ADS를 순회하도록 구성된다. ADS는 최대 분기 인자(예를 들어, 2, 4, 8, 16 등) 및 삼각형 기하학적 구조를 가정하지 않는 유연한 사용자-정의 페이로드(예를 들어, 트리의 리프들에서의 콘텐츠들)를 가질 수 있다.
도 2는 일부 실시예들에 따른, ADS를 사용하는 예시적인 광선 추적 절차를 예시하는 도면이다. ADS 구축 요소(215)는 그래픽 장면에 대한 기하학적 구조 데이터(210)를 수신하고 ADS(220)를 생성한다. ADS 구축 요소(215)는, 예를 들어, 애니메이션화된 객체의 위치의 변화들에 기초하여 스크래치로부터 ADS를 구축하거나 또는 이전 ADS를 업데이트할 수 있다. (소스 셰이더로 또한 지칭될 수 있는) 카메라 셰이딩 요소(225)는 (1차 광선들, 카메라 광선들 또는 눈 광선들로 지칭될 수 있는) 시점에서 유래하는 광선들을 생성한다. 이들 광선들은 ADS 순회 요소(230)에 의해 프로세싱된다. 순회는 경계 영역(예를 들어, 박스) 테스트 요소(235) 및 프리미티브 테스트 요소(240)에 의한 동작들을 포함하고, (히트 셰이더로 지칭될 수 있는) 결과 셰이딩 요소(245)에 교차 결과들을 제공한다. 셰이딩은 ADS 순회를 위해 추가적인 새로운 광선들을 생성할 수 있다. 셰이딩은 요소(250)에서 프레임 버퍼를 구축하기 위한 프래그먼트 데이터를 생성할 수 있다.
다양한 개시된 실시예들에서, 교차 회로(예를 들어, 그래픽 프로세서에 포함된 광선 교차 코-프로세서 또는 전용 회로)는 ADS 순회(230) 및 경계 영역 테스트(235)을 수행하도록 구성된다. 일부 실시예들에서, 광선 교차 회로는 순회 동안, 예를 들어, 좌표 변환 또는 프리미티브 테스트들을 위해 셰이더 프로세서들에 대한 작업을 생성한다. 셰이더 프로세서들은 아래에서 논의되는 다양한 동작들을 수행하기 위해 SIMD 그룹들을 실행할 수 있다.
본 명세서에 논의된 다수의 유형들의 SIMD 그룹들이 있기 때문에, 다음의 라벨들이 사용될 것이다: 아래에서 상세히 논의되는 바와 같이, "클리크(clique)-A"는 그래픽 프로그램을 실행하는(그리고 광선 교차 명령어를 실행할 수 있는) 종래의 SIMD 그룹을 지칭하며, "클리크-S"는 좌표 변환들을 위해 광선 교차 회로에 의해 형성된 SIMD 그룹을 지칭하고, "클리크-T"는 프리미티브 테스트를 위한 광선 교차 회로에 의해 형성된 SIMD 그룹을 지칭한다.
예시적인 광선 교차 회로
도 3a는 일부 실시예들에 따른, 셰이더 프로세서 회로 및 교차 회로를 포함하는 예시적인 그래픽 프로세서를 예시하는 블록도이다. 예시된 실시예에서, 시스템은 프로그래밍가능 셰이더(160)(그래픽 프로그램들을 실행할 수 있음) 및 전용 교차 회로의 일례인 광선 교차 가속기(RIA)(190)를 포함한다.
예시된 예에서, 프로그래밍가능 셰이더(160)는 그래픽 프로그램에 포함된 교차 광선 명령어를 수신하고 실행한다. 교차 광선 명령어는 예를 들어 단일 명령어 다중 데이터(single-instruction multiple-data, SIMD) 명령어일 수 있고, 다수의 광선들을 특정할 수 있다. 이에 응답하여, 프로그래밍가능 셰이더(160)는 교차 광선 커맨드를 RIA(190)로 전송한다. 커맨드는 프로세싱되는 광선(들)에 대한 데이터 구조에 대한 포인터를 포함할 수 있다.
RIA(190)는, 예시된 예에서, 장면에 대한 공간적으로 조직화된 데이터 구조(예를 들어, BVH)의 순회에 기초하여 교차 결과들을 생성하도록 구성된다. RIA(190)는 다수의 경계 영역들(예를 들어, 박스들)에 대해 광선을 병렬로 테스트하도록 구성될 수 있는 경계 영역 테스트 회로를 포함한다. 일부 실시예들에서, 교차 결과들은 교차에 대해 테스트될 프리미티브들의 세트를 나타내는데, 예를 들어, RIA(190)는 도 14a 및 도 14b를 참조하여 아래에서 논의되는 바와 같이, 프리미티브 테스트를 위해 프로그래밍가능 셰이더(160) 상에서 실행될 하나 이상의 SIMD 그룹들을 개시할 수 있다. 다른 실시예들에서, RIA(190)는 프리미티브 테스트를 수행할 수 있고, 교차 결과들은 교차된 프리미티브들을 직접 나타낼 수 있다.
"SIMD 그룹"이라는 용어는 그의 잘 이해되는 의미에 따라 해석되도록 의도되는데, 이는, 프로세싱 하드웨어가 상이한 스레드들에 대해 상이한 입력 데이터를 사용하여 동일한 명령어를 병렬로 프로세싱하는 스레드들의 세트를 포함한다. 다양한 유형들의 컴퓨터 프로세서들은 SIMD 명령어들을 실행하도록 구성된 파이프라인들의 세트들을 포함할 수 있다. 예를 들어, 그래픽 프로세서들은 종종, SIMD 방식으로 관련 스레드들의 세트에 대한 명령어들을 실행하도록 구성된 프로그래밍가능 셰이더 코어들을 포함한다. SIMD 그룹에 대해 종종 사용되는 이름들의 다른 예들은, 파면, 클리크 또는 워프를 포함한다. SIMD 그룹은 더 큰 스레드그룹의 일부일 수 있으며, 이는 컴퓨터의 병렬 프로세싱 능력들에 기초하여 다수의 SIMD 그룹들로 분할될 수 있다. 일부 실시예들에서, 각각의 스레드는, 그 스레드에 대한 피연산자들을 페치하고 스레드들의 세트에 대한 다른 파이프라인들과 병렬로 특정된 동작들을 수행하는 하드웨어 파이프라인에 할당된다. 프로세서들은 다수의 별개의 SIMD 그룹들이 또한 병렬로 실행될 수 있도록 많은 수의 파이프라인들을 가질 수 있음에 유의한다. 일부 실시예들에서, 각각의 스레드는, 예를 들어 레지스터 파일에 개인 피연산자 저장소를 갖는다. 따라서, 레지스터 파일로부터의 특정 레지스터의 판독은 SIMD 그룹의 각각의 스레드에 대한 레지스터의 버전을 제공할 수 있다.
SIMD 그룹들을 사용하여 수행되는 것으로 개시된 다양한 기술들은 다른 실시예들에서 단일 스레드들을 사용하여 수행될 수 있음에 유의한다. 따라서, 본 명세서에서 논의된 SIMD 예들은 본 개시내용의 범위를 제한하도록 의도되지 않는다. 그러나, 다양한 실시예들에서, 특히, 그래픽 프로세서들이 전형적으로 상당한 양들의 병렬 하드웨어를 포함한다는 점을 고려할 때, SIMD 기술들은 비-SIMD 기술들에 비해 성능을 개선할 수 있다.
도 3b는 일부 실시예들에 따른, 광선 교차 회로를 사용하여 광선 교차를 검출하기 위한 예시적인 방법을 예시하는 흐름도이다. 도 3b에 예시된 방법은 다른 것들 중에서도, 본 명세서에 개시되는 컴퓨터 회로, 시스템들, 디바이스들, 요소들 또는 컴포넌트들 중 임의의 것과 함께 사용될 수 있다. 다양한 실시예들에서, 도시된 방법 요소들 중 일부는 동시에, 또는 도시된 바와는 상이한 순서로 수행될 수 있거나, 또는 생략될 수 있다. 부가적인 방법 요소들이 또한 원하는 대로 수행될 수 있다.
350에서, 예시된 실시예에서, 그래픽 셰이더 회로(예를 들어, 프로그래밍가능 셰이더(160))는 그래픽 장면 내의 하나 이상의 광선들의 세트에 대한 원점 및 방향 정보를 나타내는 광선 교차 명령어를 실행한다.
360에서, 예시된 실시예에서, 광선 교차 회로(예를 들어, RIA(190))는, 광선 교차 명령어에 응답하여, 공간적으로 조직화된 가속도 데이터 구조 내의 다수의 노드들을 순회하고, 여기서 데이터 구조의 노드들은 그래픽 장면 내의 경계 영역들에 대응하는 좌표들을 나타낸다.
370에서, 예시된 실시예에서, 경계 영역 테스트 회로(예를 들어, 회로(310))는, 순회 동안 광선들의 세트 내의 광선이 데이터 구조의 노드에 의해 표시되는 경계 영역들 중의 경계 영역들과 교차하는지 여부를 병렬로 테스트한다.
380에서, 예시된 실시예에서, 디바이스는 하나 이상의 광선들의 세트 내의 각각의 광선들에 의해 교차되는 하나 이상의 그래픽 프리미티브들을 특정하는 정보를 결정한다.
390에서, 예시된 실시예에서, 그래픽 셰이더 회로는 교차하는 광선들에 기초하여 특정된 하나 이상의 그래픽 프리미티브들을 셰이딩한다.
도 3b의 방법의 다양한 실시예들에 관한 다음의 논의는 아래에서 더 상세히 논의되는 다양한 광선 교차 기술들의 고레벨 개요를 제공한다.
일부 실시예들에서, 경계 영역 테스트 회로는, 광선이 경계 영역과 교차하는지 여부를 결정하도록 구성되고, 다수의 경계 영역들에 대한 테스트를 병렬로 수행하도록 구성된 다수의 경계 영역 테스터들을 포함한다. 경계 영역들 테스트 회로는 또한, 경계 영역 테스터들에 의해 공유되는 출력들을 갖는 하나 이상의 동작들을 수행하도록 구성된 공통 계산 회로를 포함할 수 있다. 일부 실시예들에서, 경계 영역 테스트 회로는, 경계 영역 데이터 캐시, 광선 데이터 캐시, 및 테스트되는 광선의 원점까지의 거리에 기초하여 다수의 경계 영역 테스터들로부터의 교차 결과들을 순서화하도록 구성된 결과 순서화 회로를 추가로 포함한다.
일부 실시예들에서, 경계 영역 테스트 회로는 다수의 상이한 경계 영역들에 대해 다수의 광선들을 병렬로 테스트하도록 구성된다. 이러한 실시예들에서, 경계 영역 테스트 회로는 동시에 M개의 경계 영역들에 대해 N개의 광선들을 테스트할 수 있다.
일부 실시예들에서, 장치는 그래픽 셰이더 회로 및 광선 교차 회로에 액세스가능한 셰이더 메모리 공간(광선 셰이더 코어 공간으로 지칭될 수 있음)에 하나 이상의 광선들의 세트에 대한 광선 데이터를 저장하도록 구성된다. 일부 실시예들에서, 그래픽 셰이더 회로는 특정된 하나 이상의 그래픽 프리미티브들의 셰이딩에 기초하여 하나 이상의 추가 광선들을 생성하고, 하나 이상의 추가 광선들에 대한 광선 교차 명령어를 실행하도록 구성된다.
일부 실시예들에서, 가속도 데이터 구조는 계층적 구조이고, 제1 노드는 하위 레벨 가속도 데이터 구조에서 자식 노드를 갖는 상위 레벨 가속도 데이터 구조의 리프 노드이다. (그러한 계층적 구조의 예가 도 4와 관련하여 아래에서 더 상세히 논의된다.) 하위 레벨 가속도 데이터 구조는 그래픽 장면에서 여러번 인스턴스화되는 그래픽 모델에 대응할 수 있다. 광선 교차 회로는 제1 노드에 도달하는 하나 이상의 광선들의 좌표들을 그래픽 모델의 인스턴스의 모델 공간으로 변환하기 위해 SIMD 그룹(클리크-S로 지칭될 수 있음)을 형성하도록 구성될 수 있다.
일부 실시예들에서, ADS는 예를 들어, 가속도 데이터 구조의 하나 이상의 노드들이 4개 이상의 경계 영역들 및 4개 이상의 자식 노드들을 포함하도록 비교적 높은 분기 인자를 갖는다. 일부 실시예들에서, 8개, 10개, 12개, 16개 등과 같은 훨씬 더 큰 분기 인자들이 지원될 수 있다. 일부 실시예들에서, 예를 들어, 가속도 데이터 구조가, 다수의 프리미티브들이 자식들로서 표시되는 적어도 하나의 경계 영역을 갖는 노드(들)를 포함하고, 가속도 데이터 구조가, 다수의 경계 영역들이 부모로서 표시되는 적어도 하나의 프리미티브를 포함하도록, ADS는 경계 영역들과 프리미티브들 사이의 다대다 맵핑을 지원한다.
일부 실시예들에서, 광선 교차 회로는 데이터 구조의 리프 노드에 대응하는 프리미티브에 대해 광선들의 세트를 테스트하기 위해 SIMD 그룹(클리크-T)을 형성하도록 구성된다.
일부 실시예들에서, 광선 교차 회로는, 그룹화 회로를 사용하여, 광선들이 다음에 타겟팅하는 데이터 구조의 노드에 기초하여 광선들의 세트의 부분들을 다수의 그룹들로 그룹화하도록 구성되고, 테스트는 그룹들에 기초한다. 이는 노드 데이터에 대한 액세스들의 시간적 국부성을 개선할 수 있다.
예시적인 트리 구조 및 깊이-우선 순회의 개요
도 4는 일부 실시예들에 따른, 단순화된 예시적인 ADS 트리 구조를 예시하는 블록도이다. 예시된 예에서, 트리는 노드들(0-5) 및 리프들(L0-L8)을 포함한다. 각각의 노드는 각각이 자식 노드 또는 하나 이상의 프리미티브들로 향하는 2개 이상의 경계 영역들을 포함할 수 있다. 개념적으로, 각각의 노드는 자신의 자식들에 대한 경계들을 저장할 수 있지만, 그 자신의 경계들(이는 자신의 부모 노드에 기초하여 암시될 수 있음)을 저장할 수는 없다. 일부 실시예들에서, 각각의 리프는 부모 노드의 경계 영역에 포함되는 삼각형과 같은 프리미티브를 표현한다. 노드들 및 리프들에 대한 상세한 예시적인 데이터 구조들은 도 9 및 도 10을 참조하여 아래에서 논의된다.
예시된 예에서, 각각의 노드는 최대 2개의 자식 노드들을 갖지만, 다양한 실시예들에서 더 큰 분기 인자들이 구현될 수 있다. 일부 실시예들에서, 노드에 대한 "노드 테스트"는 자식 노드들에 대응하는 다수의 경계 영역들에 대한 경계 테스트들을 포함한다. 내부 노드들은 자식들이 도 4의 노드들 0 및 2와 같은 모든 노드들인 노드들이다. 리프 노드들은 자식들이 도 4의 노드들 1, 3 및 5와 같은 모든 리프들인 노드들이다. 혼합 노드는 도 4의 노드 4와 같은 리프 및 노드 자식의 혼합을 갖는다. 트리-기반 ADS 구조들은, 예를 들어, 광선이 교차에 대해 테스트되어야 하는 하나 이상의 프리미티브들을 결정하기 위해, 폭 우선, 깊이 우선 기술들, 또는 이 둘의 조합을 사용하여 순회될 수 있다.
도 5는 일부 실시예들에 따른, 광선 스택을 사용한 BVH 트리의 예시적인 깊이-우선 순회를 예시하는 도면이다. 예시된 예에서, 파선들을 사용하여 도시된 노드들은 테스트되는 광선에 의해 교차되지 않았고, 실선 삼각형들은 교차된 프리미티브들을 표현한다.
도 5의 상황에 대응하는 다음의 예시적인 순회를 고려한다. 먼저, 광선은 장면 범위들에 대한 루트 경계 영역에 대응하는 루트 노드 0에 대해 테스트한다. 히트가 있을 때마다, 그 노드의 자식들이 테스트된다. 이 예에서, 노드 1 및 노드 2 둘 모두가 히트들이므로, 노드 2의 자식들로의 순회가 계속되고, 노드 1은 테스트되는 광선에 대한 광선 스택으로 푸시된다. 박스들(5, 6)은 둘 모두 히트들이고 노드 6은 스택으로 푸시된다. 노드 5의 자식들을 테스트할 때, 노드 7은 히트이지만 노드 8은 미스이므로, 스택에 아무 것도 푸시되지 않고 노드 7의 자식들로 순회가 진행된다. 노드 11에 대한 경계 영역 및 노드 7의 리프 자식 둘 모두가 히트들이므로, 노드 11은 스택으로 푸시되고 리프는 프리미티브 교차에 대해 테스트된다.
도 5의 광선 스택은 스택 상에 노드들 11, 6, 및 1을 갖는 예시적인 순회 동안 이 포인트에서의 스택의 상태를 도시한다. 이 포인트에서, 리프에 도달되었고, 연기된 트리의 부분들이 다음에 순회되어야 하는데, 이는 역추적으로 지칭될 수 있다. 교차 회로는 스택을 팝(pop)하고 프리미티브 교차에 대해 노드 11의 리프를 테스트한다. 이어서, 교차 회로는 스택을 팝하고 노드 6의 자식들을 테스트하는데, 이들은 둘 모두 미스들이다. 노드들 12 및 13은 그들의 부모 노드 9가 히트가 아니었기 때문에 순회 동안 도달되지 않는다. 이어서, 교차 회로는 노드 1을 팝하고 그 자식 노드들 3 및 4 둘 모두는 미스들이다.
부모 노드가 히트일 수 있지만 그의 자식 노드들 중 어느 것도 히트일 수 없는 다수의 이유들이 있음에 유의한다. 첫째로, ADS의 성질로 인해, 부모 경계 영역들은 자식들보다 더 큰 체적을 통합하고, 그에 따라, 부모 경계 영역을 교차하는 광선이 자식 영역들과 교차하지 않을 수 있다. 다른 이유는 프리미티브와의 검출된 교차에 기초하여 광선이 단축될 수 있다는 것이다. 예를 들어, 노드 7의 프리미티브 자식을 히트시킨 후에, 어레이의 활성 부분의 길이는 그것이 교차를 지나 진행하지 않도록 클리핑될(clipped) 수 있다. 이는 일부 상황들에서 노드들 3 및 4에 대한 미스들을 야기했을 수 있다. 스택이 비어 있고 추구할 추가 경로들이 없을 때, 순회가 종료될 수 있고, 교차 회로는 결과들을 리턴할 수 있다.
다양한 개시된 기술들이 다른 데이터 구조 조직들(예를 들어, 비-트리 가속도 또는 비-BVH 데이터 구조들)에 적용될 수 있음에 유의한다. 개시된 데이터 구조들은 예시의 목적으로 포함되지만, 본 개시내용의 범주를 제한하고자 하는 것은 아니다. 유사하게, 다양한 노드 구조들은 하나 이상의 상이한 노드 유형들을 사용하여 구현될 수 있다.
예시적인 RIA 연결 및 영역 테스트 회로
도 6은 일부 실시예들에 따른, 다른 그래픽 회로에 대한 광선 교차 회로의 예시적인 연결을 예시하는 블록도이다. 예시된 실시예에서, 그래픽 프로세서는 명령어 페치 및 스케줄링 회로(610), 셰이더 파이프라인들(660)(예를 들어, 프로그래밍가능 셰이더(160)에 포함될 수 있음), L0 저장 회로(615), 라우팅 네트워크(620), L1 저장소(630), 상위 레벨 캐시/메모리 회로(640), RIA(190), 및 텍스처 프로세싱 유닛(165)을 포함한다.
L0 저장소는 셰이더 파이프라인(660)에 의해 프로세싱된 피연산자들을 저장하도록 구성될 수 있다. L1 저장소(630)는 텍스처 프로세싱 유닛(165) 및 RIA(190)에 또한 이용가능한 상위 레벨에서 그래픽 데이터를 저장하도록 구성될 수 있다. 라우팅 네트워크(620)는 셰이더 파이프라인들 내의 레인들 사이에서(예를 들어, SIMD 그룹 내의 스레드들 사이에서), 상이한 저장 레벨들 사이에서, 그리고 L1저장소와 상이한 유닛들, 예를 들어, RIA(190) 및 텍스처 프로세싱 유닛(165) 사이에서 피연산자들을 이동시키는 것을 용이하게 할 수 있다. 상위 레벨의 캐시/메모리 회로(640)는 예를 들어, 하나 이상의 L2 캐시들 또는 시스템 메모리를 포함할 수 있다. 다양한 저장 또는 캐싱 요소들이 적절한 어드레싱 또는 캐시 조직 방식들을 구현할 수 있다. 도 6의 하나 이상의 저장 요소들에 저장될 수 있는 예시적인 데이터 구조들은 도 8 내지 도 11을 참조하여 아래에서 논의된다.
일부 실시예들에서, 회로(610)에 의해 페치된 그래픽 프로그램은 광선 교차 명령어를 포함할 수 있다. 명령어에 기초하여, 셰이더 파이프라인(660)은 L1 저장소(630)를 통해 연관된 광선 및 기하학적 구조 데이터에 액세스할 수 있는 RIA(190)에 광선 교차 커맨드를 전송할 수 있다. RIA(190)는 또한 라우팅 네트워크(620)를 통한 통신들을 사용하여 셰이더 파이프라인들(660)에 대한 SIMD 그룹들을 동적으로 형성할 수 있다.
도 6의 개시된 회로의 조직은 예시의 목적으로 포함되지만, 본 개시내용의 범주를 제한하고자 하는 것은 아님에 유의한다. 다른 실시예들에서, 광선 교차를 위한 전용 회로 및 프로그래밍가능 셰이더 회로의 다양한 조직 중 임의의 것이 구현될 수 있다.
도 7은 일부 실시예들에 따른, 상세한 예시적인 병렬 경계 영역 테스트 회로를 예시하는 블록도이다. 예시된 예에서, 병렬 테스터 회로(710)는 다수의 경계 영역들에 대한 광선 데이터 및 경계 영역 데이터를 수신하고, 광선이 경계 영역들과 교차했는지 여부를 나타내는 결과들을 출력한다. 병렬 테스터(710)는 경계 영역 데이터 캐시(717), 광선 데이터 캐시(720), 공통 계산 회로(725), 경계 영역 테스터들(730A-703N) 및 결과 순서화 회로(735)를 포함한다.
일부 실시예들에서, 병렬 테스터(710)는 최대 N개의 경계 영역들을 테스트하도록 구성된 노드 테스터이며, 여기서 ADS의 각각의 노드는 최대 N개의 자식 노드들을 포함한다. RIA(190)는 M개의 프로그래밍가능 셰이더 인스턴스들을 갖는 실시예들에서, 각각의 프로그래밍가능 셰이더에 대해 다수의 병렬 테스터들(710), 예를 들어 2개, 4개, 8개 등을 포함할 수 있다. 이러한 실시예들에서, 각각의 노드 테스터는 프로그래밍가능 셰이더 코어마다 클럭당 최대 M개의 노드들을 테스트할 수 있다. 일부 실시예들(예를 들어, 본 명세서에서 논의된 깊이-우선 순회)에서, 주어진 광선은 한번에 최대 하나의 노드에 대해 테스트된다.
일부 실시예들에서, 경계 영역 데이터 캐시(715) 및 광선 데이터 캐시(720)는 현재 테스트 및 후속 테스트들에서의 잠재적인 재사용을 위해 각각 노드 및 광선 데이터를 저장하도록 구성된다. 이러한 캐시들은 테스터마다 클록당 노드 테스트에 대응하는 처리량을 유지할 수 있다. 테스트들이 발생하기 위해, 광선 및 경계 영역 정보 둘 모두가 필요할 수 있고, 따라서 캐시 엔트리들은 정보의 두 부분들 모두가 이용가능할 때까지 판독을 위해 잠길 수 있다. 아래에서 상세히 논의되는 도 9는 경계 영역 데이터에 대한 상세한 예시적인 인코딩을 제공한다. 일부 실시예들에서, 도 19a 내지 도 19c를 참조하여 아래에서 상세히 논의되는 바와 같이, 동일한 다음 노드를 타겟팅하는 광선들을 그룹화하는 것은 캐시들의 성능을 개선하고 상위 레벨의 캐시에 대한 대역폭을 감소시킬 수 있다.
일부 실시예들에서, 공통 계산 회로(725)는 테스트되는 모든 경계 영역들에 공통인 계산들을 수행하도록 구성된다. 이는 압축된 양자화된 포맷을 사용하여 표현된 경계들을 결정하는 것을 포함할 수 있다. 다른 예로서, 이는 광선의 역수 및 광선의 테스트 포인트를 결정하는 것과 같은 공통 광선 계산들을 포함할 수 있다. 일부 실시예들에서, 공통 계산들은 경계 영역이 테스트하는 더 높은 부동 소수점 정밀도로 수행된다.
일부 실시예들에서, 경계 영역 테스터들(730)은, 광선이 경계 영역의 표현과 교차하는지 여부를 테스트하도록 구성된다(그러나, 양자화를 갖는 실시예들에서 거짓 포지티브가 포함될 수 있음에 유의한다). 박스 형상 경계 영역들의 경우, 이들 테스터들은 슬래브(slab) 테스트를 구현할 수 있다(예를 들어, 각각의 박스의 6개의 측면들까지의 각각의 광선의 거리를 발견하고, 광선이 박스에 히트되었는지 여부를 결정하기 위해 이들 값들을 비교함). 일반적으로, 경계 영역 테스터들(730)은 구현된 테스트의 유형과 연관된 산술 연산들을 수행하도록 구성된 회로를 포함할 수 있고, 이 회로는 파이프라인화될 수 있다. 일부 실시예들에서, 경계 영역 테스터들(730)은 더 낮은 정밀도의 부동 소수점 산술을 활용하였고, 경계 영역 테스트가 보수적이며 거짓 네거티브들을 산출하지 않음을 보장하기 위해, 광선을 향하는 3개의 평면들에 대한 계산된 교차 결과들이 (광선을 향해) 라운드 다운(round down)되고 멀리 향하는 3개의 대향 평면들에 대한 교차 결과들이 (광선으로부터 멀리) 라운드 업되도록 라운딩 모드들을 선택한다.
일부 실시예들에서, 결과 순서화 회로(735)는 (예를 들어, 광선의 원점까지의 거리에 기초하여) 히트 결과들을 순서화하고, 추가 순회에서 사용하기 위한 결과들을 출력하도록 구성된다. 따라서, 비-리프 자식들은 이러한 순서화에 기초하여 스택 상으로 푸시될 수 있다. 일부 실시예들에서, 임의의 리프 자식들은 단일 스택 엔트리로 그룹화될 수 있다. 일부 실시예들에서, 순서화는 ADS의 순회에 영향을 미칠 수 있는데, 예를 들어, 더 가까운 히트들에 대응하는 자식 노드들이 깊이-우선 탐색 동안 먼저 순회될 수 있다.
일부 실시예들에서, 병렬 테스터 회로(710)는, 광선이 경계 영역과 교차하는(그리고 평면 테스트들보다 더 높은 정밀도로 값을 저장할 수 있는) 파라메트릭 내부(T) 파라미터의 값을 저장하도록 구성된다. 이 값은 T-로컬로 지칭될 수 있고, 스택 엔트리들에 저장되고 자식 경계 영역 평면 테스트들을 위한 수치 광선 원점으로서 사용하기 위해 검색될 수 있다.
일부 실시예들에서, 다수의 광선들은 동일한 노드에 대해 병렬로 테스트될 수 있거나, 광선은 다수의 노드들에 대해 병렬로 테스트될 수 있거나, 또는 둘 모두일 수 있다. 예를 들어, RIA(190)는 광선들의 그룹 내의 광선들 전부 또는 일부를 병렬로 프로세싱하기 위해 다수의 병렬 테스터들(710)을 포함할 수 있다. 일부 실시예들에서, 각각의 경계 영역 테스터(730)는 경계 영역에 대해 다수의 광선들을 병렬로 테스트하도록 구성될 수 있다.
예시적인 데이터 구조들 및 전체 데이터 흐름
도 8은 일부 실시예들에 따른, 광선 데이터를 저장하기 위한 광선 셰이더 코어 공간(SCS)의 예시적인 조직화를 예시하는 도면이다. 광선 SCS는, 동적으로 할당될 수 있고 상이한 스레드그룹들 사이에서 데이터의 공유를 허용할 수 있는 개인 메모리 공간이다. 추가로, 광선 SCS는 동일한 데이터 마스터 및 킥 슬롯(kick slot)으로부터의 상이한 SIMD 그룹들 사이의(예를 들어, 클리크-A, 클리크-S, 클리크-T 등 사이의) 데이터의 공유를 허용할 수 있다. 데이터 마스터 및 그래픽 킥의 개념의 더 상세한 설명은 도 8의 논의의 끝에서 아래에서 논의된다. 그래픽 프로세서는 또한, 스레드 개인 어드레스 공간, 스레드그룹 어드레스 공간 및 디바이스 어드레스 공간과 같은 다른 메모리 공간들을 포함할 수 있다.
SCS는, 예를 들어, 그래픽 킥의 시작시에 할당될 수 있다. 셰이더 코어 공간은 유리하게, 상이한 유형들의 SIMD 그룹들(예를 들어, 클리크-A 유형들 및 클리크-T 또는 클리크-S 유형들) 사이의 공유를 허용하거나, (더 큰 메모리 공간의 어드레스들을 사용하는 것에 비해) 광선 데이터를 어드레싱하기 위해 더 적은 수의 비트들을 허용하거나, 데이터에 대한 페이지들의 동적 할당을 허용하거나, 또는 이들의 임의의 조합을 허용할 수 있다. 예를 들어, 2020년 2월 28일에 출원된 미국 특허 출원 제16/804,128호에서 논의된 동적 개인 메모리 할당을 위한 기술들이 광선 셰이더 코어 공간에 대한 페이지들을 동적으로 할당하기 위해 사용될 수 있다.
예시된 실시예에서, 셰이더 코어 공간은 광선 코어 데이터(820), 광선 스택 데이터(830), 광선 확장 데이터(840) 및 토큰 버퍼들(810)에 대한 영역들을 포함한다. 일부 실시예들에서, SCS는 또한, 콘텍스트 저장을 핸들링하기 위한 콘텍스트 스위치 버퍼(도시되지 않음)를 포함할 수 있다. 셰이더는 명시적 명령어(예를 들어, 광선 할당 명령어)을 사용하여 SCS에 공간을 할당하고, 다른 명시적 명령어(예를 들어, 광선의 프로세싱이 완료된 후 광선 해제 명령어)에 의해 자유 공간을 할당할 수 있다.
일부 실시예들에서, 토큰 버퍼들(810)은 RIA(190)에 의해 셰이더들 상에서 개시되는 SIMD 그룹들과 RIA(190) 사이의 통신을 위한 스크래치 공간을 제공한다. 일부 실시예들에서, 이러한 SIMD 그룹들은, 예를 들어, 교차 광선 커맨드 이전에 SCS에서 이미 할당된 광선 데이터에 액세스하기 위해, 이들의 입력 데이터의 일부로서 광선 식별자를 수신한다. SIMD 그룹(예를 들어, 프리미티브 테스트를 위한 클리크-T 또는 변환을 위한 클리크-S)을 형성할 때, RIA(190)는 SIMD 그룹에 의해 필요한 스레드 데이터로 버퍼를 파퓰레이트할 수 있고, SIMD 그룹은 동일한 버퍼에 결과들을 다시 기록할 수 있다. 일부 실시예들에서, 토큰 버퍼는 프리미티브 테스트 또는 좌표 변환에 사용될 정보에 대한 포인터들을 저장한다. 예를 들어, 이는 동일한 광선 ID(동일한 클리크-T에 패킹될 수 있음) 및 대응하는 스레드 식별자들을 공유하는 스레드들의 카운트와 함께, 교차 테스트를 위한 리프 어드레스에 대한 포인터를 포함할 수 있다. 다른 예로서, 이는 좌표 변환을 위한 광선에 대한 포인터를 포함할 수 있다.
광선 스택 데이터(830)는, 일부 실시예들에서, 예를 들어, 도 5를 참조하여 위에서 논의된 바와 같이, 순회 동안 광선들에 대한 스택 엔트리들을 포함한다. 각각의 광선은 자신의 스택을 위한 전용 공간을 가질 수 있지만, 모든 광선들에 대한 스택들은 인터리빙될 수 있으며, 이는 풋프린트를 감소시킬 수 있고 스택 SCS에 사용되는 전체 페이지 수를 감소시킬 수 있다. 스택 SCS의 최대 크기는, 예를 들어, 광선 모집단의 크기, ADS 내의 레벨들의 수, 및 ADS의 분기 인자 중 하나 이상에 기초하여 결정될 수 있다.
광선 코어 데이터(820)는 각각의 광선의 원점, 방향 및 활성 부분을 나타낼 수 있고 광선 식별자를 사용하여 인덱싱될 수 있다. 이 영역은 또한, 수밀 광선 순회를 위한 축 및 엡실론(epsilon)과 같은 다른 데이터일 수 있다. 광선 확장 데이터(840)는 예를 들어, 교차 결과들, 광선 차이들, 성능 카운터들 등과 같은 소프트웨어 셰이더들에 의해 덜 빈번하게 액세스되는 추가 데이터를 포함할 수 있다. 광선 코어 데이터(820)와 확장 데이터(840)를 분리시키는 것은 캐시 활용도를 개선할 수 있다.
그래픽 데이터의 프레임을 렌더링하기 위해 다수의 "킥들"이 실행될 수 있다. 일부 실시예들에서, 킥은 실행될 다수의 스레드들을 포함할 수 있는(그리고 잠재적으로, 셰이더에 의해 수행되지 않는 다른 유형들의 그래픽 작업을 포함할 수 있는) 단일 콘텍스트로부터의 작업 유닛이다. 킥은 (스레드들 자체에 의해 특정된 것 이외의) 스레드들 사이의 메모리 동기화, 스레드들 사이의 동시성, 또는 스레드들 사이의 개시 순서에 관한 어떠한 보장도 제공하지 않을 수 있다. 일부 실시예들에서, 킥은 다른 킥의 결과들에 의존하는 것으로 식별될 수 있으며, 이는 하드웨어 메모리 코히어런시 지원을 요구하지 않고 메모리 동기화를 허용할 수 있다. 전형적으로, 그래픽 펌웨어 또는 하드웨어 프로그램 구성은 프로세싱을 위해 파이프라인에 작업을 전송하기 전에 각각의 킥에 대해 등록한다. 종종, 일단 킥이 시작되면, 그것은 킥이 완료될 때까지(이 포인트에서, 결과들이 계층구조에서 상위 레벨에 기록될 수 있음) 특정 레벨 위의 메모리 계층구조에 액세스하지 않는다. 주어진 킥에 대한 정보는, 대응하는 그래픽 동작들을 완료하는 데 필요한 상태 정보, 실행할 셰이더 프로그램(들)의 위치, 버퍼 정보, 텍스처 데이터의 위치, 이용가능한 어드레스 공간들 등을 포함할 수 있다. 그래픽 펌웨어 또는 하드웨어는, 예를 들어, 킥들을 스케줄링하고, 킥이 완료될 때 인터럽트를 검출할 수 있다. 일부 실시예들에서, 그래픽 유닛(150)의 부분들은 한번에 단일 킥에 대해 작동하도록 구성된다. 이러한 자원들의 세트는 "킥 슬롯"으로 지칭될 수 있다. 따라서, 일부 실시예들에서, 주어진 킥에 대해 필요한 임의의 데이터가 메모리로부터 판독되고, 그 메모리는 킥의 시작 시에 다수의 프로세싱 요소들 사이에서 공유되고, 결과들은 킥의 종료 시에 공유 메모리에 다시 기록된다. 따라서, 다른 하드웨어는 킥이 완료될 때까지 킥의 결과들을 볼 수 없으며, 이 포인트에서, 결과들은 공유 메모리에서 이용가능하고, 다른 킥들(다른 데이터 마스터들로부터의 킥들을 포함함)에 의해 액세스될 수 있다. 킥은, 절차적 기하학적 구조를 드로잉하기 위한 커맨드, 셰도우 샘플링 방법을 설정하기 위한 커맨드, 메시들을 드로잉하기 위한 커맨드, 텍스처를 검색하기 위한 커맨드, 생성 계산을 수행하기 위한 커맨드 등을 포함할 수 있는 하나 이상의 렌더링 커맨드들의 세트를 포함할 수 있다. 프레임의 렌더링 동안 다양한 스테이지들 중 하나에서 킥이 실행될 수 있다. 렌더링 스테이지들의 예들은 제한 없이, 카메라 렌더링, 광 렌더링, 투사, 텍스처링, 프래그먼트 셰이딩 등을 포함한다. 킥들은 예를 들어 컴퓨팅 작업, 정점 작업, 또는 픽셀 작업을 위해 스케줄링될 수 있다.
도 9는 일부 실시예들에 따른, 예시적인 노드 데이터 구조를 예시하는 도면이다. 예시된 예에서, 노드 데이터 구조는 노드의 자식들과 연관된 다수의 경계 영역들에 대한 경계들 0-N, 각각의 경계 영역에 대한 메타데이터, 오피코드(opcode), 지수 정보, 원점 정보, 자식 베이스 정보, 상태 정보 및 셰이더 인덱스 정보를 포함한다.
일부 실시예들에서, 경계들 0-N은 최대 N-1 자식 노드들에 대응하는 경계 영역들을 정의한다. 일부 실시예들에서, 이들은 (예를 들어, X, Y, Z, 좌표 공간에서 박스당 6개의 값들을 갖는) 그들의 상부 및 하부 코너들에 의해 정의되는 양자화된 축-정렬된 경계 박스들이다. 일부 실시예들에서, 이러한 값들은 공통 원점(원점 X, Y, Z 필드들에 의해 특정됨) 및 스케일 인자(예를 들어, 지수 X, Y, Z 필드들에 의해 특정된 2의 거듭제곱 스케일 인자)에 대한 고정 소수점 오프셋들로서 표현된다. 원점 값들은, 예를 들어, 서명된 부동 소수점 값들로서 표현될 수 있다. 이는 부모 경계들에 대한 모든 자식 노드들의 인코딩을 허용할 수 있는데, 이는 박스들이 트리의 더 깊은 부분들에서 더 작아짐에 따라 정밀도의 점진적인 손실을 피할 수 있다. 부모 콘테이너 - 원점 및 지수들 - 은 노드에 대한 양자화 프레임으로 지칭될 수 있다.
각각의 경계 영역을 나타내는 정보는 자식으로 지칭될 수 있고, 내부 자식, 리프 자식 또는 무효 자식을 나타낼 수 있다. 주어진 자식의 상태 및 콘텐츠들은 그의 대응하는 메타데이터 필드 및 상태 필드에 기초하여 공동으로 결정될 수 있다. 예를 들어, 상태 필드는 자식이 내부 노드인지 또는 리프 노드인지를 나타내는 자식당 비트를 포함할 수 있다. 다른 예로서, 상태 필드는 내부 노드들의 수 및 리프 노드들의 수를 개별적으로 인코딩할 수 있다. 메타데이터 필드는 자식들이 무효인지 여부를 표시할 수 있다.
자식 베이스 필드는 BVH 트리의 베이스 어드레스에 대한 노드에 대한 자식 베이스 어드레스를 나타낼 수 있으며, 그 후에 노드의 자식들이 저장될 수 있다. 리프 자식들의 경우, 메타데이터 필드는 주어진 경계들 내에 있는 리프들의 수를 나타낼 수 있고, 리프들의 수가 저장되는 전체 노드에 대한 자식 베이스 어드레스에 대한 자식 위치에 대한 오프셋을 나타낼 수 있다. 비-리프 자식들의 경우, 메타데이터 필드는 유사하게 자식 베이스 어드레스에 대한 오프셋을 특정할 수 있다(일부 실시예들에서, 혼합된 노드들의 경우, 자식 노드들이 먼저 오프셋 위치에 저장되고, 그 다음에 리프들이 이어짐). 도 15를 참조하여 아래에서 논의되는 바와 같이, 각각의 경계들은 하나 이상의 리프들을 참조할 수 있고, 각각의 리프는 하나 이상의 경계들에 의해 참조될 수 있다.
오피코드 필드는 노드 및 노드의 자식들에 관한 정보 및 성능 힌트들을 정의할 수 있다. 예를 들어, 리프 스트라이드 정보는 가변 크기 리프 실시예들에서 연속적인 리프들 사이의 스트라이드를 정의할 수 있다. 오피코드 내의 다른 필드는, 예를 들어, 자식으로 순회할 때 광선들을 변환하기 위해 클리크-S가 형성되어야 하도록, 자식들이 변환과 연관되는지 여부를 나타낼 수 있다(이 상황에 대한 기술들은 도 17 및 도 18을 참조하여 아래에서 논의된다).
일부 실시예들에서, 경계 좌표들은 예를 들어, 좌표당 6, 7 또는 8비트로 양자화되며, 이는 박스-형상 경계 영역을 정의하는 6개의 좌표들을 표현하기 위한 36, 42, 또는 48-비트 경계 필드를 초래한다. 일부 실시예들에서, (더 많은 수의 비트들을 사용하여 표현될 수 있는 초기 값들로부터) 양자화된 좌표 값들을 생성하는 양자화 기술들은, 거짓 네거티브들이 아닌 거짓 포지티브 교차 결과들이 있을 수 있음을 보장한다. 예를 들어, 양자화는 양자화된 박스 표현들이 비-양자화된 박스 표현들 이상인 방식으로 수행될 수 있다. 예를 들어, 양자화 산술은 각각의 코너에 대해 상이한 방향들로(라운딩이 수행되면 박스를 확장시키는 것에 대응하는 방향들로) 라운딩하도록 구성될 수 있다. 이는, 유리하게는, 순회 동안 테스트의 제한된 증가들 및 정확도에 영향을 미치지 않으면서 노드당 사용되는 데이터의 양을 감소시킬 수 있다.
도 10은 일부 실시예들에 따른, 예시적인 구성가능한 크기의 리프 데이터 구조를 예시하는 도면이다. 예시된 실시예에서, 각각의 리프는 다수의 이용가능한 페이로드 크기들 A-N을 갖는 헤더 및 페이로드를 포함한다. 위에서 논의된 바와 같이, 주어진 노드의 리프들에 대한 리프 스트라이드는 그 노드에 대한 헤더 데이터에 의해 정의될 수 있다. 헤더는 프리미티브에 대한 교차 테스트를 위해 SIMD 그룹을 개시하거나 프리미티브에 대한 좌표 변환을 수행하는 데 필요한 정보를 포함할 수 있다. 페이로드는 상이한 유형들의 프리미티브들(예를 들어, 디폴트 삼각형들, 알파 맵핑된 삼각형들, 이동 삼각형들 등)에 대한 다양한 정보를 포함할 수 있다. 페이로드 정보의 예들은 제한 없이, 프리미티브 식별자, 기하학적 구조 식별자, 하나 이상의 벡터들 등을 포함한다. 일부 실시예들에서, 주어진 경계들의 모든 자식 리프들은 동일한 크기를 갖는다. 다른 실시예들에서, 주어진 경계들의 리프들의 크기들은 개별적으로 인코딩될 수 있다.
도 11은 일부 실시예들에 따른, 가변 크기의 리프 노드들을 갖는 ADS 트리 구조에 대한 예시적인 메모리 레이아웃을 예시하는 도면이다. 도 11의 좌측은 루트 노드 R, 노드들 A-D 및 가변 크기 리프 노드들 0-9를 갖는 트리를 도시한다. 도 11의 우측은 메모리 내의 이러한 트리 요소들의 예시적인 레이아웃을 도시한다. 도시된 바와 같이, 각각의 노드는 임의의 노드 자식들에 대한 메모리에서의 오프셋을 나타내는 정보를 포함하고, 이어서 임의의 리프 자식들이 이어진다. 예를 들어, 노드 A의 경우, 그의 오프셋은 노드 D의 정보가 메모리에 저장되는 위치를 가리키고, 이어서 리프들 5 및 6이 이어진다.
일부 실시예들에서, 개시된 인코딩은 그래픽 드라이버가 다양한 목적들을 위해 사용할 수 있는 리프 블록들(도 11에서 타원들에 의해 표시된 바와 같음)에 후속하는 메모리의 정의되지 않은 영역들을 가능하게 한다 예를 들어, 드라이버는 트리 구조의 이러한 부분들에 디버그 정보, 확장된 프리미티브 정보, 성능 카운터들 등을 삽입할 수 있다.
일부 실시예들에서, 프로세서는 리프 데이터를 다수의 부분들로 분할하도록 구성된다. 예를 들어, 리프는, 교차 테스트를 위해 데이터 중 일부는 항상 액세스되고 교차 테스트를 위해 일부 콘텐츠는 거의 필요하지 않은 기하학적 프리미티브(예를 들어, 펀치스루 알파 텍스처 룩업(punchthrough alpha texture lookup)을 위한 uv 좌표들)와 연관될 수 있다. 이러한 상이한 유형들의 데이터는 리프 데이터 구조의 코어 및 확장된 부분들에 저장될 수 있다. 일부 실시예들에서, 확장된 부분들은 위에서 논의된 바와 같이 리프 블록들에 후속하는 정의되지 않은 메모리 영역들에 저장된다.
본 명세서에서 설명된 다양한 노드, 리프 및 트리 데이터 구조들은 설명의 목적들을 위해 포함되지만, 본 개시내용의 범위를 제한하도록 의도되지 않음에 유의한다. 다른 실시예들에서, 다양한 상이한 구조들 및 조직들이 구현될 수 있다.
도 12는 일부 실시예들에 따른, 셰이더 회로에 의해 실행되는 교차 회로, 노드 테스트 회로, 메모리 영역들 및 SIMD 그룹들 사이의 예시적인 데이터 흐름을 예시하는 도면이다. 도 12에 도시된 바와 같이, 일부 실시예들에서, 그래픽 프로세서는 광선 교차 가속기(190), 노드 테스터(1210)(예를 들어, 도 7의 병렬 테스터(710)), 및 상이한 유형들의 SIMD 그룹들, 클리크-A(1220) 및 클리크-T/클리크-S(1230)를 실행하도록 구성된 셰이더 회로(예를 들어, 명시적으로 도시되지 않은 프로그래밍가능 셰이더 회로(160))를 포함한다. 추가로, 그래픽 프로세서는, 셰이더 코어 공간(1240) 및 디바이스 메모리 공간(1250)을 구현하고, 그 안에 ADS가 저장된다.
도 13은 일부 실시예들에 따른, 도 12의 데이터 흐름과 연관된 예시적인 방법을 예시하는 흐름도이다. 1310에서, 예시된 실시예에서, 셰이더 상에서 실행되는 클리크-A는 (예를 들어, 클리크-A에 의해 실행되는 셰이더 프로그램에서 광선 할당 명령어의 실행에 대한 응답으로 RIA(190)에 요청을 전송함으로써) 광선 자원들을 할당한다. 1315에서, 예시된 실시예에서, RIA(190)는 하나 이상의 범용 레지스터들에서 하나 이상의 광선 ID들을 리턴한다(예를 들어, 이러한 광선 할당은 클리크-A에 의해 프로세싱된 다수의 광선들에 대해 수행될 수 있음에 유의한다). 1320에서, 예시된 실시예에서, 클리크-A는 제공된 광선 ID(들)에 기초하여 하나 이상의 할당된 광선들에 대한 광선 데이터를 광선 셰이더 코어 공간에 기록한다.
1325에서, 예시된 실시예에서, 클리크-A는 (잠재적으로 다른 광선 ID들과 함께) 광선 ID를 갖는 (예를 들어, 교차 광선 명령어의 실행에 기초하여) RIA(190)에 교차 광선 커맨드를 발행한다. 이는 ADS 순회 프로세스를 시작할 수 있다. 이 포인트 이후, 주어진 클리크-A로부터의 광선들은 ADS를 통해 상이한 경로들을 취하는 것으로 끝날 수 있고, 클리크-A에 대한 모든 광선들이 그들의 순회를 완료할 때까지 개별적으로 프로세싱될 수 있다.
1330에서, 예시된 실시예에서, RIA(190)는 광선에 대한 다음 ADS 노드를 발견하고, 노드에 대한 테스트를 노드 테스터(1210)에 발행한다. 이것이 광선이 테스트되는 처음이라면, RIA(190)는 루트 노드를 선택한다. 1335에서, 예시된 실시예에서, 노드 테스터(1210)는 셰이더 코어 공간으로부터 노드 데이터 및 광선 데이터를 판독하고 노드 테스트를 수행한다. 이는 노드의 자식들에 대한 미스/히트 정보를 RIA(190)에 리턴한다.
1340에서, 예시된 실시예에서, RIA(190)는 리프 노드에 도달할 때까지, 테스트 결과들에 기초하여 다음 노드로 순회한다. 다음 노드가 내부 노드이면, 흐름은 다시 1330으로 진행한다. 리프 노드에 도달하면, 흐름은 1345로 진행한다. 순회가 완료되면, 흐름은 1355로 진행한다.
1345에서, 예시된 실시예에서, 리프 노드에 도달되었고, RIA(190)는 클리크-T를 생성하고, 클리크-T에 대한 정보를 갖는 토큰 버퍼 ID를 전송한다. 1350에서, 예시된 실시예에서, 클리크-T는 토큰 ID를 사용하여 셰이더 코어 공간으로부터 스레드 데이터(예를 들어, 광선 ID 및 프리미티브 ID)를 판독하고, 디바이스 메모리로부터 프리미티브 데이터를 판독하고, 광선 ID를 사용하여 셰이더 코어 공간으로부터 광선 데이터를 판독한다. 클리크-T는 또한 프리미티브 테스트를 수행하고, (예를 들어, 히트가 있다면) 프리미티브 테스트에 기초하여 광선 데이터를 업데이트하고, 이어서, 순회를 계속할지 여부(예를 들어, 히트가 검출될 때 가장 가까운 히트 질의에 대한 순회를 종료함)를 RIA(190)에 통지한다.
클리크-T들에 대해 요소들(1345 및 1350)을 참조하여 설명된 것들과 유사한 동작들이 클리크-S에 대해 또한 수행될 수 있음에 유의한다. 1340에서, S-노드가 도달될 때, RIA(190)는 클리크-S를 생성하고, 디바이스 메모리로부터 데이터를 판독하고, 광선 데이터를 판독하고, 광선에 대한 변환을 수행하기 위해 셰이더 상에서 실행되고(예를 들어, 리프 페이로드를 사용하여 특정될 수 있는 파라미터들), 광선 데이터의 일부분을 적절히 업데이트할 수 있다. 이어서, 클리크-S는 순회를 계속하도록 RIA(190)에 통지할 수 있다.
1355에서, 예시된 실시예에서, 순회가 완료되고, RIA(190)는 클리크-A에게 통지하고, 이는 광선 셰이더 코어 공간으로부터의 교차 결과들을 갖는 광선 데이터를 판독하고 광선 자원 커맨드를 해제한다(그 후에 광선 ID는 다른 광선에 사용될 수 있음). 프로세서는, 예를 들어, 진행 전에 자신의 모든 광선들이 순회를 완료할 때까지 클리크-A가 대기할 수 있도록 펜스 카운터를 감소시킬 수 있다. 이어서, 클리크-A는 교차 결과들에 기초하여 프래그먼트 셰이딩을 수행할 수 있고, 이는 이어서 특정 상황들에서 추가 광선들을 생성할 수 있다.
프리미티브 테스트를 위해 SIMD 그룹들을 동적으로 형성함
도 14a는 일부 실시예들에 따른, 프리미티브 테스트를 위해 SIMD 그룹들을 동적으로 형성하기 위한 예시적인 기술을 예시하는 블록도이다. 예시된 실시예에서, 프로그래밍가능 셰이더(160)는 교차 광선 커맨드를 광선 교차 가속기(RIA)(190)에 전송한다. 교차 광선 커맨드는, 예를 들어 다수의 광선들을 프로세싱하는 클리크-A SIMD 그룹에 대한 것일 수 있다. RIA(190)는 (다양한 클리크-A들로부터 올 수 있고 데이터 구조를 통해 상이한 경로들을 취할 수 있는) 광선들에 대한 교차 결과들을 생성하기 위해 가속도 데이터 구조를 순회한다.
예시된 예에서, RIA(190)는 리프에 도달하면 실제로 프리미티브 테스트들을 수행하는 것이 아니라, (예를 들어, 동일한 프리미티브에 대해 테스트되는 광선들의 그룹에 대해) 프로그래밍가능 셰이더(160)에 의해 실행될 프리미티브 테스트 SIMD 그룹들(1405)을 동적으로 형성한다. 프로그래밍가능 셰이더(160)는 프리미티브 테스트 SIMD 그룹들(클리크-T)을 실행하고 프리미티브 테스트 결과들을 RIA(190)(명시적으로 도시되지 않음)에 제공할 수 있다. RIA(190)는 주어진 클리크-A에 대한 테스트 결과들을 집계할 수 있고, 결과들이 준비될 때 결과들을 프로그래밍가능 셰이더(160)에 다시 제공할 수 있거나, 또는 RIA(190)는 결과들이 완전하고 클리크-T가 결과들을 (예를 들어, 펜스 명령어를 사용하여) 집계할 수 있을 때 결과들을 제공할 수 있다.
프리미티브 테스트 결과들은 또한, 예를 들어, 히트가 있고 해당 유형이 요청되었는지 여부에 기초하여, 주어진 광선에 대해 순회를 계속해야 하는지 여부를 RIA(190)에 나타낼 수 있음에 유의한다. 가장 가까운 히트 질의에 대해, 순회는 히트가 있을 때 종료한다.
일부 실시예들에서, 프로세서는 동일한 셰이더를 공유하는 다수의 리프들이 함께 테스트될 수 있도록 이들을 동일한 클리크-T로 그룹화하도록 구성된다. 이는 유리하게는, 프리미티브 테스트의 평균 레이턴시를 감소시킬 수 있다. 일부 실시예들에서, 프로세서는 다수의 리프 테스트들 사이에서 병렬화되지 않는 동작들(예를 들어, 모든 거리들의 최소값을 찾고 잠재적으로 가장 가까운 히트 동작에 대해 타이 브레이크 동작들을 수행하는 것과 같이, 승자를 결정하고 광선을 업데이트하기 위한 동작들)을 수행하는 것에 대해 응답하는 마스터 스레드로서 각각의 광선에 대한 스레드를 지정한다. 따라서, 클리크는 클리크에 의해 테스트되는 광선들의 광선 ID들, 테스트되는 프리미티브들에 대한 프리미티브 어드레스들, 및 동일한 광선에 대해 동작하는 스레드들인 "스레드 세그먼트들"을 나타내는 정보(예를 들어, 스레드 세그먼트들에 대한 카운트 및 스레드 ID)를 나타내는 데이터를 수신할 수 있다.
예를 들어, 테스트되는 3개의 광선들과 10개의 상이한 프리미티브들에 대한 다음 정보를 고려한다:
이 예에서, 광선(2)은 광선(2)에 대한 스레드 세그먼트 내의 5개의 스레드들의 카운트 값 및 이러한 스레드 세그먼트 내의 5개의 스레드들에 대한 상이한 스레드 ID들(TID) 0-4를 갖는 프리미티브들 5-9에 대해 테스트되고 있다. 유사하게, 광선(1)은 스레드 세그먼트 내의 2개의 스레드들을 갖는 프리미티브 3 및 4에 대해 테스트되고 있다. 도 8을 참조하여 위에서 논의된 바와 같이, RAI(190)는 이러한 정보를 클리크-T에 대한 토큰 버퍼(810)에 저장할 수 있다.
일부 실시예들에서, 클리크-T는 변환에 수반되는 비-병렬 동작들을 수행하기 위해 SIMD-스코프된 감소 명령어를 실행한다. 이러한 실시예들에서, SIMD 감소 명령어는 출력을 생성하기 위해 SIMD 그룹 내의 다수의 스레드들로부터의 데이터에 액세스할 수 있다. 이는, 예를 들어 히트들에 대한 스레드 세그먼트 내의 스레드들 사이의 최소 거리들을 찾기 위해 스레드들을 반복하는 마스터 스레드의 루프를 대체할 수 있다. 루프 대신에 SIMD 감소 명령어를 사용하는 것은 유리하게는 처리량을 개선할 수 있다.
이들 실시예들에서, 클리크-T에 대한 정보는 세그먼트들 사이의 경계들을 나타내는 세그먼트 마스크(SM)를 포함할 수 있다. 이 예에서, 세그먼트 마스크 내의 논리적 "1"은 이것이 새로운 스레드 세그먼트 내의 제1 스레드임을 나타낸다.
SIMD 감소 명령어는 다른 스레드 세그먼트들로부터의 입력 데이터를 사용하지 않고 각각의 스레드 세그먼트 내에서 동작하기 위해 이러한 정보를 사용할 수 있다.
2019년 10월 9일에 출원된 미국 특허 출원 제16/597,625호는 그 전체가 참조로 본 명세서에 포함되며, 다양한 예시적인 SIMD 감소 동작들 및 레인 연결 네트워크들을 설명한다. 이러한 동작들은 통상적으로, 결과 레지스터 및 입력 레지스터를 취하고, SIMD 그룹 내의 상이한 스레드들에 대응하는 입력 레지스터의 상이한 인스턴스들에 기초하여 결과를 찾는다. 일부 실시예들에서, SIMD 감소 명령어는 세그먼트 마스크를 나타내는 추가적인 인자를 취한다. 이는, 실행 파이프라인이 스레드 세그먼트들에 걸쳐 감소 결과들을 전달하는 것을 회피할 수 있게 하여, 각각의 스레드 세그먼트에 대해 별개의 감소 결과를 제공할 수 있다. 따라서, 셰이더 회로는 세그먼트 마스크에 기초하여 스레드 세그먼트 내의 SIMD 감소 동작들을 제한하도록 구성된 제어 회로를 포함할 수 있다.
일부 실시예들에서, 스레드 세그먼트 내의 모든 스레드들은 SIMD 감소 동작으로부터 동일한 결과를 수신한다(예를 들어, 가장 가까운 히트를 갖는 프리미티브를 나타냄). SIMD 감소 동작은 최소, 최대, 추가 등과 같은 다양한 산술 연산들을 지원할 수 있다.
따라서, 일부 실시예들에서, 클리크-T의 상이한 스레드들은 상이한 광선들 상에서 동작한다. 추가로, 클리크-T의 상이한 스레드들은 동일한 광선에 대해 또는 상이한 광선들에 대해 상이한 프리미티브들 상에서 동작할 수 있다. 추가로, 클리크-T는 동일한 광선에 대해 동작하는 다수의 스레드들로부터의 입력 값들에 기초하여 동작을 수행하는 SIMD 감소 명령어를 실행할 수 있고, 스레드 세그먼트 내의 다수의 스레드들 각각에 대해 동일한 결과를 생성할 수 있다.
도 14b는 일부 실시예들에 따른, 프리미티브 테스트를 위해 SIMD 그룹들을 동적으로 형성하기 위한 예시적인 방법을 예시하는 흐름도이다. 도 14b에 예시된 방법은 다른 것들 중에서도, 본 명세서에 개시되는 컴퓨터 회로, 시스템들, 디바이스들, 요소들 또는 컴포넌트들 중 임의의 것과 함께 사용될 수 있다. 다양한 실시예들에서, 도시된 방법 요소들 중 일부는 동시에, 또는 도시된 바와는 상이한 순서로 수행될 수 있거나, 또는 생략될 수 있다. 부가적인 방법 요소들이 또한 원하는 대로 수행될 수 있다.
1410에서, 예시된 실시예에서, 셰이더 회로는 제1 SIMD 그룹에 대한 광선 교차 명령어를 실행하며, 여기서 명령어는 그래픽 장면에서 광선들의 제1 세트에 대한 좌표 정보를 표시한다.
1420에서, 예시된 실시예에서, 광선 교차 회로는, 광선 교차 명령어에 응답하여, 공간적으로 조직화된 가속도 데이터 구조 내의 다수의 노드들을 순회하고, 여기서 노드들은 경계 영역들의 좌표들을 나타내는 다수의 노드들 및 그래픽 장면에서 프리미티브들을 나타내는 다수의 노드들을 포함한다.
1430에서, 예시된 실시예에서, 디바이스는 하나 이상의 프리미티브들을 나타내는 가속도 데이터 구조의 노드에 도달하는 것에 대한 응답으로, 제1 세트의 광선들과 부분적으로만 중첩하는 제2 세트의 광선들에 대해 동작하는 제2 SIMD 그룹을 형성하고, 여기서, 제2 SIMD 그룹은 제2 세트의 광선들 내의 광선들이 하나 이상의 프리미티브들과 교차하는지 여부를 결정하기 위해 하나 이상의 명령어들을 실행한다.
일부 실시예들에서, RIA(190)는 제2 SIMD 그룹을 형성하고, 셰이더 회로는 이를 실행한다. 제1 SIMD 그룹 및 제2 SIMD 그룹은 하나 이상의 광선들의 제1 광선에 대한 정보를 저장하는 제1 데이터 구조에 대해 동작할 수 있고, 여기서 제1 데이터 구조는 광선 교차 회로에 또한 액세스가능한 셰이더 메모리 공간에 저장된다. 예를 들어, 제1 데이터 구조는 광선 코어 데이터(920), 광선 확장 데이터(840), 또는 둘 모두를 포함할 수 있다. 일부 실시예들에서, 제2 SIMD 그룹은 제2 SIMD 그룹에 대한 광선 교차 회로에 의해 식별된 셰이더 메모리 공간 내의 버퍼(예를 들어, 토큰 버퍼(810))로부터 스레드 데이터에 액세스한다. 셰이더 메모리 공간은 또한 교차 회로에 의해 사용되는 광선 스택 데이터를 위한 메모리 영역을 포함할 수 있다. 일부 실시예들에서, 하나 이상의 프리미티브들에 대한 프리미티브 좌표 데이터 및 경계 영역들의 좌표들은 (예를 들어, 디바이스 메모리(1250)에 저장된 ADS의 일부로서) 디바이스 메모리 공간에 저장된다.
일부 실시예들에서, 셰이더 회로는 (예를 들어, 교차 광선 명령어 직후에 또는 이후에 프로그램에서) 제1 SIMD 그룹의 실행을 일시정지하고, 제2 SIMD 그룹으로부터(그리고 잠재적으로 다른 클리크-T들로부터) 교차 결과들을 수신한 후에 하나 이상의 프리미티브들을 셰이딩하기 위해 제1 SIMD 그룹의 실행을 재개한다.
1440에서, 예시된 실시예에서, 셰이더 회로는 제2 SIMD 그룹의 실행의 결과들에 기초하여 교차된 것으로 표시된 하나 이상의 프리미티브들을 셰이딩한다. 셰이딩은 제1 SIMD 그룹의 실행을 계속함으로써 수행될 수 있다.
다양한 실시예들에서, 도 14a 및 도 14b의 기술들은 유리하게는, 프리미티브 테스트와 같은 더 복잡한 동작들을 수행하기 위해 셰이더 프로세서들을 사용하면서 전용 경계 영역 테스트 회로의 성능 및 전력 소비 이점들을 제공할 수 있다.
경계 영역들과 프리미티브들 사이의 다대다 맵핑
도 15는 일부 실시예들에 따른, 경계 영역들과 프리미티브들 사이의 예시적인 다대다 맵핑을 예시하는 도면이다. 예시된 예에서, 도 15의 상부 부분은 4개의 프리미티브들 및 8개의 경계 영역들의 2차원 뷰를 도시하는 한편, 도 15의 하부 부분은 4개의 프리미티브들에 대응하는 4개의 리프 노드들 및 8개의 경계 영역들을 갖는 예시적인 ADS 노드를 도시한다.
프리미티브들 P0-P3은 삼각형 프리미티브들이다. 예를 들어, 경계 영역들 0-7은 경계 박스들일 수 있다. 다양한 실시예들에서 경계 영역들 내의 프리미티브 꼭지점들이 3개 이상의 차원들로 특정되지만, 도 15의 단순화된 예는 설명을 용이하게 하기 위해 2개의 차원들로 도시된다.
도시된 바와 같이, 일부 실시예들에서, 그래픽 프로세서는 경계 영역들과 프리미티브들 사이의 다대다 맵핑들을 지원하는 가속도 데이터 구조를 생성 및 사용한다. 예를 들어, 경계 영역들 0-3은 모두 프리미티브 P0의 부모이며, 따라서 프리미티브는 다수의 부모 경계 영역들을 가질 수 있다. 추가로, 예를 들어, 경계 영역(3)은 다수의 프리미티브 자식들을 갖는다.
종래의 ADS 생성 기술이 (예를 들어, 경계 영역들 0-3의 조상이고 더 큰 경계 영역을 갖는 노드의 자식으로서) 상위 레벨에서 프리미티브 P0에 대한 리프 노드를 생성했을 수도 있는 경우, 개시된 기술들은 이것이 다수의 더 작은 경계 영역들의 자식이 되도록 하위 레벨에서 프리미티브에 대한 리프를 생성하는 것을 기다릴 수 있다. 다양한 실시예들에서, 비교적 높은 분기 인자와 조합된 다대다 맵핑 구조는 경계 영역들이 프리미티브들 주위에 타이트 맞춤을 제공할 수 있게 한다. 이는 다양한 실시예에서 네거티브 프리미티브 테스트 결과들을 감소시킬 수 있다. 노드 테스트는 프리미티브 테스트보다 프로세싱 자원들의 관점에서 비교적 덜 비쌀 수 있기 때문에, 프리미티브 테스트의 이러한 감소는 성능을 개선하거나, 전력 소비를 감소시키거나, 또는 둘 모두일 수 있다. 예를 들어, 더 적은 수의 네거티브 프리미티브 테스트들이 발행될 때, 주어진 장면에 대해 더 적은 수의 클리크-T들이 형성될 수 있다.
도 16은 일부 실시예들에 따른, 다대다 맵핑을 갖는 공간적으로 조직화된 데이터 구조를 생성하기 위한 예시적인 방법을 예시하는 흐름도이다. 도 16에 예시된 방법은 다른 것들 중에서도, 본 명세서에 개시되는 컴퓨터 회로, 시스템들, 디바이스들, 요소들 또는 컴포넌트들 중 임의의 것과 함께 사용될 수 있다. 다양한 실시예들에서, 도시된 방법 요소들 중 일부는 동시에, 또는 도시된 바와는 상이한 순서로 수행될 수 있거나, 또는 생략될 수 있다. 부가적인 방법 요소들이 또한 원하는 대로 수행될 수 있다.
1610에서, 예시된 실시예에서, 그래픽 프로세서는 렌더링될 그래픽 장면의 다수의 그래픽 프리미티브들에 대한 데이터에 액세스한다.
1620에서, 예시된 실시예에서, 그래픽 프로세서는, 데이터 구조의 노드들이 그래픽 장면 내의 경계 영역들의 좌표들 또는 그래픽 프리미티브들을 나타내는 공간적으로 조직화된 데이터 구조를 생성한다. 예시된 실시예에서, 공간적으로 조직화된 데이터 구조는 다수의 프리미티브들이 자식들로서 표시되는 경계 영역을 갖는 노드를 포함한다. 또한, 공간적으로 조직화된 데이터 구조는 다수의 경계 영역들이 부모로서 표시되는 프리미티브를 포함한다.
일부 실시예들에서, 그래픽 프로세서는 오리지널 표현보다 더 적은 수의 비트들을 사용하여 제1 경계 영역을 표현하기 위해 공간적으로 조직화된 데이터 구조에서 제1 경계 영역을 나타내는 정보를 양자화한다. 이러한 양자화는 ADS에 대한 전체 저장 요건들을 감소시킬 수 있다. 일부 실시예들에서, 양자화된 표현이 모든 방향에서 제1 경계 영역 이상인 영역을 나타내도록 양자화가 수행되어, 제1 경계 영역에 대한 거짓 네거티브 교차 결과들을 방지한다. 일부 실시예들에서, 공간적으로 조직화된 데이터 구조는 노드의 모든 자식 노드들이 연속적으로 위치되는 노드에 대한 위치(예를 들어, ADS에 대한 루트 위치로부터의 오프셋)를 인코딩한다. 일부 실시예들에서, 공간적으로 조직화된 데이터 구조는 리프 노드들에서의 프리미티브 정보 및 내부 노드들에서의 경계 영역 정보를 특정한다.
일부 실시예들에서, 공간적으로 조직화된 데이터 구조는, 하나 이상의 프리미티브들을 나타내는 제1 노드에 대해, 하나 이상의 프리미티브들이 위치되는 오프셋 및 오프셋에 위치된 제1 노드에 대한 프리미티브들의 수를 나타내는 하나 이상의 필드들을 포함한다.
일부 실시예들에서, 데이터 구조는 비교적 높은 분기 인자를 갖는다. 예를 들어, 공간적으로 조직화된 데이터 구조는 적어도 4개의 자식 노드들을 갖는 노드를 포함할 수 있다. 일부 실시예들에서, 데이터 구조는 가변 크기 리프 노드들을 지원한다. 따라서, 공간적으로 조직화된 데이터 구조 내의 제1 리프 노드 및 제2 리프 노드는 상이한 데이터 크기들을 가질 수 있고, 제1 리프 노드 및 제2 리프 노드의 각각의 부모 노드들은 상이한 데이터 크기들을 인코딩할 수 있다.
1630에서, 예시된 실시예에서, 그래픽 프로세서는 공간적으로 조직화된 데이터 구조를 순회하여, 그래픽 장면 내의 광선들이 프리미티브들과 교차하는지 여부를 결정하고, 그 결정에 기초하여 교차된 프리미티브들을 셰이딩한다. 위에서 논의된 바와 같이, 프로세서는 프리미티브 테스트를 위한 클리크-T들을 형성하고, 교차 결과들에 기초하여 셰이딩을 위한 클리크-A의 실행을 재개할 수 있다.
순회 동안 광선 좌표 변환을 위한 SIMD 그룹들을 동적으로 형성함
도 17은 일부 실시예들에 따른, 가속도 데이터 구조를 순회할 때 광선 변환을 위한 SIMD 그룹들의 예시적인 동적 형성을 예시하는 도면이다. 예시된 예에서, ADS는 10개의 노드들 0-9를 포함한다. 2개의 노드들(S-노드들로 지칭될 수 있는 노드들 5 및 6)은 동일한 자식 노드(아래에서 상세히 논의되는 바와 같이, 하위 레벨 ADS의 루트일 수 있는 노드 7)와의 경계들을 갖는다. 이들 노드들은 자식 노드로 순회할 때 변환이 수행되어야 함을 나타내는 필드를 가질 수 있다. 예를 들어, 도 9를 참조하여 위에서 논의된 오피코드 필드는, 예시된 예에서, 노드들 5 및 6에 대한 이러한 필드에 대해 변환이 수행될 것을 나타낼 수 있다(도 17에서 "(T)" 값으로 표시됨).
RIA(190)는 순회를 수행하는 하나 이상의 광선들의 좌표들을 변환하기 위해 클리크-S를 형성할 수 있다(예를 들어, 대응하는 경계 영역에서 히트들임). 프로그래밍가능 셰이더(160)는 클리크-S가 변환을 수행하기 위한 수학적 연산들을 특정하는 하나 이상의 명령어들을 실행할 수 있다. 일부 실시예들에서, 클리크-S는, 변환이 완료될 때 RIA(190)가 변환된 광선 데이터에 기초하여 순회를 계속할 수 있도록, 셰이더 코어 공간(1240) 내의 광선 데이터에 대해 동작한다. 순회 동안의 어떤 지점에서, RIA(190)는, 예를 들어, 다른 클리크-S를 형성하거나 또는 저장된 원래의 좌표들로 복귀시킴으로써, 추가의 순회를 위해 광선들을 그들의 원래의 좌표들로 다시 변환할 수 있다.
위에서 설명된 광선 좌표 변환은 다양한 시나리오들에서 유용할 수 있다. 일례로서, 기하학적 인스턴스화는 동일한 장면에서 동일한 모델의 다수의 사본들의 렌더링을 허용하는 기술이다. 예를 들어, 거리에 주택들의 행을 생성하기 위해 장면에서 여러번 인스턴스화될 수 있는 집의 모델을 고려한다. 각각의 인스턴스에 대해, 모델 공간으로부터 세계 공간으로 모델을 변환하기 위해 변환 행렬이 정의될 수 있다. 광선 추적 프로세서들은 상이한 기술들을 사용하여 인스턴스화를 지원할 수 있다. 일례로서, 시스템은 각각의 인스턴스에 대한 모델을 변환하고 모든 인스턴스들에 대한 세계 공간 기하학적 구조를 포함하는 ADS를 구축할 수 있다. 다른 예로서, 시스템은, 도 17에 도시된 바와 같이, 인스턴스화되고 있는 기하학적 구조에 대한 모델 공간에 가속도 데이터 구조의 단일 서브-부분(예를 들어, 트리)을 생성하고, ADS의 순회 동안 세계 공간으로의 변환을 수행할 수 있다. 후자의 기법은, ADS에서 인스턴스화되는 모델의 복제의 결여로 인해, 비교적 더 작은 ADS들을 제공할 수 있다.
일부 실시예들에서, 모델 공간 트리의 모든 인스턴스(예를 들어, 모델의 다수의 인스턴스들에 사용될 BVH 트리를 제공할 수 있는 도 17의 노드들 7-9)에 대해, 루트 경계 영역의 사본이 세계 공간으로 변환되고, ADS에서 다수의 부모를 갖는 리프로서 모델의 루트 경계 영역을 갖는 계층구조가 구축된다. 상위 계층구조는 모델 공간 트리들의 모든 인스턴스들의 모든 경계 영역들을 포함하며, 최상위 레벨 ADS로 지칭될 수 있다. ADS에 한번 포함되고 인스턴스화되는 모델 공간 BVH 트리는 하위 레벨 ADS로 지칭될 수 있다.
시스템은 최상위 레벨 ADS로부터 하위 레벨 ADS로 순회할 때 변환을 수행할 수 있다. 진입하는 광선들 또는 경계 영역들 자체가 변환될 수 있다. 일부 실시예들에서, 광선은 위에서 설명된 바와 같이 변환되는데, 이는 이것이 계산적으로 덜 비쌀 수 있기 때문이다. 예를 들어, 아핀(affine) 변환의 경우, 광선의 원점 및 방향만이 변환될 수 있다(그리고 방향은 변환되지 않음). 일부 실시예들에서, 순회 동안의 역-추적을 위해, 역변환이 (예를 들어, 역변환 행렬을 사용하여) 수행될 수 있다. 다른 실시예들에서, 프로세서는 원래의 광선 좌표들(예를 들어, 원점 및 방향)을 기록하여, 감소 변환을 수행할 필요성을 피할 수 있다. 이는, 예를 들어 부동 소수점 계산들로 인한 에러를 감소시킬 수 있다.
일부 실시예들에서, ADS는 2개 초과의 계층적 레벨들을 포함할 수 있으며, 순회가 하위 레벨로 진행될 때마다 현재 레벨에 대한 변환이 일어난다. 프로세서는 이전 레벨로 다시 순회하기 위해 변환 전에 좌표 정보를 저장하는 변환 스택을 유지할 수 있다. ADS는 다양한 입도들로 변환이 수행되어야 함을 나타낼 수 있다. 일례로서, 노드는 자신의 자식 노드들 중 임의의 것으로 순회할 때 변환이 수행되어야 함을 나타내는 단일 필드를 포함할 수 있다. 다른 예로서, 노드는 상이한 자식 노드들로 전환할 때 변환들이 수행되어야 하는지 여부를 개별적으로 인코딩할 수 있다.
도 17의 예시된 예에서, 노드들 7-9에 각각 대응하는 3개의 메시들을 갖는 모델이 생성되었을 수 있다. 예시된 예에서, 이러한 모델은 2번 인스턴스화되었고, 변환을 요구하는 것으로 마킹된 최상위 레벨 ADS(노드들 0-6에 대응함)에서 인스턴스당 노드(노드들 5 및 6)가 존재한다. 이들 노드들(노드들 5 및 6)은 효과적으로 최상위 레벨 계층구조의 리프들이다.
개시된 기술들은 셰이더 파이프라인들에 의해 실행되는 클리크-S SIMD 그룹들을 활용하지만, 전용 RIA 회로는 다른 실시예들에서 S-노드들에 대한 변환들을 수행하도록 구성될 수 있다.
도 18은 일부 실시예들에 따른, 광선 좌표 변환을 위해 SIMD 그룹들을 동적으로 형성하기 위한 예시적인 방법을 예시하는 흐름도이다. 도 18에 예시된 방법은 다른 것들 중에서도, 본 명세서에 개시되는 컴퓨터 회로, 시스템들, 디바이스들, 요소들 또는 컴포넌트들 중 임의의 것과 함께 사용될 수 있다. 다양한 실시예들에서, 도시된 방법 요소들 중 일부는 동시에, 또는 도시된 바와는 상이한 순서로 수행될 수 있거나, 또는 생략될 수 있다. 부가적인 방법 요소들이 또한 원하는 대로 수행될 수 있다.
1810에서, 예시된 실시예에서, 셰이더 회로(예를 들어, 프로그래밍가능 셰이더(160))는 제1 SIMD 그룹에 대한 광선 교차 명령어를 실행하며, 여기서 명령어는 그래픽 장면에서 광선들의 세트에 대한 좌표 정보를 표시한다.
1820에서, 예시된 실시예에서, 광선 교차 회로(예를 들어, RIA(190))는, 광선 교차 명령어에 응답하여, 공간적으로 조직화된 가속도 데이터 구조 내의 다수의 노드들을 순회하고, 여기서 데이터 구조의 노드들은 그래픽 장면 내의 경계 영역들에 대응하는 좌표들을 나타내고 순회는 광선들이 경계 영역들과 교차하는지 여부를 결정한다.
일부 실시예들에서, 가속도 데이터 구조는 계층적 구조이고, 제1 노드는 하위 레벨 가속도 데이터 구조에서 자식 노드를 갖는 상위 레벨 가속도 데이터 구조의 리프 노드이다. 일부 실시예들에서, 변환은 그래픽 장면에서 여러번 인스턴스화되는 그래픽 모델의 인스턴스에 대한 모델 공간에 하나 이상의 광선들을 포지셔닝한다. 따라서, 일부 실시예들에서, 제1 노드의 자식 노드(예를 들어, 모델 공간에 대한 루트 노드)는 또한 상위 레벨 가속도 데이터 구조에서 다른 부모 노드를 가지며, 여기서 다른 부모 노드는 자식 노드로 순회할 때 상이한 변환을 나타내며, 상이한 변환은 그래픽 모델의 상이한 인스턴스에 대한 모델 공간과 연관된다.
일부 실시예들에서, 가속도 데이터 구조는 경계 체적 계층구조이다.
1830에서, 예시된 실시예에서, 디바이스는 변환을 나타내는 제1 노드에 도달하는 것에 응답하여, 광선들의 세트 내의 하나 이상의 광선들의 좌표들을 변환하기 위해 셰이더 회로 상에서 실행하기 위한 제2 SIMD 그룹(예를 들어, 클리크-S)을 형성한다.
일부 실시예들에서, 광선 교차 회로는 하나 이상의 광선들의 오리지널 좌표들을 저장하고, 제1 노드를 지나 가속도 데이터 구조를 통해 역으로 순회하는 것에 응답하여 오리지널 좌표들로 복귀한다.
일부 실시예들에서, 제1 SIMD 그룹 및 제2 SIMD 그룹은 셰이더 메모리 공간에서 하나 이상의 광선들에 대한 광선 데이터에 액세스한다. 제1 SIMD 그룹은 광선 교차 명령어를 실행하기 전에 셰이더 메모리 공간 내의 광선들의 세트에 대한 메모리 공간을 할당하기 위한 명령어를 포함할 수 있다.
일부 실시예들에서, 제2 SIMD 그룹은 광선 교차 명령어를 실행한 다른 SIMD 그룹으로부터의 하나 이상의 광선들을 포함한다. 일반적으로, 클리크-A로부터의 광선들은, 클리크-S 또는 클리크-T들이 다수의 상이한 클리크-A들로부터의 광선들에 대해 동작할 수 있도록, 순회로부터 상이한 경로들을 취할 때 분할될 수 있다.
순회 동안의 예시적 광선 그룹화
도 19a는 일부 실시예들에 따른, 상이한 광선들이 그들의 순회 동안 ADS 내의 상이한 노드들을 현재 타겟팅하는 예시적인 상황을 예시하는 도면이다. 예시된 예에서, 광선들 A, C 및 E는 노드 1을 타겟팅하고, 광선들 B 및 D는 노드 2를 타겟팅하고, 광선들 X 및 Y는 노드 3을 타겟팅하고, 및 광선 Z는 노드 4를 타겟팅한다.
일부 실시예들에서, 그래픽 프로세서는 주어진 시간에 노드에 대해 테스트하는 광선들의 수를 증가시키기 위해 광선들을 그룹화하도록 구성된다. 이는 또한 비닝(binning) 또는 코히어런시 수집으로 지칭될 수 있다. 아래에서 상세히 논의되는 개시된 그룹화 기술들은, 예를 들어, 노드 데이터를 저장하는 L1데이터 캐시에서 대역폭 소비를 감소시킬 수 있다.
일부 실시예들에서, 그래픽 프로세서는 광선이 테스트하도록 허용되기 전에 각각의 광선을 그룹에 할당한다. 이 그룹은 동일한 키를 공유하는 광선들의 리스트일 수 있다. 경계 영역 테스트를 위해, 키는 광선에 대한 순회에서 다음 타겟인 노드의 어드레스일 수 있다. 다른 예들로서, 키는 부모 노드 또는 조부모 노드의 어드레스일 수 있다. 리프 테스트를 위해, 키는 리프 헤더 가상 어드레스일 수 있다. 키는 또한 광선과 연관된 데이터 마스터 및 킥 슬롯의 다른 콘텍스트 정보를 포함할 수 있다.
각각의 그룹에 대한 정보는 그 그룹 내의 광선들의 리스트를 나타낸다. 일부 실시예들에서, 전용 회로는 각각의 빈에 대한 광선들의 리스트를 저장하도록 구성된다. 이들 실시예들에서, 다양한 수들의 엔트리들은 다양한 구현들에서, 예를 들어, 각각 4, 8, 16, 32, 또는 64개의 엔트리들을 갖는 64, 128, 256, 또는 512개의 그룹들에서 그룹화를 위해 사용될 수 있다.
일부 실시예들에서, 주어진 광선에 대해 순회 스택의 최상부가 변할 때마다, RIA는 대응하는 키에 대한 매칭을 찾기 위해 할당된 그룹들을 탐색한다. RIA는 도 19b에 도시된 바와 같이 그룹들에 광선들을 할당하도록 구성된 그룹화 제어 회로(1910)를 포함할 수 있다. 그룹화 회로(1910)는, 예를 들어, 그룹들의 세트를 결정하기 위해 키를 해싱(hashing)하고 키 매칭을 위해 그룹들의 세트 내의 임의의 할당 그룹들을 탐색함으로써, 세트-연관 캐시 내의 캐시 라인들과 유사하게 그룹들을 탐색할 수 있다. 이들 실시예들에서, 그룹화 회로(1910)는 콘텐츠-어드레스가능한 메모리 구조들을 포함할 수 있다. 매칭이 발견되면, RIA(190)는 매칭 그룹에 광선을 첨부하도록 구성된다. 매칭이 발견되지 않지만 할당되지 않은 그룹들이 이용가능하다면, RIA(190)는 새로운 그룹을 생성하고 광선을 새로운 그룹에 할당할 수 있다. 매칭이 발견되지 않고 모든 그룹들이 현재 할당된 경우, 그룹화는 그룹이 이용가능하게 될 때까지 중단될 수 있다.
유사한 기술들은, 예를 들어, 동일한 리프 노드(또는 예를 들어, 셰이딩 코히어런시를 위해 동일한 타입의 리프)를 타겟팅하는 광선들의 리스트들을 저장하기 위해 별개의 전용 회로를 사용하여 프리미티브들과 연관된 리프 노드들을 그룹화하는 데 사용될 수 있다. 일부 실시예들에서, 상이한 수들의 그룹들, 그룹당 상이한 수들의 엔트리들, 또는 둘 모두가 리프 노드들 및 내부 노드들에 대해 구현될 수 있다.
일부 실시예들에서, RIA(190)는 또한 각각의 그룹 내에서 가장 오래된 광선의 연령을 추적한다. 예를 들어, RIA(190)는 각각의 그룹에 대한 제어 레지스터에 연령 필드를 유지할 수 있다. 연령 필드는 양자화될 수 있다. 각각의 사이클에서, RIA는 가장 오래된 광선들을 갖는 최대 N개의 그룹들을 선택하고, 노드 또는 프리미티브 테스트를 위한 스케줄링에 대해 발행하기 위해 선택된 그룹들로부터 광선들을 발행할 수 있다. 일부 실시예들에서, RIA(190)는 임계 수의 광선들을 포함할 때까지 스케줄링을 위한 그룹을 고려하지 않을 수 있다. 다른 실시예들에서, 이용가능한 그룹들 중에서 선택하기 위한 다양한 상이한 기술들이 구현될 수 있다.
일부 실시예들에서, 회로(1910)를 그룹화함으로써 결정된 매칭 그룹은 각각의 할당된 그룹에 대한 광선들의 리스트들을 저장하도록 구성된 전용 회로에 대한 인덱스이다. 다른 실시예들에서, 매칭 그룹은 데이터 구조의 속성들, 예를 들어, 도 19c를 참조하여 아래에서 논의되는 바와 같이 리스트 내의 엔트리들에 대한 하나 이상의 포인터들을 사용하여 표시될 수 있다.
도 19c는 일부 실시예들에 따른, 광선들을 그룹화하기 위한 예시적인 단일-링크된 리스트 구현을 예시하는 도면이다. 예시된 실시예에서, 각각의 광선 큐 엔트리는 (예를 들어, 광선들 A, C 및 E에 대한) 광선 ID, 다음 타겟 노드를 나타내는 스택 최상부 필드(예를 들어, 여기서 0x2C는 도 19a의 예에서 노드 1을 식별하는 노드 식별자임), 및 리스트 내의 다음 광선의 위치를 나타내는 다음 광선 필드를 표시한다. 일부 실시예들에서, 이러한 기술은 그룹들이 중단 없이 무한히 성장하게 할 수 있다. 일부 실시예들에서, RIA는 한 번에 최대 임계 수의 그룹들을 지원한다. 광선이 그룹화될 때, 그것은 그룹 리스트의 끝에 추가될 수 있고, 그룹화 회로(1910)에 의해 유지되는 테일 포인터가 업데이트될 수 있다. 그룹이 테스트를 위해 스케줄링될 때, RIA는 포인터 추적을 사용하여 리스트를 반복하고 그룹 내의 모든 광선들을 찾을 수 있다. 예시의 목적들을 위해 단일-링크된 리스트가 논의되지만, 다양한 다른 데이터 구조들 중 임의의 것이 광선 그룹화를 위해 구현될 수 있다. 예시의 목적들을 위해 단일-링크된 리스트가 도시되지만, 다른 데이터 구조들이 고려됨에 유의한다.
개시된 그룹화 기술들은 유리하게는, 경계 영역 데이터 페치들의 시간적 국부성을 개선할 수 있다. 이는 하나 이상의 데이터 캐시들에 대한 캐시 스래싱(thrashing) 및 대역폭을 감소시킬 수 있다.
도 20은 일부 실시예들에 따른, ADS의 순회 동안 광선들을 그룹화하기 위한 예시적인 방법을 예시하는 흐름도이다. 도 20에 예시된 방법은 다른 것들 중에서도, 본 명세서에 개시되는 컴퓨터 회로, 시스템들, 디바이스들, 요소들 또는 컴포넌트들 중 임의의 것과 함께 사용될 수 있다. 다양한 실시예들에서, 도시된 방법 요소들 중 일부는 동시에, 또는 도시된 바와는 상이한 순서로 수행될 수 있거나, 또는 생략될 수 있다. 부가적인 방법 요소들이 또한 원하는 대로 수행될 수 있다.
2010에서, 예시된 실시예에서, 광선 교차 회로(예를 들어, RIA(190))는 그래픽 장면 내의 광선들의 세트에서 다수의 광선들에 대한 원점 및 방향 정보를 나타내는 하나 이상의 광선 교차 요청들을 수신한다.
2020에서, 예시된 실시예에서, 광선 교차 회로는, 광선들이 경계 영역들과 교차하는지 여부를 결정하기 위해, 노드들이 그래픽 장면의 경계 영역들에 대응하는 좌표들을 나타내는 공간적으로 조직화된 가속도 데이터 구조의 다수의 노드들을 순회한다. 예시된 실시예에서, 2020의 순회는 요소들(2030 및 2040)을 포함한다.
2030에서, 예시된 실시예에서, 광선 교차 회로는 (예를 들어, 그룹화 회로(1910)를 사용하여) 광선들이 다음에 타겟팅하는 데이터 구조의 노드에 기초하여 광선들의 세트의 부분들을 다수의 그룹들로 그룹화한다. 일부 실시예들에서, 광선 교차 회로는 가속도 데이터 구조의 리프 노드들 및 가속도 데이터 구조의 내부 노드들에 대한 별개의 그룹화 회로를 포함한다.
일부 실시예들에서, 광선 교차 회로는 광선이 가속도 데이터 구조의 레벨들 사이를 순회할 때마다 광선을 새로운 그룹에 할당한다. 예를 들어, 광선 교차 회로는 ADS의 깊이-우선 탐색을 위해 광선에 대한 순회 스택을 구현할 수 있고, 광선 교차 회로는 순회 스택의 최상부가 변할 때마다 새로운 그룹에 광선을 할당할 수 있다.
일부 실시예들에서, 광선에 대한 그룹을 결정하기 위해, 광선 교차 회로는, 그룹들의 세트를 결정하기 위해 해시 함수에 대한 입력으로서 광선에 의해 타겟팅된 다음 노드에 기초하는 키를 사용하고, 세트 내의 할당된 그룹이 키와 매칭하는지 여부를 결정하기 위해 그룹들의 세트를 탐색한다. 광선 교차 회로는 임의의 현재 할당된 그룹과 매칭하지 않는 광선에 대해 새로운 그룹을 할당할 수 있다.
2040에서, 예시된 실시예에서, 광선 교차 회로는 그룹화에 기초하여, 제1 그룹 내의 광선들이 제1 노드의 하나 이상의 경계 영역들과 교차하는지 여부를 결정하기 위해 제1 노드를 타겟팅하는 광선들의 세트의 서브세트를 포함하는 제1 그룹을 (예를 들어, 병렬 테스터(710)를 사용하여) 프로세싱한다. 일부 실시예들에서, 프로세싱은 경계 영역 테스트 회로로의 발행을 위한 스케줄링을 위해 클록 사이클 동안 광선들의 하나 이상의 그룹들의 선택에 기초한다. 이들 실시예들에서, 이들 그룹들은 다른 그룹들을 프로세싱하기 위해 진행하기 전에 드레이닝되어, 하나 이상의 데이터 캐시들에 캐싱되는 경계 영역 데이터에 대한 액세스들에 대한 시간적 국부성을 제공할 수 있다. 그룹(들)의 선택은 광선들의 할당된 그룹들에서 가장 오래된 광선에 기초할 수 있으며, 이는 공정성을 제공하고 기아(starvation)를 피할 수 있다.
제1 그룹은 링크된 리스트에 의해 특정될 수 있다. 일부 실시예들에서, 광선 큐의 엔트리들은 대응하는 광선의 현재 그룹에 대한 링크된 리스트 내의 다음 광선을 가리키는 필드를 포함한다. 일부 실시예들에서, 제1 그룹은, 예를 들어, 주어진 SIMD 그룹으로부터의 광선들이 ADS를 통해 상이한 경로들을 취하고 다른 그룹들로부터의 광선들과 조합되는 것으로 인해, 셰이더 프로세서에 의해 프로세싱된 다수의 상이한 SIMD 그룹들로부터의 광선들을 포함한다. 광선 교차 회로는 노드의 다수의 경계 영역들에 대한 광선을 병렬로 테스트하도록 구성된 병렬 테스트 회로를 포함할 수 있다. 병렬 테스트 회로의 다수의 인스턴스들은 다수의 광선들을 병렬로 프로세싱하도록 구성될 수 있다.
상세한 전체 교차 순회 예
도 21은 일부 실시예들에 따른, 광선을 프로세싱하기 위한 예시적인 방법을 예시하는 흐름도이다. 도 21에 예시된 방법은 다른 것들 중에서도, 본 명세서에 개시되는 컴퓨터 회로, 시스템들, 디바이스들, 요소들 또는 컴포넌트들 중 임의의 것과 함께 사용될 수 있다. 다양한 실시예들에서, 도시된 방법 요소들 중 일부는 동시에, 또는 도시된 바와는 상이한 순서로 수행될 수 있거나, 또는 생략될 수 있다. 부가적인 방법 요소들이 또한 원하는 대로 수행될 수 있다.
2110에서, 예시된 예에서, 셰이더 프로세서에 의해 실행되는 클리크-A는 광선을 할당한다. 2112에서, RIA(190)는 광선에 대한 광선 셰이더 코어 공간을 할당하고 광선 ID를 리턴한다. 2114에서, 클리크-A는 광선에 대한 데이터를 셰이더 코어 공간에 기록한다. 2116에서, 클리크-A는 교차 광선 명령어를 발행한다.
2118에서, RIA(190)는, 예를 들어 BVH 루트 노드에서 시작하여 광선에 대한 ADS의 순회를 시작한다. 2120에서, RIA는 (예를 들어, 그룹화 회로를 사용하여) 그룹에 광선을 할당하고, (예를 들어, 활성 그룹들 중에서 N개의 가장 오래된 광선들 중 하나를 갖는 것으로 인해, 또는 그룹들 사이의 일부 다른 적절한 중재 방식에 따라) 그룹이 드레인하기를 기다린다. 일단 그룹이 발행되면, RIA(190)는 2122에서 노드 유형을 결정한다. 그룹에 의해 타겟팅된 노드가 내부 노드이면, 흐름은 2124로 진행한다. 노드가 리프 노드이면, 흐름은 2140으로 진행한다.
2124에서, 예시된 예에서, 병렬 테스터(710)는 노드 테스트를 수행하고, 노드의 경계 영역들에 대한 히트 정보를 리턴한다. 2126에서 히트들이 있는 경우, 흐름은 2128로 진행하고, RIA(190)는 임의의 추구되지 않은 노드들을 광선 스택 상으로 푸시하고, 흐름은 (예를 들어, ADS의 다음 노드로 순회하기 위해) 다시 2120으로 진행한다. 2126에서 히트들이 없다면, 흐름은 2130으로 진행한다.
2130에서, 스택이 비어 있지 않으면, RIA(190)는 2120에서 스택으로부터 노드를 팝하고 2120으로 진행한다(예를 들어, ADS의 다음 노드로 순회함). 스택이 비어 있으면, RIA(190)는 2134에서 순회를 종료한다.
2140에서, (리프 노드들에 대해) 예시된 예에서, RIA(190)는 RIA(190)와 리프 노드에 대해 생성될 클리크-T 또는 클리크-S 사이의 통신을 위해 토큰 ID(셰이더 코어 공간의 버퍼에 대한 포인터)를 생성한다. 각각의 스레드는 토큰 ID와 함께 자신의 스레드 ID를 사용하여 자신의 광선 ID 및 프리미티브 어드레스를 검색할 수 있다. 이어서, 셰이더는 (프리미티브 테스트를 위한) 클리크-T 또는 (광선 좌표 변환을 위한) 클리크-S를 스케줄링하고, 2142에서 클리크를 실행하며, 이는 광선 데이터를 업데이트한다. 일단 클리크가 종료되면, RIA(190)는 2144에서 광선을 웨이크(wake)하여 순회를 계속한다. 광선이 (예를 들어, 가장 가까운-히트 질의에 대한 교차를 검출하는 것으로 인해) 종결될 경우, 흐름은 2134로 진행하고 순회가 종료된다. 그렇지 않으면 (예를 들어, 임의의-히트 질의의 경우), 흐름은 2130으로 진행하고, 스택이 비어 있지 않으면 순회가 진행할 수 있다.
순회가 종료된 후, 클리크-A는 광선 셰이더 코어 공간으로부터 결과 데이터를 판독할 수 있다. RIA(190)는 또한 광선 셰이더 코어 공간으로부터 광선을 할당 해제하는 것을 포함하여 광선을 해제할 수 있다.
일부 실시예들에서, 병렬 테스터(710)는 도 21의 요소(2124)를 수행하도록 구성된다. 일부 실시예들에서, RIA의 광선 순회 제어 회로는 도 21의 요소들(2112, 2118, 2120, 2122, 2126, 2144, 2146 및 2134)을 수행하도록 구성된다. 일부 실시예들에서, 광선 스택 관리자 회로는 도 21의 요소(2128, 2132, 및 2130)를 수행하도록 구성된다. 일부 실시예들에서, 셰이더 회로와 같은 다른 그래픽 회로는 도 21의 요소들(2110, 2114, 2116 및 2142)을 수행하도록 구성된다.
셰이더 코어 공간
위에서 논의된 바와 같이, 셰이더 메모리 공간(본 명세서에서 셰이더 코어 공간으로 또한 지칭됨)은 동일한 셰이더 코어 상에서 실행되는 다수의 스레드 그룹들에 액세스가능할 수 있으며, 이는 RIA(190)와 상이한 유형들의 SIMD 그룹들(예를 들어, 클리크-A들 및 클리크-T들) 사이의 데이터 공유를 용이하게 할 수 있다. 일부 실시예들에서, 그래픽 프로세서는 다른 동작들을 위해 셰이더 메모리 공간을 사용한다. 일반적으로 말하면, 개시된 셰이더 메모리 공유는 유리하게는, 상위 레벨 메모리 공간(예를 들어, 디바이스 또는 시스템 메모리 공간)에서 코히어런스 포인트와 연관된 지연들을 요구하지 않으면서, 코-프로세서들 및 셰이더들 사이의 공유 및 스레드그룹들 사이의 공유를 용이하게 할 수 있다. 일부 실시예들에서, 그래픽 디바이스는 다음의 메모리 공간들을 구현한다: 스레드 공간(주어진 스레드에 대한 개인 공간, 그러나 일부 SIMD 치환 명령어들은 SIMD 그룹 내의 다른 스레드들에 대한 데이터에 대한 제한된 액세스를 허용할 수 있음), 스레드그룹 공간(주어진 스레드그룹에 대한 개인 공간), 셰이더 메모리 공간(동일한 셰이더 코어 상에서 실행되는 다수의 스레드그룹들에 그리고 잠재적으로 셰이더 코어에 대한 하나 이상의 코-프로세서들에 액세스가능하지만, 다른 셰이더 코어들에 의해 실행되는 스레드그룹들에는 액세스가능하지 않음), 및 다수의 셰이더 코어들 및 잠재적으로 컴퓨팅 디바이스(예를 들어, CPU) 상의 다른 회로에 액세스가능한 디바이스 공간.
특정 유형들의 데이터에 대해 디바이스 메모리 대신에 셰이더 메모리 공간을 사용하는 것은 유리하게는, 그 데이터에 대해 더 낮은 레이턴시들을 제공하거나, 더 높은 대역폭 구현들을 허용하거나, 코히어런시를 위한 자원 비용들을 감소시키거나, 또는 이들의 임의의 조합일 수 있다.
도 22a는 일부 실시예들에 따른, 셰이더 코어에 액세스가능한 예시적인 캐시-메모리 계층구조를 예시하는 블록도이다. 예시된 실시예에서, 셰이더 코어(2210) 및 다른 회로(2230)는 캐시/메모리 계층(2220)의 전부 또는 일부에 대한 액세스를 갖는다. 계층구조(2220)는 레지스터 파일, 다양한 캐시들(예를 들어, 명령어들 및/또는 데이터에 대한 하나 이상의 ALU들, L1, L2 등의 캐시들과 밀접하게 연관될 수 있는 L0) 및 메모리 회로들(예를 들어, 랜덤 액세스 메모리, 디스크-기반 드라이브들, 솔리드 스테이트 스토리지 등)과 같은 저레벨 회로를 포함할 수 있다. 상이한 메모리 공간들에 대한 코히어런시는 상이한 레벨들의 계층구조에서 강제될 수 있다. 일부 실시예들에서, 디바이스는 모든 저장소가 메모리 계층구조에 의해 지원되는 통합 메모리 아키텍처를 구현한다.
다른 회로(2230)는 다른 셰이더 코어들, 다른 그래픽 유닛들, CPU들과 같은 다른 프로세서들, SoC(system-on-a-chip)의 다른 회로 등을 포함할 수 있다. 회로(2230) 및 셰이더 코어(2210)는 일부 실시예들에서, 예를 들어, 개인 저레벨 캐시들을 이용하여 내부적으로 계층구조(2220)의 일부분을 구현할 수 있음에 유의한다.
셰이더 코어(2210)는, 일부 실시예들에서, 그래픽 프로세서에 포함된 다수의 셰이더 코어들 중 하나이다. 셰이더 코어(2210)는 다른 셰이더 코어들과 공유되지 않는 하나 이상의 L1 캐시들을 포함할 수 있다. 셰이더 코어(2210)는 SIMD 그룹들에 대한 명령어들을 병렬로 실행하도록 구성된 다수의 산술 로직 유닛(ALU)들을 포함할 수 있다. 셰이더 코어(2210)는 GPU의 최소 스케일링 유닛, 예를 들어, 그 자신의 셰이더 프로그램을 실행할 수 있는 최소 유닛일 수 있다. GPU는 단일 셰이더 코어만큼 적게 또는 더 큰 규모의 애플리케이션들에서 적절한 만큼 많은 셰이더 코어들을 포함할 수 있다. 컴퓨팅 작업의 경우, 셰이더 코어(2210)는 컴퓨팅 작업그룹들을 수신하고 작업그룹들로부터 내부 프로세싱 파이프라인들에 작업 항목들을 할당할 수 있다.
도 22b는 일부 실시예들에 따른, 다수의 셰이더 코어들 및 이들의 코-프로세서들에 액세스가능한 예시적인 캐시-메모리 계층구조를 도시하는 블록도이다. 예시된 예에서, 다수의 셰이더 코어들(2210A-2210N) 및 이들의 코-프로세서들(2240A-2240N)은 계층구조(2220)에 대한 액세스를 갖는다. RIA(190)는 코-프로세서(2240)의 일례이다. 텍스처 프로세싱 유닛(TPU)이 다른 예이다. 주어진 셰이더 코어(2210)는 다수의 코-프로세서들을 가질 수 있고, 코-프로세서들의 전부 또는 일부는 계층구조(2220)의 적어도 일부에 대한 액세스를 가질 수 있다.
일부 실시예들에서, 계층구조(2220)는 셰이더 코어(2210) 및 그의 코-프로세서(들)에 액세스가능하지만 다른 셰이더 코어들 또는 이들의 코-프로세서들에 액세스가능하지 않은 셰이더 메모리 공간에 대한 코히어런스 포인트를 포함한다. 다양한 실시예들이 본 명세서에서 스레드그룹 입도로 논의되지만, 코어들(2210), 코-프로세서들(2240) 또는 둘 모두가 셰이더 메모리 공간에 액세스하는 입도는 변할 수 있다(예를 들어, SIMD 그룹들, 스레드들 또는 스레드그룹들은 데이터를 버퍼링하기 위해 셰이더 메모리 공간을 사용할 수 있음).
도 23은 일부 실시예들에 따른, 예시적인 스레드그룹, 셰이더 코어 및 디바이스 메모리 공간들을 예시하는 도면이다. 예시된 실시예에서, 디바이스 메모리 공간(2330)은 다수의 셰이더 코어들(2210)에 의해 공유된다. 대조적으로, 예시된 실시예에서, 셰이더 코어 공간(2320)은 셰이더 코어(2210A)에 의해 실행되는 코-프로세서(2240A) 및 스레드그룹들에 액세스가능하지만, 셰이더 코어(2210N)와 같은 다른 셰이더 코어들에 의해 실행되는 스레드그룹들에는 액세스가능하지 않다(그러나, 셰이더 코어(2210N)는 명시적으로 도시되지 않은 그 자신의 셰이더 코어 공간을 구현할 수 있음에 유의한다). 예시된 실시예에서, 스레드그룹(TG) 메모리 공간들(2310A-2310M)은 셰이더 코어(2210A)에 의해 실행되는 단일 스레드그룹에 액세스가능한 개인 메모리 공간들이다. 일부 실시예들에서, 셰이더 코어(2210 A)는 또한 단일 스레드에 할당된 스레드 메모리 공간(도시되지 않음)을 구현한다.
도 24는 일부 실시예들에 따른, 상이한 메모리 공간들에 대한 예시적인 캐시 구성 및 코히어런스 포인트들을 예시하는 블록도이다. 예시된 실시예에서, 셰이더 코어(2210)는 L1 캐시(2410), 레지스터 파일(2420), 셰이더 파이프라인들(2450) 및 제어 회로(2440)를 포함한다. 이 예에서, 셰이더 코어(2210)는 또한 공유된 L2 캐시(2430)에 액세스하도록 구성된다.
예시된 예에서, 레지스터 파일(2420)은 스레드그룹 메모리 공간에 대한 코히어런스 포인트로서 기능하고, L1 캐시(2410)는 셰이더 코어 공간 코히어런스 포인트로서 기능한다. 코히어런스 포인트는 메모리 공간을 공유하는 모든 엔티티들(예를 들어, 셰이더 메모리 공간에 대한 스레드그룹들 및 코-프로세서들)이 동일한 캐싱된 데이터를 볼 레벨이다. L1 레벨에서 셰이더 메모리 공간을 구현하는 것은 (예를 들어, L2 캐시(2430)에 대한) 메모리 계층구조의 상위 레벨들에 대한 액세스들을 회피함으로써 (예를 들어, 스레드그룹들 사이에서) 데이터를 공유하는 데 필요한 메모리 레이턴시를 감소시킬 수 있다.
별개의 레지스터 파일을 포함하지 않는 통합 메모리 실시예들에서, L1 캐시는 스레드그룹, 스레드 개인 및 셰이더 코어 공간들에 대한 코히어런스 포인트로서 기능할 수 있다. 더 일반적으로, L1 캐시는 셰이더 코어(2210) 외부의 회로에 액세스가능하지 않은 모든 메모리 공간들에 대한 코히어런스 포인트일 수 있다. 일부 실시예들에서, 스레드 개인 데이터는 하나 이상의 L0 캐시들(및 필요에 따라 L1 캐시(2410))에 저장될 수 있다. 예시된 예에서, L2 캐시는 디바이스 메모리 공간에 대한 코히어런스 포인트로서 기능한다. 다른 실시예들에서, 예를 들어, L2 캐시가 균일하지 않으면, L3 캐시와 같은 상위 레벨의 캐시가 디바이스 메모리 공간에 대한 코히어런스 포인트로서 기능할 수 있다.
셰이더 파이프라인들(2450)은 일부 실시예들에서, 예를 들어, SIMD 그룹 내의 스레드들에 대한 공유 프로그램 카운터를 사용하여 SIMD 그룹들의 명령어들을 실행하도록 구성된다. 이러한 파이프라인들은 다수의 클록 사이클들에 걸쳐 동작들을 수행하도록 구성된 다수의 파이프라인 스테이지들을 포함할 수 있다.
일부 실시예들에서, 제어 회로(2440)는 상이한 메모리 공간들을 타겟팅하는 메모리 액세스 명령어들의 정확한 실행을 용이하게 하도록 구성된다. 예를 들어, 제어 회로는 셰이더 메모리 공간에 액세스하는 부하, 저장, 할당, 원자, 배리어 등의 명령어들을 적절히 실행하기 위한 회로를 포함할 수 있다. 예를 들어, 셰이더 메모리 공간에 액세스하는 부하들 및 저장소들은 다른 공간들로부터 데이터를 저장하거나 검색하지 않는다. 셰이더 메모리 공간에 대한 원자 동작들은 공간에 액세스할 수 있는 다른 스레드그룹들의 관점으로부터 스레드 그룹들이 메모리 액세스 동작들을 원자적으로 수행할 수 있게 한다. 예를 들어, L1 캐시가 셰이더 메모리 공간 코히어런스 포인트이면, 스레드그룹은 하나 이상의 L1 캐시 라인들을 획득 및 업데이트하여 동작들의 세트를 원자적으로 수행할 수 있다. 셰이더 메모리 공간에 대한 배리어 또는 펜스 동작들은 공간에 액세스할 수 있는 코드에서 배리어 펜스 이전의 모든 동작들이 배리어 이후의 동작들 전에 완료되게 한다.
셰이더 코어 공간은 전술된 광선 교차 동작들에 추가하여(또는 그 대신에) 다양한 버퍼링 동작들을 위해 사용될 수 있다. 예를 들어, 스레드 발산은, 예를 들어, 특정 그래픽 작업부하들에 대해, SIMD 프로세서들에서 충분히 활용되지 않는 공통 원인이다. 예를 들어, SIMD 프로세서들은 종종 분기 명령어들을 핸들링하기 위해 술어적(predicated) 실행을 사용한다. 술어적 실행에서, 분기 후의 경로들 둘 모두가 실행되지만, 현재 경로를 취하지 않은 스레드들은 그의 실행 동안 프리디케이트 오프된다(predicated off). 따라서, 동일한 SIMD 그룹 내의 일부 스레드들이 프리디케이트 오프되고 다른 스레드들이 프리디케이트 온되면, SIMD 파이프라인 하드웨어는 충분히 활용되지 않을 수 있다.
그러한 불충분한 활용을 해결하기 위한 하나의 방법은 상이한 경로들을 취하는 스레드들을 상이한 커널들로 이동시키는 것이다. 이는, 새로운 커널들을 시작하기 전에 결과 데이터를 디바이스 메모리에 기록하는 것을 수반할 수 있지만, 이는 성능에 실질적으로 영향을 미칠 수 있다. 일부 실시예들에서, SIMD 그룹들의 스레드들은 분할되고 (그리고 잠재적으로 발산 경로들을 실행한 후에 재형성되고) 새로운 SIMD 그룹들이 상이한 경로들에 대해 동일한 커널 내에서 실행된다. 예를 들어, 하기의 의사 코드를 고려한다:
위의 코드 예에서, 셰이더는 p < 0이 예측불가능하면 발산 문제들을 겪을 수 있으며, 동일한 SIMD 그룹의 일부 스레드들은 코드 블록 B를 실행하고(다른 스레드들은 프리디케이트 오프됨) SIMD 그룹의 다른 스레드들은 코드 블록 C를 실행한다. 일부 실시예들에서, 이러한 코드는 동일한 커널 내에서 3개의 상이한 셰이더들로 분할된다:
// 스레드들의 서브세트는 스레드 입도에서 다른 커널들에 대한 작업을 큐 업(queue up)함
// 로컬 셰이더 코어에서의 즉각적인 실행을 위해 로컬 simd 그룹들로 형성되도록
이 예에서, processTriangle 셰이더가 SIMD 그룹 A에 의해 실행되면, 하나의 동적으로 형성된 SIMD 그룹 B가 subdivideTriangle 경로를 실행할 수 있는 한편, 다른 동적으로 형성된 SIMD 그룹 C는 rasterizeTriangle 경로를 실행할 수 있다. SIMD 그룹 B는 (SIMD 그룹 C와 같이) processTriangle 셰이더를 실행한 다수의 상이한 SIMD 그룹들로부터의 스레드들을 포함할 수 있음에 유의한다.
일부 실시예들에서, 이러한 세밀한 로컬 디스패치는, 예를 들어, 디바이스 메모리에 대한 코히어런스 포인트에 데이터를 전송하기보다는, 중간 데이터를 저장하기 위해 셰이더 메모리 공간을 사용할 수 있다. 예를 들어, 위의 예에서, SIMD 그룹 A는 셰이더 코어 공간의 버퍼에 데이터를 저장할 수 있고, SIMD 그룹들 B 및 C는 이 버퍼로부터 중간 결과들을 판독할 수 있다. SIMD 그룹들 B 및 C가 상이한 스레드그룹들에 있기 때문에(예를 들어, 이들이 상이한 셰이더들을 실행하기 때문에), 셰이더 코어 공간은 데이터를 공유하기 위한 편리한 코히어런스 포인트를 제공한다.
도 25는 일부 실시예들에 따른, 셰이더 메모리 공간을 사용하기 위한 예시적인 방법을 예시하는 흐름도이다. 도 25에 예시된 방법은 다른 것들 중에서도, 본 명세서에 개시되는 컴퓨터 회로, 시스템들, 디바이스들, 요소들 또는 컴포넌트들 중 임의의 것과 함께 사용될 수 있다. 다양한 실시예들에서, 도시된 방법 요소들 중 일부는 동시에, 또는 도시된 바와는 상이한 순서로 수행될 수 있거나, 또는 생략될 수 있다. 부가적인 방법 요소들이 또한 원하는 대로 수행될 수 있다.
2510에서, 예시된 실시예에서, 제1 및 제2 그래픽 셰이더 코어들은 다수의 스레드그룹들의 명령어들을 실행한다. 예시된 실시예에서, 이는 제1 그래픽 셰이더 코어에 의해, 제1 셰이더 프로그램을 실행하도록 구성된 다수의 단일 명령어 다중 데이터(SIMD) 그룹들을 갖는 제1 스레드그룹, 및 상이한 제2 셰이더 프로그램을 실행하도록 구성된 다수의 SIMD 그룹들을 갖는 제2 스레드그룹 둘 모두를 실행하는 것을 포함한다. 일부 실시예들에서, 동일한 셰이더 프로그램을 실행하는 상이한 스레드 그룹들이 또한 셰이더 메모리 공간에 액세스할 수 있음에 유의한다. 더 일반적으로, 일부 실시예들에서, 셰이더 메모리 공간은 동일한 셰이더 코어 상에서 실행되는 임의의 스레드 그룹으로부터의 임의의 SIMD 그룹으로부터의 임의의 스레드에 액세스가능하다.
2520에서, 예시된 실시예에서, 제어 회로는 제1 및 제2 스레드그룹들을 포함하여 제1 그래픽 셰이더 코어에 의해 실행되는 스레드그룹들에 액세스가능하지만 제2 그래픽 셰이더 코어에 의해 실행되는 스레드그룹들에 액세스가능하지 않은 셰이더 메모리 공간에 따라 메모리 회로에 저장된 데이터에 대한 액세스를 제공한다.
일부 실시예들에서, 제1 그래픽 셰이더 코어(예를 들어, L1캐시(2410))의 제1 캐시는 셰이더 메모리 공간에 대한 코히어런스 포인트이고, 장치 내의 상위 레벨의 제2 캐시(예를 들어, L2 캐시(2430))는 디바이스 메모리 공간에 대한 코히어런스 포인트이다.
일부 실시예들에서, 제어 회로는 또한, 제1 스레드그룹에 액세스가능하지만 임의의 다른 스레드그룹들에 액세스가능하지 않은 제1 스레드그룹에 대한 스레드그룹 메모리 공간, 단일 스레드에 액세스가능한 스레드 메모리 공간 및 제1 및 제2 그래픽 셰이더 코어들 둘 모두에 의해 실행되는 스레드그룹들에 액세스가능한 디바이스 메모리 공간을 포함하는 상이한 공유 입도들을 갖는 추가 메모리 공간들에 따라 메모리 회로에 저장된 데이터에 대한 액세스를 제공한다.
일부 실시예들에서, 셰이더 메모리 공간은 또한 제1 그래픽 셰이더 코어에 대한 하나 이상의 코-프로세서들에 액세스가능하다. 예를 들어, 하나 이상의 코-프로세서들은 RIA(190)를 포함한다. 일부 실시예들에서, RIA(190)는: 제1 스레드그룹(예를 들어, 클리크-A)의 명령어에 기초하여, 광선이 교차에 대해 테스트될 하나 이상의 프리미티브들을 결정하기 위해 공간적으로 조직화된 데이터 구조를 순회하고, 광선에 대해 하나 이상의 프리미티브들을 테스트하기 위해 제2 스레드그룹(예를 들어, 클리크-T)을 개시하도록 구성되며, 여기서 제1 스레드그룹 및 제2 스레드그룹 둘 모두는 셰이더 메모리 공간에 저장된 광선 정보에 대해 동작한다.
일부 실시예들에서, 제1 그래픽 셰이더 코어는 셰이더 메모리 공간을 타겟팅하는 부하, 저장 및 원자성 명령어들을 실행하도록 구성된다.
일부 실시예들에서, 제1 그래픽 셰이더 코어는 동적으로 형성된 SIMD 그룹의 스레드들에 의해 추가로 프로세싱될 중간 그래픽 작업을 스레드 입도로 저장하기 위해 셰이더 메모리 공간을 사용하기 위해 제1 스레드그룹의 제1 SIMD 그룹을 실행하도록 구성된다. 동적으로 형성된 SIMD 그룹은 조건부 제어 전달 명령어에 대해 동일한 조건 결과를 갖는 것으로 결정된 스레드들의 세트를 포함할 수 있다.
예시적인 디바이스
이제, 도 26을 참조하면, 디바이스(2600)의 예시적인 실시예를 예시하는 블록도가 도시되어 있다. 일부 실시예들에서, 디바이스(2600)의 요소들은 시스템 온 칩 내에 포함될 수 있다. 일부 실시예들에서, 디바이스(2600)는 배터리-전력이 공급될 수 있는 모바일 디바이스 내에 포함될 수 있다. 따라서, 디바이스(2600)에 의한 전력 소비는 중요한 설계 고려사항일 수 있다. 예시된 실시예에서, 디바이스(2600)는 패브릭(2610), 컴퓨팅 컴플렉스(2620), 입/출력(I/O) 브리지(2650), 캐시/메모리 제어기(2645), 그래픽 유닛(150) 및 디스플레이 유닛(2665)을 포함한다. 일부 실시예들에서, 디바이스(2600)는 예시된 컴포넌트들, 예컨대 비디오 프로세서 인코더들 및 디코더들, 이미지 프로세싱 또는 인식 요소들, 컴퓨터 비전 요소들 등에 추가로 및/또는 그 대신에 다른 컴포넌트들(도시되지 않음)을 포함할 수 있다.
패브릭(2610)은 다양한 상호접속부들, 버스들, MUX들, 제어기들 등을 포함할 수 있고, 디바이스(2600)의 다양한 요소들 사이의 통신을 용이하게 하도록 구성될 수 있다. 일부 실시예들에서, 패브릭(2610)의 부분들은 다양한 상이한 통신 프로토콜들을 구현하도록 구성될 수 있다. 다른 실시예들에서, 패브릭(2610)은 단일 통신 프로토콜을 구현할 수 있고 패브릭(2610)에 결합된 요소들은 단일 통신 프로토콜로부터 다른 통신 프로토콜들로 내부적으로 변환할 수 있다.
예시된 실시예에서, 컴퓨팅 컴플렉스(2620)는 버스 인터페이스 유닛(BIU)(2625), 캐시(2630), 및 코어들(2635 및 2640)을 포함한다. 다양한 실시예들에서, 컴퓨팅 컴플렉스(2620)는 다양한 수의 프로세서들, 프로세서 코어들 및/또는 캐시들을 포함할 수 있다. 예를 들어, 컴퓨팅 컴플렉스(2620)는 1, 2, 또는 4개의 프로세서 코어, 또는 임의의 다른 적합한 수를 포함할 수 있다. 일 실시예에서, 캐시(2630)는 세트 연관 L2 캐시이다. 일부 실시예들에서, 코어(2635 및/또는 2640)는 내부 명령어 및/또는 데이터 캐시를 포함할 수 있다. 일부 실시예들에서, 패브릭(2610), 캐시(2630), 또는 디바이스(2600) 내의 다른 곳에서 코히어런시 유닛(도시되지 않음)은 디바이스(2600)의 다양한 캐시들 사이의 코히어런시를 유지하도록 구성될 수 있다. BIU(2625)는 컴퓨팅 컴플렉스(2620)와 디바이스(2600)의 다른 요소들 사이의 통신을 관리하도록 구성될 수 있다. 코어들(2635 및 2640)과 같은 프로세서 코어들은 운영 체제 명령어들 및 사용자 애플리케이션 명령어들을 포함할 수 있는 특정 명령어 세트 아키텍처(ISA)의 명령어들을 실행하도록 구성될 수 있다.
캐시/메모리 제어기(2645)는 패브릭(2610)과 하나 이상의 캐시 및/또는 메모리 사이에서의 데이터의 전송을 관리하도록 구성될 수 있다. 예를 들어, 캐시/메모리 제어기(2645)는 L3 캐시에 결합될 수 있고, 이는 이어서 시스템 메모리에 결합될 수 있다. 다른 실시예들에서, 캐시/메모리 제어기(2645)는 메모리에 직접 결합될 수 있다. 일부 실시예들에서, 캐시/메모리 제어기(2645)는 하나 이상의 내부 캐시를 포함할 수 있다.
본 명세서에 사용되는 바와 같이, 용어 "에 결합된"은 요소들 사이의 하나 이상의 연결부를 나타낼 수 있고, 결합은 개재 요소들을 포함할 수 있다. 예를 들어, 도 26에서, 그래픽 유닛(150)은 패브릭(2610) 및 캐시/메모리 제어기(2645)를 통해 메모리에 "결합된"것으로 기술될 수 있다. 대조적으로, 도 26의 예시된 실시예에서, 그래픽 유닛(150)은 개재 요소들이 없기 때문에 패브릭(2610)에 "직접 결합"된다.
그래픽 유닛(150)은 하나 이상의 프로세서 및/또는 하나 이상의 그래픽 프로세싱 유닛(GPU)을 포함할 수 있다. 그래픽 유닛(150)은 예를 들어 OPENGL®, Metal, 또는 DIRECT3D® 명령어들과 같은 그래픽-오리엔티드 명령어들을 수신할 수 있다. 그래픽 유닛(150)은 특수 GPU 명령어들을 실행하거나, 수신된 그래픽-오리엔티드 명령어들에 기초하여 다른 동작들을 수행할 수 있다. 그래픽 유닛(150)은 일반적으로 데이터의 큰 블록들을 병렬로 프로세싱하도록 구성될 수 있고, 디스플레이로의 출력을 위해 프레임 버퍼 내에 이미지들을 구축할 수 있다. 그래픽 유닛(150)은 하나 이상의 그래픽 프로세싱 파이프라인들에서 변환, 조명, 삼각형, 및/또는 렌더링 엔진들을 포함할 수 있다. 그래픽 유닛(150)은 디스플레이 이미지들에 대한 픽셀 정보를 출력할 수 있다. 다양한 실시예들에서, 프로그래밍가능 셰이더(160)는 픽셀 태스크들, 정점 태스크들, 및 컴퓨팅 태스크들(그래픽-관련일 수 있거나 그렇지 않을 수 있음)을 포함할 수 있는 그래픽 프로그램들을 실행하도록 구성된 고도의 병렬 실행 코어들을 포함할 수 있다.
일부 실시예들에서, 그래픽 유닛(150)은 본 명세서에서 논의되는 회로를 포함한다. 다른 실시예들에서, 개시된 회로는 예를 들어 CPU와 같은 다른 유형들의 프로세서들로 구현될 수 있다.
디스플레이 유닛(2665)은 프레임 버퍼로부터 데이터를 판독하고 디스플레이를 위한 픽셀 값들의 스트림을 제공하도록 구성될 수 있다. 디스플레이 유닛(2665)은 일부 실시예들에서 디스플레이 파이프라인으로서 구성될 수 있다. 또한, 디스플레이 유닛(2665)은 출력 프레임을 생성하기 위해 다수의 프레임들을 혼합하도록 구성될 수 있다. 또한, 디스플레이 유닛(2665)은 사용자 디스플레이(예를 들어, 터치스크린 또는 외부 디스플레이)에 결합하기 위한 하나 이상의 인터페이스들(예를 들어, MIPI® 또는 임베디드 디스플레이 포트(eDP))을 포함할 수 있다.
I/O 브리지(2650)는, 예를 들어, 범용 직렬 버스(USB) 통신, 보안, 오디오, 및/또는 저전력 상시-온 기능을 구현하도록 구성된 다양한 요소들을 포함할 수 있다. I/O 브리지(2650)는 또한 예를 들어 펄스폭 변조(PWM), 범용 입/출력(GPIO), 직렬 주변 인터페이스(SPI), 및/또는 인터-집적 회로(I2C)와 같은 인터페이스들을 포함할 수 있다. 다양한 유형의 주변기기 및 디바이스들이 I/O 브리지(2650)를 통해 디바이스(2600)에 결합될 수 있다.
일부 실시예들에서, 디바이스(2600)는 패브릭(2610) 또는 I/O 브리지(2650)에 연결될 수 있는 네트워크 인터페이스 회로(명시적으로 도시되지 않음)를 포함한다. 네트워크 인터페이스 회로는 유선, 무선, 또는 둘 모두일 수 있는 다양한 네트워크를 통해 통신하도록 구성될 수 있다. 예를 들어, 네트워크 인터페이스 회로는 유선 로컬 영역 네트워크, (예를 들어, WiFi를 통한) 무선 로컬 영역 네트워크, 또는 광역 네트워크(예를 들어, 인터넷 또는 가상 사설 네트워크)를 통해 통신하도록 구성될 수 있다. 일부 실시예들에서, 네트워크 인터페이스 회로는 하나 이상의 무선 액세스 기술들을 사용하는 하나 이상의 셀룰러 네트워크들을 통해 통신하도록 구성된다. 일부 실시예들에서, 네트워크 인터페이스 회로는 디바이스-대-디바이스 통신(예를 들어, 블루투스 또는 WiFi 직접) 등을 사용하여 통신하도록 구성된다. 다양한 실시예들에서, 네트워크 인터페이스 회로는 다양한 유형들의 다른 디바이스들 및 네트워크들에 대한 접속성을 디바이스(2600)에 제공할 수 있다.
예시적인 애플리케이션들
이제 도 27을 참조하면, 다양한 유형들의 시스템은 위에서 논의된 회로들, 디바이스들, 또는 시스템 중 임의의 것을 포함할 수 있다. 본 명세서에 기술된 기술들 중 하나 이상을 통합하거나 달리 활용할 수 있는 시스템 또는 디바이스(2700)는 광범위한 영역들에서 활용될 수 있다. 예를 들어, 시스템 또는 디바이스(2700)는 데스크톱 컴퓨터(2710), 랩톱 컴퓨터(2720), 태블릿 컴퓨터(2730), 셀룰러 또는 모바일 폰(2740), 또는 텔레비전(2750)(또는 텔레비전에 결합된 셋톱 박스)과 같은 시스템들의 하드웨어의 일부로서 활용될 수 있다.
유사하게, 개시된 요소들은 스마트워치 또는 건강 모니터링 디바이스와 같은 웨어러블 디바이스(2760)에서 활용될 수 있다. 많은 실시예들에서, 스마트 워치들은 다양한 상이한 기능들 - 예를 들어, 이메일에 대한 액세스, 셀룰러 서비스, 캘린더, 건강 모니터링 등을 구현할 수 있다. 웨어러블 디바이스는 또한 단지 건강 모니터링 기능들, 예를 들어, 사용자의 바이탈 사인을 모니터링하는 것, 접촉 추적과 같은 전염병성 기능들을 수행하는 것, 긴급 의료 서비스에 대한 통신을 제공하는 것 등을 수행하도록 설계될 수 있다. 목에 착용되는 디바이스들, 인체 내에 이식가능한 디바이스들, 증강 및/또는 가상 현실에 기초한 것들과 같이 컴퓨터 생성 현실 경험들을 제공하도록 설계된 안경 또는 헬멧 등을 포함하는 다른 유형들의 디바이스들이 또한 고려된다.
시스템 또는 디바이스(2700)는 또한 다양한 다른 콘텍스트들에서 사용될 수 있다. 예를 들어, 시스템 또는 디바이스(2700)는 전용 서버와 같은 서버 컴퓨터 시스템의 맥락에서 또는 클라우드-기반 서비스(2770)를 구현하는 공유 하드웨어 상에서 활용될 수 있다. 더 추가로, 시스템 또는 디바이스(2700)는 가정에서 일반적으로 발견되는 디바이스들(2780), 예를 들어, 냉장고들, 서모스탯들, 보안 카메라들 등을 포함하는 광범위한 전문화된 일상적인 디바이스들에서 구현될 수 있다. 그러한 디바이스들의 상호접속부는 종종 "사물 인터넷(Internet of Things)"(IoT)으로 지칭된다. 요소들은 또한 다양한 운송 모드들에서 구현될 수 있다. 예를 들어, 시스템 또는 디바이스(2700)는 다양한 유형들의 차량들(2790)의 제어 시스템들, 안내 시스템들, 엔터테인먼트 시스템들 등에 이용될 수 있다.
도 27에 예시된 애플리케이션들은 단지 예시적이며, 개시된 시스템들 또는 디바이스들의 잠재적인 미래의 애플리케이션들을 제한하도록 의도되지 않는다. 다른 예시적인 애플리케이션들은 제한 없이 휴대용 게이밍 디바이스들, 음악 플레이어들, 데이터 저장 디바이스들, 무인 항공기들 등을 포함한다.
예시적인 컴퓨터 판독가능 매체
본 개시내용은 위에서 상세하게 다양한 예시적인 회로들을 기술하였다. 본 개시내용은 그러한 회로를 포함하는 실시예들뿐만 아니라, 그러한 회로를 특정하는 설계 정보를 포함하는 컴퓨터 판독가능 저장 매체도 포괄하고자 하는 것이다. 따라서, 본 개시내용은 개시된 회로를 포함하는 장치뿐만 아니라 개시된 회로를 포함하는 하드웨어(예를 들어, 집적 회로)를 생성하도록 구성된 제조 시스템에 의해 인식되는 포맷으로 회로를 특정하는 저장 매체를 포괄하는 청구범위를 지원하도록 의도된다. 그러한 저장 매체에 대한 청구범위는, 예를 들어 회로 설계를 생성하지만 그 자체가 설계를 제조하지는 않는 엔티티를 포괄하도록 의도된다.
도 28은 일부 실시예들에 따른, 회로 설계 정보를 저장하는 예시적인 비일시적 컴퓨터 판독가능 저장 매체를 예시한 블록도이다. 예시된 실시예에서, 반도체 제조 시스템(2820)은 비일시적 컴퓨터 판독가능 매체(2810) 상에 저장된 설계 정보(2815)를 프로세싱하고 설계 정보(2815)에 기초하여 집적 회로(2830)를 제조하도록 구성된다.
비일시적 컴퓨터 판독가능 저장 매체(2810)는 다양한 적절한 타입들의 메모리 디바이스들 또는 저장 디바이스들 중 임의의 것을 포함할 수 있다. 비일시적 컴퓨터 판독가능 저장 매체(2810)는, 설치 매체, 예를 들어, CD-ROM, 플로피 디스크들, 또는 테이프 디바이스; DRAM, DDR RAM, SRAM, EDO RAM, 램버스(Rambus) RAM 등과 같은 컴퓨터 시스템 메모리 또는 랜덤 액세스 메모리; 플래시, 자기 매체, 예를 들어, 하드 드라이브, 또는 광학 저장소와 같은 비휘발성 메모리; 레지스터들, 또는 다른 유사한 타입들의 메모리 요소들 등일 수 있다. 비일시적 컴퓨터 판독가능 저장 매체(2810)는 또한 다른 유형들의 비일시적 메모리 또는 이들의 조합들을 포함할 수 있다. 비일시적 컴퓨터 판독가능 저장 매체(2810)는 상이한 위치들, 예를 들어, 네트워크를 통해 접속되는 상이한 컴퓨터 시스템들에 상주할 수 있는 둘 이상의 메모리 매체들을 포함할 수 있다.
설계 정보(2815)는, 제한 없이, VHDL, Verilog, SystemC, Syste㎷erilog, RHDL, M, MyHDL 등과 같은 하드웨어 설명 언어들을 포함하는 다양한 적절한 컴퓨터 언어들 중 임의의 것을 사용하여 특정될 수 있다. 설계 정보(2815)는 집적 회로(2830)의 적어도 일부분을 제조하기 위해 반도체 제조 시스템(2820)에 의해 사용가능할 수 있다. 설계 정보(2815)의 포맷은 적어도 하나의 반도체 제조 시스템(2820)에 의해 인식될 수 있다. 일부 실시예들에서, 설계 정보(2815)는 또한 집적 회로(2830)의 합성 및/또는 레이아웃을 특정하는 하나 이상의 셀 라이브러리들을 포함할 수 있다. 일부 실시예들에서, 설계 정보는 셀 라이브러리 요소들 및 그들의 접속성을 특정하는 넷리스트(netlist)의 형태로 전체적으로 또는 부분적으로 특정된다. 단독으로 취해진 설계 정보(2815)는 대응하는 집적 회로의 제조를 위한 충분한 정보를 포함할 수 있거나 포함하지 않을 수 있다. 예를 들어, 설계 정보(2815)는 제조될 회로 요소들을 특정할 수 있지만 그들의 물리적 레이아웃이 아닐 수 있다. 이러한 경우에, 설계 정보(2815)는 특정된 회로를 실제로 제조하기 위해 레이아웃 정보와 조합될 필요가 있을 수 있다.
다양한 실시예들에서, 집적 회로(2830)는 메모리들, 아날로그 또는 혼합 신호 회로들 등과 같은 하나 이상의 맞춤형 매크로셀들을 포함할 수 있다. 그러한 경우들에서, 설계 정보(2815)는 포함된 매크로셀들에 관련된 정보를 포함할 수 있다. 그러한 정보는, 제한 없이, 개략적 캡처 데이터베이스, 마스크 설계 데이터, 거동 모델들, 및 디바이스 또는 트랜지스터 레벨 넷리스트들을 포함할 수 있다. 본 명세서에 사용되는 바와 같이, 마스크 설계 데이터는 그래픽 데이터 시스템(GDSII), 또는 임의의 다른 적합한 포맷에 따라 포맷팅될 수 있다.
반도체 제조 시스템(2820)은 집적 회로들을 제조하도록 구성된 다양한 적절한 요소들 중 임의의 것을 포함할 수 있다. 이는, 예를 들어 반도체 재료들을 (예를 들어, 마스킹을 포함할 수 있는 웨이퍼 상에) 적층시키는 것, 재료들을 제거하는 것, 적층된 재료들의 형상을 변경시키는 것, 재료들을 (예를 들어, 재료들을 도핑하거나 또는 자외선 처리를 사용하여 유전 상수들을 변경함으로써) 변경시키는 것 등을 위한 요소들을 포함할 수 있다. 반도체 제조 시스템(2820)은 또한 정확한 동작을 위해 제조된 회로들의 다양한 테스트를 수행하도록 구성될 수 있다.
다양한 실시예들에서, 집적 회로(2830)는 설계 정보(2815)에 의해 특정된 회로 설계에 따라 동작하도록 구성되며, 이는 본 명세서에 기술된 기능 중 임의의 것을 수행하는 것을 포함할 수 있다. 예를 들어, 집적 회로(2830)는 도 1b, 도 3a, 도 6, 도 7, 도 14a, 도 19b, 도 22a 및 도 22b, 도 24 또는 도 26에 도시된 다양한 요소들 중 임의의 것을 포함할 수 있다. 추가로, 집적 회로(2830)는 다른 컴포넌트들과 함께 본 명세서에 기술된 다양한 기능들을 수행하도록 구성될 수 있다. 추가로, 본 명세서에 설명된 기능은 다수의 연결된 집적 회로들에 의해 수행될 수 있다.
본 명세서에 사용되는 바와 같이, "~하도록 구성된 회로의 설계를 특정하는 설계 정보"라는 형태의 문구는 요소가 충족되기 위해 해당 회로가 제조되어야 한다는 것을 의미하지 않는다. 오히려, 이 문구는 설계 정보가, 제조 시에, 표시된 액션들을 수행하도록 구성될 것이거나 특정된 컴포넌트들을 포함할 회로를 설명한다는 것을 표시한다.
하기의 번호가 매겨진 항목들은 본 명세서에 개시된 다양한 비제한적인 실시예들을 나타낸다:
세트 A
A1. 장치로서,
그래픽 장면 내의 하나 이상의 광선들의 세트에 대한 원점 및 방향 정보를 나타내는 광선 교차 명령어를 실행하도록 구성된 그래픽 셰이더 회로;
광선 교차 회로를 포함하고, 광선 교차 회로는,
광선 교차 명령어에 응답하여, 공간적으로 조직화된 가속도 데이터 구조 내의 다수의 노드들을 순회하고 - 데이터 구조의 노드들은 그래픽 장면 내의 경계 영역들에 대응하는 좌표들을 나타냄 -;
순회 동안 경계 영역 시험 회로를 사용하여, 광선들의 세트 내의 광선이 데이터 구조의 노드에 의해 표시되는 다수의 상이한 경계 영역들과 교차하는지 여부를 병렬로 테스트하도록 구성되고;
장치는, 순회 및 테스트들에 기초하여, 하나 이상의 광선들의 세트 내의 각각의 광선들에 의해 교차되는 하나 이상의 그래픽 프리미티브들을 특정하는 정보를 결정하도록 구성되고,
그래픽 셰이더 회로는 교차하는 광선들에 기초하여 특정된 하나 이상의 그래픽 프리미티브들을 셰이딩하도록 구성되는, 장치.
A2. 세트 A 내의 임의의 이전 항목에 있어서, 경계 영역 테스트 회로는 다수의 상이한 경계 영역들에 대해 다수의 광선들을 병렬로 테스트하도록 구성되는, 장치.
A3. 세트 A 내의 임의의 이전 항목에 있어서, 경계 영역 테스트 회로는,
광선이 경계 영역과 교차하는지 여부를 결정하도록 구성되고, 다수의 경계 영역들에 대한 테스트를 병렬로 수행하도록 구성된 다수의 경계 영역 테스터들; 및
경계 영역 테스터들에 의해 공유되는 출력들을 갖는 하나 이상의 동작들을 수행하도록 구성된 공통 노드 계산 회로를 포함하는, 장치.
A4. 세트 A 내의 임의의 이전 항목에 있어서, 경계 영역 테스트 회로는,
경계 영역 데이터 캐시;
광선 데이터 캐시; 및
테스트되는 광선의 원점까지의 거리에 기초하여 다수의 경계 영역 테스터들로부터의 교차 결과들을 순서화하도록 구성된 결과 순서화 회로를 추가로 포함하는, 장치.
A5. 세트 A 내의 임의의 이전 항목에 있어서, 장치는 그래픽 셰이더 회로 및 광선 교차 회로에 액세스가능한 셰이더 메모리 공간에 하나 이상의 광선들의 세트에 대한 광선 데이터를 저장하도록 구성되는, 장치.
A6. 세트 A 내의 임의의 이전 항목에 있어서, 그래픽 셰이더 회로는 특정된 하나 이상의 그래픽 프리미티브들의 셰이딩에 기초하여 하나 이상의 추가 광선들을 생성하고, 하나 이상의 추가 광선들에 대한 광선 교차 명령어를 실행하도록 구성되는, 장치.
A7. 세트 A 내의 임의의 이전 항목에 있어서, 가속도 데이터 구조는 계층적 구조이고, 제1 노드는 하위 레벨 가속도 데이터 구조에서 자식 노드를 갖는 상위 레벨 가속도 데이터 구조의 리프 노드이고;
하위 레벨 가속도 데이터 구조는 그래픽 장면에서 여러번 인스턴스화되는 그래픽 모델에 대응하고;
광선 교차 회로는 제1 노드에 도달하는 하나 이상의 광선들의 좌표들을 그래픽 모델의 인스턴스의 모델 공간으로 변환하기 위해 SIMD 그룹을 형성하도록 구성되는, 장치.
A8. 세트 A 내의 임의의 이전 항목에 있어서, 가속도 데이터 구조의 하나 이상의 노드들은 4개 이상의 경계 영역들 및 4개 이상의 자식 노드들을 포함하는, 장치.
A9. 세트 A 내의 임의의 이전 항목에 있어서,
가속도 데이터 구조는 다수의 프리미티브들이 자식들로서 표시되는 경계 영역을 갖는 노드를 포함하고;
가속도 데이터 구조는 다수의 경계 영역들이 부모로서 표시되는 프리미티브를 포함하는, 장치.
A10. 세트 A 내의 임의의 이전 항목에 있어서, 광선 교차 회로는 데이터 구조의 리프 노드에 대응하는 프리미티브에 대해 광선들의 세트를 테스트하기 위해 SIMD 그룹을 형성하도록 구성되는, 장치.
A11. 세트 A 내의 임의의 이전 항목에 있어서, 광선 교차 회로는, 그룹화 회로를 사용하여, 광선들이 다음에 타겟팅하는 데이터 구조의 노드에 기초하여 광선들의 세트의 부분들을 다수의 그룹들로 그룹화하도록 구성되고, 테스트는 그룹들에 기초하는, 장치.
A12. 세트 A 내의 임의의 이전 항목에 있어서, 장치는 컴퓨팅 디바이스이고, 컴퓨팅 디바이스는,
광선 교차 회로를 포함하는 그래픽 프로세서;
중앙 프로세싱 유닛; 및
네트워크 인터페이스 회로를 포함하는, 장치.
A13. 세트 A 내의 임의의 이전 항목의 장치에 의해 수행되는 동작들의 임의의 조합을 포함하는 방법.
A14. 설계에 따른 회로를 생성하기 위해 설계 정보를 사용하도록 구성되는 반도체 제조 시스템에 의해 인식되는 포맷으로 하드웨어 집적 회로의 적어도 일부분의 설계를 특정하는 설계 정보를 저장하는 비일시적 컴퓨터 판독가능 저장 매체로서, 설계 정보는, 회로가,
항목 A1 내지 항목 A12에 언급된 요소들의 임의의 조합을 포함하는 것을 특정하는, 비일시적 컴퓨터 판독가능 저장 매체.
***
세트 B
B1. 장치로서,
광선 교차 회로를 포함하고, 광선 교차 회로는,
그래픽 장면 내의 광선들의 세트에서 다수의 광선들에 대한 원점 및 방향 정보를 나타내는 하나 이상의 광선 교차 요청들을 수신하고;
광선들이 경계 영역들과 교차하는지 여부를 결정하기 위해, 노드들이 그래픽 장면의 경계 영역들에 대응하는 좌표들을 나타내는 공간적으로 조직화된 가속도 데이터 구조의 다수의 노드들을 순회하도록 구성되고; 이는,
그룹화 회로에 의해, 광선들이 다음에 타겟팅하는 데이터 구조의 노드에 기초하여 광선들의 세트의 부분들을 다수의 그룹들로 그룹화하고;
그룹화에 기초하여 경계 영역 테스트 회로에 의해, 제1 그룹 내의 광선들이 제1 노드의 하나 이상의 경계 영역들과 교차하는지 여부를 결정하기 위해 제1 노드를 타겟팅하는 광선들의 세트의 서브세트를 포함하는 제1 그룹을 프로세싱하는 것을 포함하는, 장치.
B2. 세트 B 내의 임의의 이전 항목에 있어서, 광선 교차 회로는 클록 사이클 동안 광선들의 하나 이상의 그룹들을 선택하고 경계 영역 검사 회로에 대한 발행을 위해 광선들의 그룹들 내의 광선들을 스케줄링하도록 구성되는, 장치.
B3. 세트 B 내의 임의의 이전 항목에 있어서, 선택은 광선들의 상이한 그룹들에서의 가장 오래된 광선에 기초하는, 장치.
B4. 세트 B 내의 임의의 이전 항목에 있어서, 그룹화는 하나 이상의 데이터 캐시들 내에 캐싱된 경계 영역 데이터에 대한 액세스들에 대한 시간적 국부성을 제공하는, 장치.
B5. 세트 B 내의 임의의 이전 항목에 있어서, 광선 교차 회로는 가속도 데이터 구조의 리프 노드들 및 가속도 데이터 구조의 내부 노드들에 대한 별개의 그룹화 회로를 포함하는, 장치.
B6. 세트 B 내의 임의의 이전 항목에 있어서, 제1 그룹은 링크된 리스트에 의해 특정되는, 장치.
B7. 세트 B 내의 임의의 이전 항목에 있어서, 광선 큐의 엔트리들은 대응하는 광선의 현재 그룹에 대한 링크된 리스트 내의 다음 광선을 가리키는 필드를 포함하는, 장치.
B8. 세트 B 내의 임의의 이전 항목에 있어서, 제1 그룹은 셰이더 프로세서에 의해 프로세싱되는 다수의 상이한 SIMD 그룹들로부터의 광선들을 포함하는, 장치.
B9. 세트 B 내의 임의의 이전 항목에 있어서, 광선 교차 회로는 광선이 가속도 데이터 구조의 레벨들 사이를 순회할 때마다 광선을 새로운 그룹에 할당하도록 구성되는, 장치.
B10. 세트 B 내의 임의의 이전 항목에 있어서, 광선 교차 회로는 가속도 데이터 구조의 깊이-우선 탐색을 위해 광선에 대한 순회 스택을 구현하고, 광선 교차 회로는 순회 스택의 최상부가 변할 때마다 새로운 그룹에 광선을 할당하도록 구성되는, 장치.
B11. 세트 B 내의 임의의 이전 항목에 있어서, 광선에 대한 그룹을 결정하기 위해, 광선 교차 회로는,
그룹들의 세트를 결정하기 위한 해시 함수에 대한 입력으로서 광선에 의해 타겟팅된 다음 노드에 기초하는 키를 사용하고;
세트 내의 할당된 그룹이 키와 매칭하는지 여부를 결정하기 위해 그룹들의 세트를 탐색하도록 구성되는, 장치.
B12. 세트 B 내의 임의의 이전 항목에 있어서, 광선 교차 회로는 임의의 현재 할당된 그룹과 매칭하지 않는 광선에 대한 새로운 그룹을 할당하도록 구성되는, 장치.
B13. 세트 B 내의 임의의 이전 항목에 있어서, 경계 영역 테스트 회로는 노드의 다수의 경계 영역들에 대한 광선을 병렬로 테스트하도록 구성된 병렬 테스트 회로를 포함하는, 장치.
B14. 방법으로서,
세트 B 내의 임의의 이전 항목의 회로에 의해 수행되는 동작들의 임의의 조합을 포함하는, 방법.
B15. 설계에 따른 회로를 생성하기 위해 설계 정보를 사용하도록 구성되는 반도체 제조 시스템에 의해 인식되는 포맷으로 하드웨어 집적 회로의 적어도 일부분의 설계를 특정하는 설계 정보를 저장하는 비일시적 컴퓨터 판독가능 저장 매체로서, 설계 정보는, 회로가,
항목 B1 내지 항목 B13에 언급된 요소들의 임의의 조합을 포함하는 것을 특정하는, 비일시적 컴퓨터 판독가능 저장 매체.
***
세트 C
C1. 장치로서,
하나 이상의 그래픽 프로세서들을 포함하며, 하나 이상의 그래픽 프로세서들은,
렌더링될 그래픽 장면 내의 다수의 그래픽 프리미티브들에 대한 데이터에 액세스하고;
데이터 구조의 일부 노드들이 그래픽 프리미티브들을 나타내고 일부 노드들이 그래픽 장면 내의 경계 영역들의 좌표들을 나타내는 공간적으로 조직화된 데이터 구조를 생성하고
- 여기서,
공간적으로 조직화된 데이터 구조는 다수의 프리미티브들이 자식들로서 표시되는 경계 영역을 갖는 노드를 포함하고;
공간적으로 조직화된 데이터 구조는 다수의 경계 영역들이 부모로서 표시되는 프리미티브를 포함함 -;
그래픽 장면 내의 광선들이 프리미티브들과 교차하는지 여부를 결정하기 위해 공간적으로 조직화된 데이터 구조를 순회하고;
결정에 기초하여 교차된 프리미티브를 셰이딩하도록 구성되는, 장치.
C2. 세트 C 내의 임의의 이전 항목에 있어서, 하나 이상의 그래픽 프로세서들은 오리지널 표현보다 더 적은 수의 비트들을 사용하여 제1 경계 영역을 표현하기 위해 공간적으로 조직화된 데이터 구조에서 제1 경계 영역을 나타내는 정보를 양자화하도록 구성되는, 장치.
C3. 세트 C 내의 임의의 이전 항목에 있어서, 하나 이상의 그래픽 프로세서들은 양자화된 표현이 제1 경계 영역 이상인 영역을 나타내도록 양자화를 수행하고, 이에 의해, 제1 경계 영역에 대한 거짓 네거티브 교차 결과들을 방지하도록 구성되는, 장치.
C4. 세트 C 내의 임의의 이전 항목에 있어서, 공간적으로 조직화된 데이터 구조는, 하나 이상의 프리미티브들을 나타내는 제1 노드에 대해,
하나 이상의 프리미티브들이 위치되는 오프셋; 및
오프셋에 위치된 제1 노드에 대한 프리미티브들의 수를 나타내는 하나 이상의 필드들을 포함하는, 장치.
C5. 세트 C 내의 임의의 이전 항목에 있어서, 공간적으로 조직화된 데이터 구조는 적어도 4개의 자식 노드들을 갖는 노드를 포함하는, 장치.
C6. 세트 C 내의 임의의 이전 항목에 있어서, 공간적으로 조직화된 데이터 구조는 노드의 모든 자식 노드들이 연속적으로 위치되는 노드에 대한 메모리 위치를 인코딩하는, 장치.
C7. 세트 C 내의 임의의 이전 항목에 있어서, 하나 이상의 그래픽 프로세서들에 대한 드라이버는 노드들 중 하나 이상의 자식들 사이의 메모리 공간 내로 디버그 데이터를 삽입하도록 구성되는, 장치.
C8. 세트 C 내의 임의의 이전 항목에 있어서, 공간적으로 조직화된 데이터 구조는 리프 노드들에서의 프리미티브 정보 및 내부 노드들에서의 경계 영역 정보를 특정하는, 장치.
C9. 세트 C 내의 임의의 이전 항목에 있어서, 공간적으로 조직화된 데이터 구조 내의 제1 리프 노드 및 제2 리프 노드는 상이한 데이터 크기들을 갖고, 제1 리프 노드 및 제2 리프 노드의 각각의 부모 노드들은 상이한 데이터 크기들을 인코딩하는, 장치.
C10. 세트 C 내의 임의의 이전 항목에 있어서,
네트워크 인터페이스 회로; 및
하나 이상의 중앙 프로세싱 유닛들을 추가로 포함하는, 장치.
C11. 방법으로서,
세트 C 내의 임의의 이전 항목의 회로에 의해 수행되는 동작들의 임의의 조합을 포함하는, 방법.
C12. 설계에 따른 회로를 생성하기 위해 설계 정보를 사용하도록 구성되는 반도체 제조 시스템에 의해 인식되는 포맷으로 하드웨어 집적 회로의 적어도 일부분의 설계를 특정하는 설계 정보를 저장하는 비일시적 컴퓨터 판독가능 저장 매체로서, 설계 정보는, 회로가,
항목 C1 내지 항목 C10에 언급된 요소들의 임의의 조합을 포함하는 것을 특정하는, 비일시적 컴퓨터 판독가능 저장 매체.
***
세트 D
D1. 장치로서,
제1 SIMD 그룹에 대한 광선 교차 명령어를 실행하도록 구성된 셰이더 회로 - 명령어는 그래픽 장면에서 광선들의 세트에 대한 좌표 정보를 표시함 -;
광선 교차 회로를 포함하고, 광선 교차 회로는,
광선 교차 명령어에 응답하여, 공간적으로 조직화된 가속도 데이터 구조 내의 다수의 노드들을 순회하고 - 데이터 구조의 노드들은 그래픽 장면 내의 경계 영역들에 대응하는 좌표들을 나타내고 순회는 광선들이 경계 영역들과 교차하는지 여부를 결정함 -;
변환을 나타내는 제1 노드에 도달하는 것에 응답하여, 광선들의 세트 내의 하나 이상의 광선들의 좌표들을 변환하기 위해 셰이더 회로 상에서 실행하기 위한 제2 SIMD 그룹을 형성하도록 구성되는, 장치.
D2. 세트 D 내의 임의의 이전 항목에 있어서, 가속도 데이터 구조는 계층적 구조이고, 제1 노드는 하위 레벨 가속도 데이터 구조에서 자식 노드를 갖는 상위 레벨 가속도 데이터 구조의 리프 노드인, 장치.
D3. 세트 D 내의 임의의 이전 항목에 있어서, 변환은 그래픽 장면에서 여러번 인스턴스화되는 그래픽 모델의 인스턴스에 대한 모델 공간에 하나 이상의 광선들을 포지셔닝하는, 장치.
D4. 세트 D 내의 임의의 이전 항목에 있어서, 제1 노드의 자식 노드는 또한 상위 레벨 가속도 데이터 구조에서 다른 부모 노드를 가지며, 여기서 다른 부모 노드는 자식 노드로 순회할 때 상이한 변환을 나타내며, 상이한 변환은 그래픽 모델의 상이한 인스턴스에 대한 모델 공간과 연관되는, 장치.
D5. 세트 D 내의 임의의 이전 항목에 있어서, 장치는 하나 이상의 광선들의 오리지널 좌표들을 저장하고, 제1 노드를 지나 가속도 데이터 구조를 통해 역으로 순회하는 것에 응답하여 오리지널 좌표들로 복귀하도록 구성되는, 장치.
D6. 세트 D 내의 임의의 이전 항목에 있어서, 제1 SIMD 그룹 및 제2 SIMD 그룹은 셰이더 메모리 공간에서 하나 이상의 광선들에 대한 광선 데이터에 액세스하는, 장치.
D7. 세트 D 내의 임의의 이전 항목에 있어서, 제1 SIMD 그룹은 광선 교차 명령어를 실행하기 전에 셰이더 메모리 공간 내의 광선들의 세트에 대한 메모리 공간을 할당하기 위한 명령어를 포함하는, 장치.
D8. 세트 D 내의 임의의 이전 항목에 있어서, 제2 SIMD 그룹은 광선 교차 명령어를 실행한 다른 SIMD 그룹으로부터의 하나 이상의 광선들을 포함하는, 장치.
D9. 세트 D 내의 임의의 이전 항목에 있어서, 가속도 데이터 구조는 경계 체적 계층구조인, 장치.
D10. 세트 D 내의 임의의 이전 항목에 있어서, 장치는 컴퓨팅 디바이스이고, 컴퓨팅 디바이스는,
광선 교차 회로 및 셰이더 회로를 포함하는 그래픽 유닛;
하나 이상의 중앙 프로세싱 유닛들; 및
네트워크 인터페이스 회로를 포함하는, 장치.
D11. 방법으로서,
세트 D 내의 임의의 이전 항목의 회로에 의해 수행되는 동작들의 임의의 조합을 포함하는, 방법.
D12. 설계에 따른 회로를 생성하기 위해 설계 정보를 사용하도록 구성되는 반도체 제조 시스템에 의해 인식되는 포맷으로 하드웨어 집적 회로의 적어도 일부분의 설계를 특정하는 설계 정보를 저장하는 비일시적 컴퓨터 판독가능 저장 매체로서, 설계 정보는, 회로가,
항목 D1 내지 항목 D10에 언급된 요소들의 임의의 조합을 포함하는 것을 특정하는, 비일시적 컴퓨터 판독가능 저장 매체.
***
세트 E
E1. 장치로서,
제1 SIMD 그룹에 대한 광선 교차 명령어를 실행하도록 구성된 셰이더 회로 - 명령어는 그래픽 장면에서 광선들의 제1 세트에 대한 좌표 정보를 표시함 -; 및
광선 교차 명령어에 응답하여, 공간적으로 조직화된 가속도 데이터 구조 내의 다수의 노드들을 순회하도록 구성된 광선 교차 회로를 포함하고, 여기서 노드들은 경계 영역들의 좌표들을 나타내는 다수의 노드들 및 그래픽 장면에서 프리미티브들을 나타내는 다수의 노드들을 포함하고;
장치는, 하나 이상의 프리미티브들을 나타내는 가속도 데이터 구조의 노드에 도달하는 것에 대한 응답으로, 제1 세트의 광선들과 부분적으로만 중첩하는 제2 세트의 광선들에 대해 동작하는 제2 SIMD 그룹을 형성하도록 구성되고, 여기서, 제2 SIMD 그룹은 제2 세트의 광선들 내의 광선들이 하나 이상의 프리미티브들과 교차하는지 여부를 결정하기 위해 하나 이상의 명령어들을 포함하고;
셰이더 회로는 제2 SIMD 그룹의 실행의 결과들에 기초하여 교차된 것으로 표시된 하나 이상의 프리미티브들을 셰이딩하도록 구성되는, 장치.
E2. 세트 E 내의 임의의 이전 항목에 있어서, 셰이더 회로는 제2 SIMD 그룹을 실행하는 교차 결과들에 기초하여 하나 이상의 광선들의 광선에 대한 순회를 계속할지 여부를 광선 교차 회로에 나타내도록 구성되는, 장치.
E3. 세트 E 내의 임의의 이전 항목에 있어서, 제1 SIMD 그룹 및 제2 SIMD 그룹은 하나 이상의 광선들의 제1 광선에 대한 정보를 저장하는 제1 데이터 구조에 대해 동작하고, 여기서 제1 데이터 구조는 광선 교차 회로에 또한 액세스가능한 셰이더 메모리 공간에 저장되는, 장치.
E4. 세트 E 내의 임의의 이전 항목에 있어서, 제2 SIMD 그룹은 제2 SIMD 그룹에 대한 광선 교차 회로에 의해 식별되는 셰이더 메모리 공간에서 버퍼로부터의 스레드 데이터에 액세스하도록 구성되는, 장치.
E5. 세트 E 내의 임의의 이전 항목에 있어서, 제2 SIMD 그룹은 다수의 상이한 프리미티브들에 대해 제1 광선을 테스트하도록 구성된 상이한 스레드들을 포함하는, 장치.
E6. 세트 E 내의 임의의 이전 항목에 있어서, 제2 SIMD 그룹은 제1 광선 상에서 동작하는 다수의 스레드들로부터의 입력 값들에 기초하여 동작을 수행하는 SIMD 감소 명령어를 포함하는, 장치.
E7. 세트 E 내의 임의의 이전 항목에 있어서, 순회 동안에, 광선이 가속도 데이터 구조의 노드에 의해 표시되는 경계 영역들의 다수의 상이한 것들과 교차하는지 여부를 병렬로 테스트하도록 구성된 경계 영역 테스트 회로를 추가로 포함하는, 장치.
E8. 세트 E 내의 임의의 이전 항목에 있어서, 셰이더 회로는 제1 SIMD 그룹의 실행을 일시정지하고 제2 SIMD 그룹으로부터 교차 결과들을 수신한 후에 하나 이상의 프리미티브들을 셰이딩하기 위해 제1 SIMD 그룹의 실행을 재개하도록 구성되는, 장치.
E9. 세트 E 내의 임의의 이전 항목에 있어서, 장치는 컴퓨팅 디바이스이고, 컴퓨팅 디바이스는,
셰이더 회로 및 광선 교차 회로를 포함하는 그래픽 유닛;
중앙 프로세싱 유닛; 및
네트워크 인터페이스 회로를 포함하는, 장치.
E10. 방법으로서,
세트 E 내의 임의의 이전 항목의 회로에 의해 수행되는 동작들의 임의의 조합을 포함하는, 방법.
E11. 설계에 따른 회로를 생성하기 위해 설계 정보를 사용하도록 구성되는 반도체 제조 시스템에 의해 인식되는 포맷으로 하드웨어 집적 회로의 적어도 일부분의 설계를 특정하는 설계 정보를 저장하는 비일시적 컴퓨터 판독가능 저장 매체로서, 설계 정보는, 회로가,
항목 E1 내지 항목 E9에 언급된 요소들의 임의의 조합을 포함하는 것을 특정하는, 비일시적 컴퓨터 판독가능 저장 매체.
***
세트 F
F1. 장치로서,
다수의 스레드그룹들에 대한 명령어들을 실행하도록 구성된 제1 및 제2 그래픽 셰이더 코어 - 제1 그래픽 셰이더 코어는,
제1 셰이더 프로그램을 실행하도록 구성된 다수의 단일 명령어 다중 데이터(SIMD) 그룹들을 갖는 제1 스레드그룹; 및
상이한 제2 셰이더 프로그램을 실행하도록 구성된 다수의 SIMD 그룹들을 갖는 제2 스레드그룹을 실행하도록 구성됨 -;
메모리 회로; 및
제어 회로를 포함하고, 제어 회로는 제1 및 제2 스레드그룹들을 포함하여 제1 그래픽 셰이더 코어에 의해 실행되는 스레드그룹들에 액세스가능하지만 제2 그래픽 셰이더 코어에 의해 실행되는 스레드그룹들에 액세스가능하지 않은 셰이더 메모리 공간에 따라 메모리 회로에 저장된 데이터에 대한 액세스를 제공하도록 구성되는, 장치.
F2. 세트 F 내의 임의의 이전 항목에 있어서, 제1 그래픽 셰이더 코어 내의 제1 캐시는 셰이더 메모리 공간에 대한 코히어런스 포인트이고, 장치 내의 제2 상위-레벨 캐시는 디바이스 메모리 공간을 위한 코히어런스 포인트인, 장치.
F3. 세트 F 내의 임의의 이전 항목에 있어서, 제어 회로는 하기의 메모리 공간들에 따라 메모리 회로에 저장된 데이터에 대한 액세스를 제공하도록 추가로 구성되는, 장치:
제1 스레드그룹에 액세스가능하지만 임의의 다른 스레드그룹들에 액세스가능하지 않은 제1 스레드그룹에 대한 스레드그룹 메모리 공간;
단일 스레드에 액세스가능한 스레드 메모리 공간; 및
제1 및 제2 그래픽 셰이더 코어들 둘 모두에 의해 실행되는 스레드그룹들에 액세스가능한 디바이스 메모리 공간.
F4. 세트 F 내의 임의의 이전 항목에 있어서, 셰이더 메모리 공간은 또한 제1 그래픽 셰이더 코어에 대한 하나 이상의 코-프로세서들에 액세스가능한, 장치.
F5. 세트 F 내의 임의의 이전 항목에 있어서, 하나 이상의 코-프로세서들은 광선 교차 회로를 포함하는, 장치.
F6. 세트 F 내의 임의의 이전 항목에 있어서, 광선 교차 회로는,
제1 스레드그룹의 명령어에 기초하여, 교차에 대해 광선이 테스트될 하나 이상의 프리미티브들을 결정하기 위해 공간적으로 조직화된 데이터 구조를 순회하고;
광선에 대한 하나 이상의 프리미티브들을 테스트하기 위해 제2 스레드그룹을 개시하도록 구성되고;
제1 스레드그룹 및 제2 스레드그룹 둘 모두는 셰이더 메모리 공간에 저장된 광선 정보에 대해 동작하는, 장치.
F7. 세트 F 내의 임의의 이전 항목에 있어서, 제1 그래픽 셰이더 코어는 셰이더 메모리 공간을 타겟팅하는 부하, 저장, 및 원자성 명령어들을 실행하도록 구성되는, 장치.
F8. 세트 F 내의 임의의 이전 항목에 있어서, 제1 그래픽 셰이더 코어는 동적으로 형성된 SIMD 그룹의 스레드들에 의해 추가로 프로세싱될 중간 그래픽 작업을 스레드 입도로 저장하기 위해 셰이더 메모리 공간을 사용하기 위해 제1 스레드그룹의 제1 SIMD 그룹을 실행하도록 구성되는, 장치.
F9. 세트 F 내의 임의의 이전 항목에 있어서, 동적으로 형성된 SIMD 그룹은 조건부 제어 전달 명령어에 대해 동일한 조건 결과를 갖는 것으로 결정된 스레드들의 세트를 포함하는, 장치.
F10. 방법으로서,
세트 F 내의 임의의 이전 항목의 회로에 의해 수행되는 동작들의 임의의 조합을 포함하는, 방법.
F11. 설계에 따른 회로를 생성하기 위해 설계 정보를 사용하도록 구성되는 반도체 제조 시스템에 의해 인식되는 포맷으로 하드웨어 집적 회로의 적어도 일부분의 설계를 특정하는 설계 정보를 저장하는 비일시적 컴퓨터 판독가능 저장 매체로서, 설계 정보는, 회로가,
항목 F1 내지 항목 F9에 언급된 요소들의 임의의 조합을 포함하는 것을 특정하는, 비일시적 컴퓨터 판독가능 저장 매체.
***
본 개시내용은 "실시예" 또는 "실시예들의 그룹들"(예를 들어, "일부 실시예들" 또는 "다양한 실시예들")에 대한 언급들을 포함한다. 실시예들은 개시된 개념들의 상이한 구현들 또는 인스턴스들이다. "실시예", "일 실시예", "특정 실시예" 등에 대한 언급들은 반드시 동일한 실시예를 지칭하는 것은 아니다. 구체적으로 개시된 것들 뿐만 아니라, 본 개시내용의 사상 또는 범주 내에 속하는 수정들 또는 대안들을 포함하는 많은 가능한 실시예들이 고려된다.
본 개시내용은 개시된 실시예들로부터 발생할 수 있는 잠재적인 이점들을 논의할 수 있다. 이들 실시예들의 모든 구현들이 반드시 잠재적인 이점들 중 임의의 또는 모든 것을 나타내는 것은 아닐 것이다. 특정 구현에 대해 이점이 실현되는지 여부는 많은 인자들에 의존하며, 이들 중 일부는 본 개시내용의 범위를 벗어난다. 실제로, 청구항들의 범위 내에 속하는 구현이 임의의 개시된 이점들 중 일부 또는 전부를 나타내지 않을 수 있는 많은 이유들이 있다. 예를 들어, 특정 구현은, 개시된 실시예들 중 하나와 함께, 개시된 이점들 하나 이상을 무효화 또는 약화시키는, 본 개시내용의 범위 밖의 다른 회로를 포함할 수 있다. 또한, 특정 구현의 차선의 설계 실행(예를 들어, 구현 기술들 또는 도구들)은 또한 개시된 이점들을 무효화하거나 약화시킬 수 있다. 숙련된 구현을 가정하더라도, 이점들의 실현은 구현이 전개되는 환경 상황들과 같은 다른 인자들에 여전히 의존할 수 있다. 예를 들어, 특정 구현에 공급되는 입력들은 본 개시내용에서 해결되는 하나 이상의 문제들이 특정 기회에 발생하는 것을 방지할 수 있으며, 그 결과, 그 해결책의 이익이 실현되지 않을 수 있다. 본 개시내용 외부의 가능한 인자들의 존재를 고려할 때, 본 명세서에서 설명되는 임의의 잠재적인 이점들은, 침해를 입증하기 위해 충족되어야 하는 청구항 제한들로서 해석되지 않아야 한다는 것이 명백하게 의도된다. 오히려, 그러한 잠재적 이점들의 식별은 본 개시내용의 이익을 갖는 설계자들에게 이용가능한 개선의 유형(들)을 예시하도록 의도된다. 그러한 이점들이 허용가능하게 설명된다는 것(예를 들어, 특정 이점이 "발생할 수 있다"고 언급함)은 그러한 이점들이 실제로 실현될 수 있는지에 대한 의구심을 전달하도록 의도되는 것이 아니라, 그러한 이점들의 실현이 종종 추가 인자들에 의존한다는 기술적 현실을 인식하도록 의도된다.
달리 언급되지 않는 한, 실시예들은 비제한적이다. 즉, 개시된 실시예들은, 특정 특징에 대해 단일 예만이 설명되는 경우에도, 본 개시내용에 기초하여 작성되는 청구항들의 범위를 제한하도록 의도되지 않는다. 개시된 실시예들은, 이에 반하는 본 개시내용의 어떠한 진술도 없이, 제한적이기보다는 예시적인 것으로 의도된다. 따라서, 본 출원은 개시된 실시예들을 커버하는 청구항들뿐만 아니라, 본 개시내용의 이익을 갖는 당업자에게 명백할 그러한 대안들, 수정들 및 등가물들을 허용하도록 의도된다.
예를 들어, 본 출원에서의 특징들은 임의의 적합한 방식으로 조합될 수 있다. 따라서, 특징부들의 임의의 그러한 조합에 대해 본 출원(또는 그에 대한 우선권을 주장하는 출원)의 심사 동안에 새로운 청구범위가 작성될 수 있다. 특히, 첨부된 청구항들을 참조하면, 종속 청구항들로부터의 특징들은 다른 독립 청구항들로부터 의존하는 청구항들을 포함하여, 적절한 경우 다른 종속 청구항들의 특징들과 조합될 수 있다. 유사하게, 각각의 독립 청구항들로부터의 특징들은 적절한 경우 조합될 수 있다.
따라서, 첨부된 종속 청구항들은 각각이 단일의 다른 청구항들에 의존하도록 작성될 수 있지만, 추가적인 종속성들이 또한 고려된다. 본 개시내용과 일치하는 종속물에서의 특징들의 임의의 조합들이 고려되며, 이러한 또는 다른 애플리케이션에서 청구될 수 있다. 간단히 말하면, 조합들은 첨부된 청구항들에 구체적으로 열거된 것들로 제한되지 않는다.
적절한 경우, 하나의 포맷 또는 법정 유형(예를 들어, 장치)으로 작성된 청구항들은 다른 포맷 또는 법정 유형(예를 들어, 방법)의 대응하는 청구항들을 지원하도록 의도되는 것으로 또한 고려된다.
***
본 개시내용은 법적인 문서이기 때문에, 다양한 용어들 및 문구들은 행정적 및 사법적 해석의 대상이 될 수 있다. 본 개시내용 전반에 걸쳐 제공되는 정의들뿐만 아니라 다음의 단락들이 본 개시내용에 기초하여 작성되는 청구항들을 해석하는 방법을 결정하는 데 사용될 것이라는 공지가 본 명세서에 주어진다.
물품의 단수 형태(즉, "a", "an" 또는 "the"가 선행되는 명사 또는 명사 문구)에 대한 언급들은, 문맥상 명확하게 달리 지시되지 않는 한, "하나 이상"을 의미하는 것으로 의도된다. 따라서, 청구항에서 "항목"에 대한 언급은, 수반되는 상황 없이, 항목의 추가적인 인스턴스들을 배제하지 않는다. "복수"의 항목들은 항목들 중 2개 이상의 세트를 지칭한다.
"~할 수 있다"라는 단어는 본 명세서에서 강제적인 의미(즉, ~ 해야 하는)가 아니라 허용적인 의미(즉, ~할 가능성을 갖는, ~할 수 있는)로 사용된다.
용어들 "포함하는"("comprising" 및 "including") 및 이들의 형태는 개방형(open-ended)이며, "포함하지만 이로 한정되지 않는"을 의미한다.
용어 "또는"이 옵션들의 리스트에 관하여 본 개시내용에서 사용될 때, 문맥이 달리 제공하지 않는 한, 일반적으로 포괄적인 의미로 사용되는 것으로 이해될 것이다. 따라서, "x 또는 y"의 언급은 "x 또는 y, 또는 둘 모두"와 동등하고, 따라서 1) x지만 y 아님, 2) y지만 x 아님 및 3) x 및 y 둘 모두를 커버한다. 다른 한편으로, "x 또는 y 중 어느 하나, 그러나 둘 모두는 아님"과 같은 문구는 "또는"이 배타적인 의미로 사용되고 있음을 명확하게 한다.
"w, x, y, 또는 z, 또는 이들의 임의의 조합" 또는 "... w, x, y, 및 z 중 적어도 하나"의 언급은 세트 내의 요소들의 총 개수까지 단일 요소를 수반하는 모든 가능성들을 커버하도록 의도된다. 예를 들어, 세트 [w, x, y, z]가 주어지면, 이러한 문구들은 세트의 임의의 단일 요소(예를 들어, w지만 x, y, 또는 z 아님), 임의의 2개의 요소들(예를 들어, w 및 x지만 y 또는 z 아님), 임의의 3개의 요소들(예를 들어, w, x 및 y지만, z 아님) 및 4개의 요소들 모두를 커버한다. 따라서, "... w, x, y, 및 z 중 적어도 하나"라는 문구는 세트 [w, x, y, z]의 적어도 하나의 요소를 지칭하고, 이로써 요소들의 이러한 리스트 내의 모든 가능한 조합들을 커버한다. 이 문구는 w의 적어도 하나의 인스턴스, x의 적어도 하나의 인스턴스, y의 적어도 하나의 인스턴스, 및 z의 적어도 하나의 인스턴스가 있음을 요구하도록 해석되지 않아야 한다.
본 개시내용에서 다양한 "라벨들"이 명사들 또는 명사 문구들에 선행할 수 있다. 문맥이 달리 제공하지 않는 한, 특징에 대해 사용되는 상이한 라벨들(예를 들어, "제1 회로", "제2 회로", "특정 회로", "주어진 회로" 등)은 특징의 상이한 인스턴스들을 지칭한다. 추가적으로, 특징에 적용될 때, "제1", "제2" 및 "제3" 라벨들은, 달리 언급되지 않는 한, 어떠한 유형의 순서(예를 들어, 공간적, 시간적, 논리적 등)를 의미하지 않는다.
문구 "기초하여"는 결정에 영향을 주는 하나 이상의 인자들을 설명하기 위해 사용된다. 이러한 용어는 추가 인자들이 결정에 영향을 줄 수 있는 가능성을 배제하지 않는다. 즉, 결정은 단지 특정된 인자들에 기초하거나 또는 그 특정된 인자들뿐만 아니라 다른, 불특정된 인자들에 기초할 수 있다. "B에 기초하여 A를 결정한다"라는 문구를 고려한다. 이러한 문구는 B가 A를 결정하는 데 사용되거나 A의 결정에 영향을 주는 인자라는 것을 명시한다. 이러한 문구는 A의 결정이 C와 같은 일부 다른 인자에 또한 기초할 수 있음을 배제하지 않는다. 또한, 이 문구는 A가 B만에 기초하여 결정되는 실시예를 커버하도록 의도된다. 본 명세서에서 사용되는 바와 같이, "에 기초하여"라는 문구는 "적어도 부분적으로 기초하여"라는 문구와 동의어이다.
문구들 "~ 에 응답하여" 및 "~ 에 응답으로"는 효과를 트리거하는 하나 이상의 인자들을 설명한다. 이러한 문구는 추가적인 인자들이 특정 인자들과 공동으로 또는 특정 인자들과는 독립적으로 영향을 주거나 또는 달리 효과를 트리거할 수 있는 가능성을 배제하지 않는다. 즉, 효과는 단지 이들 인자들에만 응답할 수 있거나 또는 특정 인자들 뿐만 아니라 다른 불특정 인자들에 응답할 수 있다. "B에 응답하여 A를 수행한다"라는 문구를 고려한다. 이러한 문구는 B가 A의 수행을 트리거하는 또는 A에 대한 특정 결과를 트리거하는 인자라는 것을 명시한다. 이러한 문구는 A를 수행하는 것이 C와 같은 일부 다른 인자에 또한 응답할 수 있음을 배제하지 않는다. 이러한 문구는 또한 A를 수행하는 것이 B와 C에 응답하여 공동으로 수행될 수 있다는 것을 배제하지 않는다. 이러한 문구는 또한 A가 B에만 응답하여 수행되는 실시예를 커버하도록 의도된다. 본 명세서에서 사용되는 바와 같이, 문구 "응답하여"는 문구 "적어도 부분적으로 응답하여"와 동의어이다. 유사하게, 문구 "~ 에 응답하여"는 문구 "적어도 부분적으로 응답하여"와 동의어이다.
***
본 개시내용 내에서, 상이한 엔티티들("유닛들", "회로들", 다른 컴포넌트들 등으로 다양하게 지칭될 수 있음)은 하나 이상의 태스크들 또는 동작들을 수행하도록 "구성된" 것으로 설명되거나 또는 청구될 수 있다. 이러한 표현-[하나 이상의 태스크들을 수행]하도록 구성된 [엔티티]-은 본 명세서에서 구조(즉, 물리적인 것)를 지칭하는 데 사용된다. 더 상세하게는, 이러한 표현은 이러한 구조가 동작 동안 하나 이상의 태스크들을 수행하도록 배열됨을 나타내는 데 사용된다. 구조가 현재 동작되고 있지 않더라도, 구조는 일부 태스크를 수행하도록 "구성된다"고 할 수 있다. 따라서, 일부 태스크를 수행"하도록 구성된" 것으로 설명된 또는 언급된 엔티티는 디바이스, 회로, 태스크를 구현하도록 실행가능한 프로그램 명령어들을 저장하는 메모리 및 프로세서 유닛을 갖는 시스템 등과 같은 물리적인 것을 지칭한다. 이러한 문구는 본 명세서에서 무형인 것을 지칭하기 위해 사용되지는 않는다.
일부 경우들에서, 다양한 유닛들/회로들/컴포넌트들은 태스크 또는 동작들의 세트를 수행하는 것으로 본 명세서에서 설명될 수 있다. 이들 엔티티들은, 구체적으로 언급되지 않더라도, 그러한 태스크들/동작들을 수행하도록 "구성"된다는 것이 이해된다.
용어 "구성된"은 "구성가능한"을 의미하도록 의도되지 않는다. 예를 들어, 프로그래밍되지 않은 FPGA는 특정 기능을 수행하도록 "구성된" 것으로 간주되지 않을 것이다. 그러나, 이러한 프로그래밍되지 않은 FPGA는 그 기능을 수행하도록 "구성가능"할 수 있다. 적절한 프로그래밍 후에, 이어서 FPGA는 특정 기능을 수행하도록 "구성된다"고 말할 수 있다.
본 개시내용에 기초한 미국 특허 출원들의 목적들을 위해, 구조가 하나 이상의 태스크들을 수행하도록 "구성"된다고 청구항에서 언급하는 것은 명백히 그 청구항 요소에 대하여 35 U.S.C. §(112)(f)를 적용하지 않도록 의도된다. 출원인이 본 개시내용에 기초하여 미국 특허 출원의 심사 동안 섹션 112(f)의 적용을 원하면, [기능을 수행]"하기 위한 수단" 구조를 이용하여 청구항 요소들을 열거할 것이다.
상이한 "회로들"이 본 개시내용에서 설명될 수 있다. 이러한 회로들 또는 "회로"는 조합 로직, 클로킹된 저장 디바이스들(예를 들어, 플립-플롭들, 레지스터들, 래치들 등), 유한 상태 머신들, 메모리(예를 들어, 랜덤 액세스 메모리, 내장형 동적 랜덤 액세스 메모리), 프로그래밍가능 로직 어레이 등과 같은 다양한 유형들의 회로 요소들을 포함하는 하드웨어를 구성한다. 회로는 맞춤 설계되거나 표준 라이브러리들로부터 취해질 수 있다. 다양한 구현들에서, 회로는 적절하게 디지털 컴포넌트들, 아날로그 컴포넌트들, 또는 둘 모두의 조합을 포함할 수 있다. 특정 유형들의 회로들은 일반적으로 "유닛들"(예를 들어, 디코딩 유닛, 산술 로직 유닛(ALU), 기능 유닛, 메모리 관리 유닛(MMU) 등)으로 지칭될 수 있다. 그러한 유닛들은 또한 회로들 또는 회로를 지칭한다.
따라서, 도면들에 예시되고 본 명세서에서 설명된 개시된 회로들/유닛들/컴포넌트들 및 다른 요소들은 이전 단락에서 설명된 것들과 같은 하드웨어 요소들을 포함한다. 많은 경우들에서, 특정 회로 내의 하드웨어 요소들의 내부 배열은 그 회로의 기능을 설명함으로써 특정될 수 있다. 예를 들어, 특정 "디코딩 유닛"은 "명령어의 오피코드를 프로세싱하고 그 명령어를 복수의 기능 유닛들 중 하나 이상에 라우팅하는" 기능을 수행하는 것으로 설명될 수 있으며, 이는 디코딩 유닛이 이러한 기능을 수행하도록 "구성됨"을 의미한다. 이러한 기능의 규격은, 컴퓨터 분야의 당업자들에게, 회로에 대한 가능한 구조들의 세트를 암시하기에 충분하다.
다양한 실시예들에서, 이전 단락에서 논의된 바와 같이, 회로들, 유닛들, 및 이들이 구현하도록 구성된 기능들 또는 동작들에 의해 정의된 다른 요소들, 배열 및 그러한 회로들/유닛들/컴포넌트들은 서로에 대해 그리고 이들이 상호작용하는 방식으로, 마이크로 아키텍처 정의의 물리적 구현을 형성하도록 집적 회로에서 궁극적으로 제조되거나 FPGA로 프로그래밍되는 하드웨어의 마이크로 아키텍처 정의를 형성한다. 따라서, 마이크로 아키텍처 정의는 많은 물리적 구현들이 유도될 수 있는 구조로서 당업자들에 의해 인식되며, 이들 모두는 마이크로 아키텍처 정의에 의해 설명된 더 넓은 구조에 속한다. 즉, 본 개시내용에 따라 공급되는 마이크로 아키텍처 정의를 제공받는 당업자는, 과도한 실험 없이 그리고 통상의 기술의 적용으로, 회로들/유닛들/컴포넌트들의 디스크립션을 베릴로그(Verilog) 또는 VHDL과 같은 하드웨어 디스크립션 언어(HDL)로 코딩함으로써 구조를 구현할 수 있다. HDL 디스크립션은 종종, 기능적으로 보일 수 있는 방식으로 표현된다. 그러나, 이 분야의 기술자들에게, 이러한 HDL 디스크립션은 회로, 유닛 또는 컴포넌트의 구조를 다음 레벨의 구현 세부사항으로 변환하는 데 사용되는 방식이다. 그러한 HDL 디스크립션은 (통상적으로 합성가능하지 않은) 거동 코드, (거동 코드와는 대조적으로, 통상적으로 합성가능한) 레지스터 전송 언어(RTL) 코드, 또는 구조적 코드(예를 들어, 로직 게이트들 및 그들의 접속성을 특정하는 넷리스트)의 형태를 취할 수 있다. HDL 디스크립션은 주어진 집적 회로 제조 기술을 위해 설계된 셀들의 라이브러리에 대해 순차적으로 합성될 수 있고, 타이밍, 전력 및 다른 이유들로 인해 수정되어 최종 설계 데이터베이스를 생성할 수 있으며, 이는 파운드리(foundry)로 송신되어 마스크들을 생성하고 궁극적으로 집적 회로를 생성할 수 있다. 일부 하드웨어 회로들 또는 그의 부분들은 또한 회로도 편집기(schematic editor)로 맞춤 설계될 수 있고 합성된 회로와 함께 집적 회로 설계 내로 캡처될 수 있다. 집적 회로는 트랜지스터들, 및 다른 회로 요소들(예를 들어, 커패시터들, 저항기들, 인덕터들 등과 같은 수동 요소들) 및 트랜지스터들과 회로 요소들 사이의 상호접속부를 포함할 수 있다. 일부 실시예들은 하드웨어 회로들을 구현하기 위해 함께 결합된 다수의 집적 회로들을 구현할 수 있고, 그리고/또는 일부 실시예들에서는 이산 요소들이 사용될 수 있다. 대안적으로, HDL 설계는 FPGA(Field Programmable Gate Array)와 같은 프로그래밍가능 로직 어레이로 합성될 수 있으며 FPGA에서 구현될 수 있다. 회로들의 그룹의 설계와 이들 회로들의 후속 저레벨 구현 사이의 이러한 디커플링은 일반적으로, 회로 또는 로직 설계자가 회로가 무엇을 하도록 구성되는지의 설명을 넘어서 저레벨 구현에 대한 특정 세트의 구조들을 특정하지 않는 시나리오를 도출하는데, 이는 이러한 프로세스가 회로 구현 프로세스의 상이한 스테이지에서 수행되기 때문이다.
회로 요소들의 많은 상이한 저-레벨 조합들이 회로의 동일한 규격을 구현하는 데 사용될 수 있다는 사실은 그 회로에 대한 다수의 등가 구조들을 초래한다. 언급된 바와 같이, 이러한 저-레벨 회로 구현들은 제조 기술의 변화들, 집적 회로를 제조하기 위해 선택된 파운드리, 특정 프로젝트를 위해 제공된 셀들의 라이브러리 등에 따라 변할 수 있다. 많은 경우에서, 이들 상이한 구현들을 생성하기 위해 상이한 설계 도구들 또는 방법론들에 의해 이루어지는 선택들은 임의적일 수 있다.
더욱이, 회로의 특정 기능 규격의 단일 구현이 주어진 실시예에 대해 많은 수의 디바이스들(예를 들어, 수백만 개의 트랜지스터들)을 포함하는 것이 일반적이다. 따라서, 엄청난 체적의 이러한 정보는, 등가의 가능한 구현들의 방대한 어레이는 말할 것도 없이, 단일 실시예를 구현하는 데 사용되는 저-레벨 구조의 완전한 설명을 제공하는 것을 비실용적으로 만든다. 이러한 이유로, 본 개시내용은 업계에서 일반적으로 사용되는 기능적 속기(shorthand)를 사용하여 회로들의 구조를 설명한다.

Claims (20)

  1. 장치로서,
    광선 교차 회로를 포함하고, 상기 광선 교차 회로는,
    그래픽 장면 내의 광선들의 세트에서 다수의 광선들에 대한 원점 및 방향 정보를 나타내는 하나 이상의 광선 교차 요청들을 수신하고;
    공간적으로 조직화된 가속도 데이터 구조의 다수의 노드들을 순회하도록 구성되고, 상기 다수의 노드들 중 주어진 노드는 상기 그래픽 장면의 경계 영역에 대응하는 좌표를 나타내고, 상기 순회는 상기 다수의 광선들 중의 광선들이 경계 영역들과 교차하는지 여부를 결정하며, 상기 순회가 상기 다수의 광선들 중의 광선들이 경계 영역들과 교차하는지 여부를 결정하는 것은,
    그룹화 회로에 의해, 주어진 광선이 다음에 타겟팅하는 상기 데이터 구조의 노드에 기초하여 상기 다수의 광선들의 서브세트들을 다수의 그룹들로 그룹화하는 것; 및
    상기 그룹화에 기초하여 경계 영역 테스트 회로에 의해, 제1 그룹 내의 광선들이 제1 노드의 하나 이상의 경계 영역들과 교차하는지 여부를 결정하기 위해 상기 제1 노드를 타겟팅하는 상기 다수의 광선들의 서브세트를 포함하는 제1 그룹을 프로세싱하는 것
    을 포함하는, 장치.
  2. 제1항에 있어서, 상기 광선 교차 회로는 클록 사이클 동안 광선들의 하나 이상의 그룹들을 선택하고 상기 경계 영역 테스트 회로에 대한 발행을 위해 상기 광선들의 선택된 그룹들 내의 광선들을 스케줄링하도록 구성되는, 장치.
  3. 제2항에 있어서, 상기 선택은 상기 광선들의 다수의 그룹들 중 상이한 광선들의 그룹들에서 가장 오래된 광선에 기초하는, 장치.
  4. 제1항에 있어서, 상기 그룹화는 하나 이상의 데이터 캐시들 내에 캐싱된 경계 영역 데이터에 대한 액세스들에 대한 시간적 국부성을 제공하는, 장치.
  5. 제1항에 있어서, 상기 광선 교차 회로는 상기 가속도 데이터 구조의 리프(leaf) 노드들 및 상기 가속도 데이터 구조의 내부 노드들에 대한 별개의 그룹화 회로를 포함하는, 장치.
  6. 제1항에 있어서, 상기 제1 그룹은 링크된 리스트에 의해 특정되는, 장치.
  7. 제6항에 있어서, 광선 큐의 엔트리들은 대응하는 광선의 현재 그룹에 대한 상기 링크된 리스트 내의 다음 광선을 가리키는 필드를 포함하는, 장치.
  8. 제1항에 있어서, 상기 제1 그룹은 셰이더(shader) 프로세서에 의해 프로세싱되는 다수의 상이한 SIMD 그룹들로부터의 광선들을 포함하는, 장치.
  9. 제1항에 있어서, 상기 광선 교차 회로는 상기 광선이 상기 가속도 데이터 구조의 레벨들 사이를 순회할 때마다 새로운 그룹에 광선을 할당하도록 구성되는, 장치.
  10. 제9항에 있어서, 상기 광선 교차 회로는 상기 가속도 데이터 구조의 깊이-우선 탐색을 위해 상기 광선에 대한 순회 스택을 구현하고, 상기 광선 교차 회로는 상기 순회 스택의 최상부가 변할 때마다 새로운 그룹에 상기 광선을 할당하도록 구성되는, 장치.
  11. 제1항에 있어서, 광선에 대한 그룹을 결정하기 위해, 상기 광선 교차 회로는,
    그룹들의 세트를 결정하기 위한 해시 함수에 대한 입력으로서 상기 광선에 의해 타겟팅된 다음 노드에 기초하는 키를 사용하고;
    상기 세트 내의 할당된 그룹이 상기 키와 매칭하는지 여부를 결정하기 위해 상기 그룹들의 세트를 탐색하도록 구성되는, 장치.
  12. 제11항에 있어서, 상기 광선 교차 회로는 임의의 현재 할당된 그룹과 매칭하지 않는 광선에 대한 새로운 그룹을 할당하도록 구성되는, 장치.
  13. 제1항에 있어서, 상기 경계 영역 테스트 회로는 노드의 다수의 경계 영역들에 대한 광선을 병렬로 테스트하도록 구성된 병렬 테스트 회로를 포함하는, 장치.
  14. 방법으로서,
    광선 교차 회로에 의해, 그래픽 장면 내의 광선들의 세트에서 다수의 광선들에 대한 원점 및 방향 정보를 나타내는 하나 이상의 광선 교차 요청들을 수신하는 단계;
    상기 광선 교차 회로에 의해, 공간적으로 조직화된 가속도 데이터 구조의 다수의 노드들을 순회하는 단계를 포함하고, 상기 다수의 노드들 중 주어진 노드는 상기 그래픽 장면의 경계 영역에 대응하는 좌표를 나타내고, 상기 순회하는 단계는,
    그룹화 회로에 의해, 주어진 광선이 다음에 타겟팅하는 상기 데이터 구조의 노드에 기초하여 상기 다수의 광선들의 서브세트들을 다수의 그룹들로 그룹화하는 단계; 및
    상기 그룹화에 기초한 경계 영역 테스트 회로를 사용하여, 제1 그룹 내의 광선들이 제1 노드의 하나 이상의 경계 영역들과 교차하는지 여부를 결정하기 위해 상기 제1 노드를 타겟팅하는 상기 다수의 광선들의 서브세트를 포함하는 상기 제1 그룹을 프로세싱하는 단계를 포함하는, 방법.
  15. 제14항에 있어서, 상기 그룹화 동안 광선에 대한 그룹을 결정하는 단계는,
    그룹들의 세트를 결정하기 위한 해시 함수에 대한 입력으로서 상기 광선에 의해 타겟팅된 다음 노드에 기초하는 키를 사용하는 단계; 및
    상기 세트 내의 할당된 그룹이 상기 키와 매칭하는지 여부를 결정하기 위해 상기 그룹들의 세트를 탐색하는 단계를 포함하는, 방법.
  16. 제14항에 있어서,
    하나 이상의 광선들의 그룹들을 선택하고 상기 경계 영역 테스트 회로에 발행하기 위해 상기 선택된 광선들의 그룹들 내의 광선들을 스케줄링하는 단계를 더 포함하는, 방법.
  17. 반도체 제조 시스템에 의해 인식되는 포맷으로 하드웨어 집적 회로의 적어도 일부분의 설계를 특정하는 설계 정보가 저장된 비일시적 컴퓨터 판독가능 저장 매체로서, 상기 반도체 제조 시스템은 상기 설계 정보를 사용하여 상기 설계에 따라 상기 회로를 생성하도록 구성되고,
    상기 설계 정보는, 상기 회로가,
    광선 교차 회로를 포함하는 것을 특정하고, 상기 광선 교차 회로는,
    그래픽 장면 내의 광선들의 세트에서 다수의 광선들에 대한 원점 및 방향 정보를 나타내는 하나 이상의 광선 교차 요청들을 수신하고;
    공간적으로 조직화된 가속도 데이터 구조의 다수의 노드들을 순회하도록 구성되고, 상기 다수의 노드들 중 주어진 노드는 상기 그래픽 장면의 경계 영역에 대응하는 좌표를 나타내고, 상기 순회는 상기 다수의 광선들 중의 광선들이 경계 영역들과 교차하는지 여부를 결정하며, 상기 순회가 상기 다수의 광선들 중의 광선들이 경계 영역들과 교차하는지 여부를 결정하는 것은,
    그룹화 회로에 의해, 주어진 광선이 다음에 타겟팅하는 상기 데이터 구조의 노드에 기초하여 상기 다수의 광선들의 서브세트들을 다수의 그룹들로 그룹화하는 것; 및
    상기 그룹화에 기초하여 경계 영역 테스트 회로에 의해, 제1 그룹 내의 광선들이 제1 노드의 하나 이상의 경계 영역들과 교차하는지 여부를 결정하기 위해 상기 제1 노드를 타겟팅하는 상기 다수의 광선들의 서브세트를 포함하는 상기 제1 그룹을 프로세싱하는 것
    을 포함하는, 비일시적 컴퓨터 판독가능 저장 매체.
  18. 제17항에 있어서, 상기 광선 교차 회로는 광선들의 하나 이상의 그룹들을 선택하고 상기 경계 영역 테스트 회로에 대한 발행을 위해 상기 광선들의 선택된 그룹들 내의 광선들을 스케줄링하도록 구성되는, 비일시적 컴퓨터 판독가능 저장 매체.
  19. 제17항에 있어서, 상기 광선 교차 회로는 단일 링크된 리스트들을 사용하여 상기 그룹화에 의해 생성된 그룹들을 특정하도록 구성되는, 비일시적 컴퓨터 판독가능 저장 매체.
  20. 제17항에 있어서, 광선에 대한 그룹을 결정하기 위해, 상기 광선 교차 회로는,
    그룹들의 세트를 결정하기 위한 해시 함수에 대한 입력으로서 상기 광선에 의해 타겟팅된 다음 노드에 기초하는 키를 사용하고;
    상기 세트 내의 할당된 그룹이 상기 키와 매칭하는지 여부를 결정하기 위해 상기 그룹들의 세트를 탐색하도록 구성되는, 비일시적 컴퓨터 판독가능 저장 매체.
KR1020240064379A 2020-07-30 2024-05-17 병렬 광선 테스트를 갖는 광선 교차 회로 KR20240078413A (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US202063058868P 2020-07-30 2020-07-30
US63/058,868 2020-07-30
US17/103,433 US11367242B2 (en) 2020-07-30 2020-11-24 Ray intersect circuitry with parallel ray testing
US17/103,433 2020-11-24
KR1020230070810A KR102668120B1 (ko) 2020-07-30 2023-06-01 병렬 광선 테스트를 갖는 광선 교차 회로

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020230070810A Division KR102668120B1 (ko) 2020-07-30 2023-06-01 병렬 광선 테스트를 갖는 광선 교차 회로

Publications (1)

Publication Number Publication Date
KR20240078413A true KR20240078413A (ko) 2024-06-03

Family

ID=77050824

Family Applications (4)

Application Number Title Priority Date Filing Date
KR1020210098575A KR102476973B1 (ko) 2020-07-30 2021-07-27 병렬 광선 테스트를 갖는 광선 교차 회로
KR1020220170276A KR102540775B1 (ko) 2020-07-30 2022-12-08 병렬 광선 테스트를 갖는 광선 교차 회로
KR1020230070810A KR102668120B1 (ko) 2020-07-30 2023-06-01 병렬 광선 테스트를 갖는 광선 교차 회로
KR1020240064379A KR20240078413A (ko) 2020-07-30 2024-05-17 병렬 광선 테스트를 갖는 광선 교차 회로

Family Applications Before (3)

Application Number Title Priority Date Filing Date
KR1020210098575A KR102476973B1 (ko) 2020-07-30 2021-07-27 병렬 광선 테스트를 갖는 광선 교차 회로
KR1020220170276A KR102540775B1 (ko) 2020-07-30 2022-12-08 병렬 광선 테스트를 갖는 광선 교차 회로
KR1020230070810A KR102668120B1 (ko) 2020-07-30 2023-06-01 병렬 광선 테스트를 갖는 광선 교차 회로

Country Status (5)

Country Link
US (1) US11367242B2 (ko)
EP (2) EP3945499A1 (ko)
KR (4) KR102476973B1 (ko)
CN (2) CN114092614B (ko)
TW (4) TWI808007B (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11704859B2 (en) * 2020-08-20 2023-07-18 Sony Interactive Entertainment LLC System and method for accelerated ray tracing
US11494969B2 (en) 2020-08-20 2022-11-08 Sony Interactive Entertainment LLC System and method for accelerated ray tracing with asynchronous operation and ray transformation
US20230252717A1 (en) * 2022-02-04 2023-08-10 Qualcomm Incorporated Ray tracing processor
US11908065B2 (en) * 2022-03-21 2024-02-20 Advanced Micro Devices, Inc. Stack-based ray traversal with dynamic multiple-node iterations

Family Cites Families (47)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6804128B2 (en) 2002-11-07 2004-10-12 Lionel O. Barthold Current modulation of direct current transmission lines
DE102004007835A1 (de) 2004-02-17 2005-09-15 Universität des Saarlandes Vorrichtung zur Darstellung von dynamischen komplexen Szenen
US9478062B2 (en) * 2006-09-19 2016-10-25 Imagination Technologies Limited Memory allocation in distributed memories for multiprocessing
US7830379B2 (en) * 2006-09-19 2010-11-09 Caustic Graphics, Inc. Architectures for parallelized intersection testing and shading for ray-tracing rendering
US8018457B2 (en) * 2006-09-19 2011-09-13 Caustic Graphics, Inc. Ray tracing system architectures and methods
US9665970B2 (en) 2006-09-19 2017-05-30 Imagination Technologies Limited Variable-sized concurrent grouping for multiprocessing
US7969434B2 (en) * 2006-09-19 2011-06-28 Caustic Graphics, Inc. Method, apparatus, and computer readable medium for accelerating intersection testing in ray-tracing rendering
US8237711B2 (en) 2007-11-19 2012-08-07 Caustic Graphics, Inc. Tracing of shader-generated ray groups using coupled intersection testing
US8212816B1 (en) 2007-12-17 2012-07-03 Nvidia Corporation System, method, and computer program product for parallel ray tracing traversal and intersection utilizing a single instruction multiple data (SIMD) processing architecture
WO2009117691A2 (en) * 2008-03-21 2009-09-24 Caustic Graphics, Inc Architectures for parallelized intersection testing and shading for ray-tracing rendering
US8471845B1 (en) 2009-07-31 2013-06-25 Nvidia Corporation System and method for constructing a bounding volume hierarchical structure
US8700877B2 (en) 2009-09-25 2014-04-15 Nvidia Corporation Address mapping for a parallel thread processor
US9224235B2 (en) * 2013-03-20 2015-12-29 Nvidia Corporation System, method, and computer program product for compression of a bounding volume hierarchy
US9355492B2 (en) 2013-05-15 2016-05-31 Nvidia Corporation System, method, and computer program product for utilizing a wavefront path tracer
US8817026B1 (en) 2014-02-13 2014-08-26 Raycast Systems, Inc. Computer hardware architecture and data structures for a ray traversal unit to support incoherent ray traversal
US9978171B2 (en) * 2014-07-29 2018-05-22 Nvidia Corporation Control of a sample mask from a fragment shader program
US9805498B2 (en) * 2015-02-06 2017-10-31 Intel Corporation Method and apparatus for direct and interactive ray tracing of a subdivision surface
GB2538347B (en) 2015-03-05 2018-01-03 Imagination Tech Ltd Systems and methods for distributed scalable ray processing
US9984492B2 (en) 2015-04-02 2018-05-29 Qualcomm Incorporated Efficient hierarchy traversal in ray tracing applications
US9773340B2 (en) * 2015-06-12 2017-09-26 Qualcomm Incorporated Rendering using ray tracing to generate a visibility stream
US10706608B2 (en) * 2016-01-19 2020-07-07 Nvidia Corporation Tree traversal with backtracking in constant time
US10210593B2 (en) 2016-01-28 2019-02-19 Qualcomm Incorporated Adaptive context switching
US11341110B2 (en) 2016-03-21 2022-05-24 Imagination Technologies Limited Hierarchy merging
US10614611B2 (en) 2017-04-07 2020-04-07 Intel Corporation Apparatus and method for implementing bounding volume hierarchy (BVH) operations on tesselation hardware
US11360808B2 (en) 2017-04-09 2022-06-14 Intel Corporation Efficient thread group scheduling
US10467796B2 (en) * 2017-04-17 2019-11-05 Intel Corporation Graphics system with additional context
US10417807B2 (en) * 2017-07-13 2019-09-17 Imagination Technologies Limited Hybrid hierarchy of bounding and grid structures for ray tracing
US10074210B1 (en) * 2017-07-25 2018-09-11 Apple Inc. Punch-through techniques for graphics processing
US10580195B2 (en) * 2017-11-20 2020-03-03 Microsoft Technology Licensing, Llc Ray-triangle intersection testing with tetrahedral planes
US10546393B2 (en) 2017-12-30 2020-01-28 Intel Corporation Compression in machine learning and deep learning processing
US10839475B2 (en) * 2018-04-11 2020-11-17 Intel IP Corporation Apparatus and method for compressing leaf nodes of a bounding volume hierarchy (BVH)
US10957095B2 (en) * 2018-08-06 2021-03-23 Intel Corporation Programmable ray tracing with hardware acceleration on a graphics processor
US10672178B2 (en) 2018-08-08 2020-06-02 Alvin D. Zimmerman Ray traversal with virtual grids
US10930022B2 (en) 2018-08-09 2021-02-23 Nvidia Corporation Motion adaptive rendering using variable rate shading
US10825230B2 (en) 2018-08-10 2020-11-03 Nvidia Corporation Watertight ray triangle intersection
US10810785B2 (en) 2018-08-10 2020-10-20 Nvidia Corporation Method for forward progress tree traversal mechanisms in hardware
US10867429B2 (en) * 2018-08-10 2020-12-15 Nvidia Corporation Query-specific behavioral modification of tree traversal
US10580196B1 (en) * 2018-08-10 2020-03-03 Nvidia Corporation Method for continued bounding volume hierarchy traversal on intersection without shader intervention
US11120608B2 (en) 2018-09-27 2021-09-14 Intel Corporation Apparatus and method for cross-instance front-to-back traversal for ray tracing heavily-instanced scenes
US10930050B2 (en) 2018-12-13 2021-02-23 Advanced Micro Devices, Inc. Mechanism for supporting discard functionality in a ray tracing context
US10706609B1 (en) 2018-12-13 2020-07-07 Advanced Micro Devices, Inc. Efficient data path for ray triangle intersection
US10909741B2 (en) * 2018-12-28 2021-02-02 Intel Corporation Speculative execution of hit and intersection shaders on programmable ray tracing architectures
US11915357B2 (en) * 2020-03-16 2024-02-27 Intel Corporation Apparatus and method for throttling a ray tracing pipeline
US11900498B2 (en) 2020-03-19 2024-02-13 Intel Corporation Apparatus and method for performing a stable and short latency sorting operation
US11315303B2 (en) 2020-03-25 2022-04-26 Arm Limited Graphics processing
US11302056B2 (en) 2020-06-10 2022-04-12 Nvidia Corporation Techniques for traversing data employed in ray tracing
US11335061B2 (en) * 2020-07-30 2022-05-17 Apple Inc. Ray intersection data structure with many-to-many mapping between bounding regions and primitives

Also Published As

Publication number Publication date
EP4296959A3 (en) 2024-04-03
TW202338744A (zh) 2023-10-01
TW202301280A (zh) 2023-01-01
CN115588068A (zh) 2023-01-10
CN114092614A (zh) 2022-02-25
TWI829602B (zh) 2024-01-11
TW202215379A (zh) 2022-04-16
KR20230087419A (ko) 2023-06-16
TWI808007B (zh) 2023-07-01
KR20220015342A (ko) 2022-02-08
EP4296959A2 (en) 2023-12-27
KR102476973B1 (ko) 2022-12-14
KR102540775B1 (ko) 2023-06-13
EP3945499A1 (en) 2022-02-02
TWI780839B (zh) 2022-10-11
CN114092614B (zh) 2022-11-22
TW202301281A (zh) 2023-01-01
US11367242B2 (en) 2022-06-21
KR20230006416A (ko) 2023-01-10
TWI808008B (zh) 2023-07-01
US20220036639A1 (en) 2022-02-03
KR102668120B1 (ko) 2024-05-23

Similar Documents

Publication Publication Date Title
CN116075863A (zh) 用于包括光线追踪的高效图形处理的装置和方法
KR102668120B1 (ko) 병렬 광선 테스트를 갖는 광선 교차 회로
CN116391207A (zh) 用于包括光线追踪的高效图形处理的设备和方法
US11120608B2 (en) Apparatus and method for cross-instance front-to-back traversal for ray tracing heavily-instanced scenes
US11436784B2 (en) SIMD group formation techniques for primitive testing associated with ray intersect traversal
JP2023048112A (ja) ツリー構造データ削減のための装置および方法
CN117581267A (zh) 用于同步光线追踪的栈访问扼制
US11989817B2 (en) Apparatus and method for high quality ray-traced level of detail transitions
CN115861517A (zh) 用于利用着色器调用图分析进行光线追踪的装置和方法
CN115775197A (zh) 用于利用重要性采样的随机拼贴照明的装置和方法
US11676327B2 (en) Temporal split techniques for motion blur and ray intersection
TW202416229A (zh) 用以偵測射線與圖形基元之間的相交的設備及方法,以及非暫時性電腦可讀儲存媒體

Legal Events

Date Code Title Description
A107 Divisional application of patent
A302 Request for accelerated examination