Optix 7 - Ray generation launches

선비Sunbei·2023년 8월 29일
0

OptiX

목록 보기
10/25

이 section에서 optixLaunch 함수에 대한 설명이다.

ray generation launch는 optix API의 핵심이다. launch는 device에서 1D, 2D 또는 3D thread array를 호출하고 각 thread에 대한 ray generation program을 호출한다. ray generation program이 optixTrace를 호출하면 다른 program이 호출이 완료될 때까지 traverse, intersection, any-hit, cloesest hit, miss 및 exception program을 실행하기 위해 호출된다.

pipeline은 실행할 때마다 device 측 메모리가 필요하다. 이 공간은 API에 의해 할당되고 관리된다. launch resources는 pipeline 간에 공유될 수 있으므로 OptixDeviceContext가 소멸될 때만 해제될 수 있다.

pipeline을 실행을 시작하려면 optixLaunch 함수를 사용한다. 모든 launch는 CUDA stram을 사용하는 비동식이다. 동기화를 구현해야 하는 경우 CUDA stream 및 event에서 제공하는 메커니즘을 사용한다.

pipeline object, cuda stream, launch state 외에도 다음과 같은 SBT layout에 대한 정보를 제공해야 한다.

  • 다양한 유형의 record를 보유하는 SBT section의 base address
  • SBT record array의 최대 유효 index와 함께 byte 단위의 stride이다. stride은 주어진 index를 기반으로 record의 SBT 주소를 계산하는데 사용된다.

pipeline launch 파라미터의 값은 OptixPipelineCompileOptions 구조체의 pipelineLaunchParamsVariableName field에 지정된다. 이 값은 optixLaunch에 제공되는 pipelineParams라는 이름의 CUdeviceptr 파라미터를 통해 실행 시 결정된다.

  • optixLaunch의 pipelineParamsSize 인수에 지정된 크기가 Module에 지정된 변수 크기보다 작으면 매개 변수의 겹치지 않는 값이 정의되지 않는다. 반대로 크기가 더 크면 오류가 발생한다.

kernel은 실행 전에 pipelineParams의 복사본을 생성하므로 kernel은 실행 중에 pipelineParams 값을 수정할 수 있다. 즉, 후속 실행은 수정된 pipeline 매개변수 값으로 실행될 수 있다. 사용자는 optixLaunch 호출과 커널 시작 사이에 복사본과 동기화할 수 없다.

참고: 동일한 pipeline에서 파이프라인 파라미터 값이 다른 동시 실행은 실행의 직렬화를 발동한다. 동시성을 사용하려면 각 동시 실행에 대한 별도의 pipeline이 필요하다.

launch의 dimension도 지정해줘야 한다. 1Dim launch가 필요한 경우 width를 launch의 dimension로 사용하고, height와 depth를 1로 설정한다.
2Dim launch가 필요한 경우 width와 hjeight를 launch의 dimension으로 설정하고 깊이를 모두 1로 설정한다.

0개의 댓글