https://raytracing-docs.nvidia.com/optix7/guide/index.html#introduction#overview
Optix API는 CUDA 기반 Application에서 호출되는 CUDA 중심의 API이다.
이 API는 stateless, multi-threaded, asynchronous로 설계되어 메모리 관리 및 셰이더 컴파일과 같이 성능에 민감한 작업에 대한 명시적인 제어를 제공한다.
pimitives를 통해 vertex와 motion-based motion blur를 표현할 수 있는 장면의 경량 포현을 지원한다.
이 API에는 머신러닝 기반 노이즈 제거를 위한 커널과 신경망도 포함되어 있다.
OptiX Context는 단일 GPU를 제어한다.
컨텍스트는 CUDA와 마찬가지로 실행을 호출하는데 필요한 리소스를 디바이스에 할당할 수 있다.
호스트 기반으로 상태를 관리하는 데 사용되는 소수의 핸들 객체를 보유하게 된다. 이러한 핸들 객체는 컨텍스트가 파괴되면 자동으로 해제된다. 핸들 객체는 존재하는 경우 소량의 호스트 메모리를 사용하며, 사용중인 GPU 리소스의 크기와 무관하다.
Application은 acceleration structures(called builds) 생성, 컴파일 및 host-device 간 메모리 전송을 호출한다.
모든 API 함수는 CUDA 스트림을 사용하며, 해당되는 경우 비동기식으로 GPU 함수를 호출한다.
둘 이상의 스트림이 사용되는 경우, 애플리케이션은 GPU의 rece condition을 피하기 위해 CUDA event를 사용해야 한다.
Application은 멀티 GPU 기능을 지정할 수 있다.
효율적인 load balancing 또는 GPU 메모리 공유와 같은 멀티 GPU 기능은 애플리케이션 개발자가 직접 처리해야 한다.
효율성과 일관성을 위해 CUDA 커널과 달리 OptiX 런타임은 단일 레이와 같은 하나의 작업을 실행을 언제든지 다른 lane, warp 또는 Streaming Multiprocessor(SM)으로 이동할 수 있다.
따라서 애플리케이션은 OptiX에 제공되는 프로그램에서 공유 메모리, 동기화, 배리어 도는 기타 SM 스레드 전용 프로그래밍 구성을 할 수 없다.