---
# System prepended metadata

title: SGRT Notes

---

# SGRT Notes
## Big Picture
![](https://i.imgur.com/cseuFWC.png)
* CPU 負責處理場景，與建立 BVH，並載入到 DRAM 中
* SRP 是一個 programmable shader core，進行大部分與 rendering 相關的工作，並將 traversal 及 intersection 相關的工作交由 T&I Unit 執行
* T&I Unit 基於 [T&I Engine](https://my.eng.utah.edu/~cs6958/papers/HWRT-seminar/a160-nah.pdf)，是一個專用於 traversal 及 intersection 的 dedicated hardware
## SRP Unit
![](https://i.imgur.com/WAhmteD.png)
* SRP 基於 [ADRES](https://courses.cs.washington.edu/courses/cse591n/06au/papers/fpl_03_mei.pdf)，有 VLIW engine 和 CGRA，VLIW engine 負責通用計算、CGRA 負責執行 compute-intensive 的 kernel。
* 有 320KB 的 Scratchpad Memory 及 4KB 的 data cache。
  * camera、material、light、ray、intersection point 放置在 Scratchpad Memory
  * primitive 太多，而且 access pattern 通常是 random 的，因此放在 external DRAM，透過 Data Cache 存取
* kernel 在編譯期透過 [modulo scheduling](https://past.date-conference.com/proceedings-archive/2003/DATE03/PDFFILES/04B_2.PDF) 將 loop 映射到 SRP 上
### VLIW engine
* 用途：drive T&I Unit、control flow in rendering
### CGRA
* 在每個 clock cycle，FU 會從 Configuration Memory 拿 configuration data，並使用 software pipeline 的方式對 kernel 進行平行運算
* 用途：ray generation、shading
### FU
![](https://i.imgur.com/Vx2ISkX.png)
### Texture Unit
* texel address calculation
* texture memory access via texture cache
* conversion
* filtering
## T&I Unit
![](https://i.imgur.com/WQQNxCX.png)
* T&I 是最 resource-consuming 的操作，因此 hardwired logic 能減低能源使用量
* T&I Unit 分為 Ray Dispatch Unit (RD)、Traversal Unit (TRV)、Intersection Unit (IST)
### TRV Unit
* 負責 traversal 和 AABB intersection test
* traversal 基於 [Restart Trail for Stackless BVH Traversal](https://dl.acm.org/doi/pdf/10.5555/1921479.1921496)
* 不需要 scheduling logic，因為 ray 在 pipeline 結束後可以直接送到目的地
* 共有 4 個 floating-point adder、4 個 floating-point multiplier、11 個 floating-point comparator
### IST Unit
* triangle intersection 基於 [Wald's algorithm](http://www.sci.utah.edu/~wald/PhD/wald_phd.pdf)
* 共有 12 個 floating-point adder、10 個 floating-point multiplier、1 個 reciprocal unit、5 個 floating-point comparator
### Ray Accumulation Unit (RAU)
* TRV 和 IST 都有 RAU，當 cache miss 時，該 ray 會存在 RAU 中暫存
### Parallel Pipelined Traversal Unit
![](https://i.imgur.com/JnRXhp9.png)
* 傳統的方法是使用三個 stage 的 pipeline（如左圖），分為 TRV_PRE（Leaf Node Test）、TRV_AABB（Ray-AABB Test）、TRV_POST（Stack Operation）
* 然而，不一定每個 ray 都會進入 TRV_AABB 及 TRV_POST，所以有時必須 inactivate TRV_AABB 和 TRV_POST，造成效率降低
* 右圖為這篇論文採用的方法，將原先的 pipeline 分為三個 independent 的 stage
* crossbar 不需要 fully-connected
## Kernel Optimization for SRP
### Iterative Batch-based Ray Tracing Algorithm
* 為了讓 CGRA 有夠多的 loop-level parallelism 並且減少 prolog/epilog 的 overhead，將 256 個 ray 集成一個 batch，透過 software pipeline 的方式平行處理
* 為了消除 rendering 中的 branch，使用 filter kernel 集合相同種類的 data，分配到其他 kernel 中進一步處理
* 盡可能利用 SRP 支援的 SIMD intrinsics，例如用於計算 position（xyzw）以及 color（rgba）
* 提前將 shading color 計算好並放到 shadow ray data 中，當 T&I 得到結果後，就能直接更新 pixel color 而不用儲存大量的 shading state

![](https://i.imgur.com/sXRLhnx.png)
* 共有 8 個 kernel：
  * Calculating normal vector of intersection point
  * Filtering the intersection point which does not need to generate the reflection/refraction ray and which does not need to do texture mapping
  * Reflection ray generation
  * Refraction ray generation
  * Filtering the intersection point which does not need to shade
  * Shading
  * Shadow ray generation
  * Primary ray generation

![](https://i.imgur.com/FiydWjQ.png)
* T&I Unit 會將光線種類與是否相交分為四類，每一類會讓 SRP 執行不同的 kernel：
  * shadow ray & hit
  * shadow ray & no hit
  * other ray & hit
  * other ray & no hit
### Tile-based Ray Tracing
* 採用 20x32 的 tile 進行 rendering，如此可以讓 frame buffer 放在 scratch-pad memory，並且能使 data cache、texture cache 及 T&I cache 的 hit ratio 增加
### Multiple Buffering for SRP-T&I Interface
![](https://i.imgur.com/RYEYK8j.png)
* 為了讓 SRP 和 T&I 能並行處理，Ray Buffer 採用 triple buffer、T&I 採用 double buffer
* 上圖 Ray Buffer 的 batch 1 經由 T&I Unit 計算完交點資訊後，儲存至 Intersection Buffer 的 batch 1
* 上圖 Ray Buffer 的 batch 1 與 Intersection Buffer 的 batch 1 可計算得 secondary ray，並儲存至 Ray Buffer 的 batch 3
## Compilation and simulation
![](https://i.imgur.com/0LXvX8m.png)