另外“要么渲染要么光追” 这也根本不是问题
GPU的command processor在不同阶段将不同数量的任务打包成wavefront。比如在顶点阶段每64个顶点为一组,成为一个wavefront,像素阶段每64个像素为一个wavefront。
那光线生成的时候我们也可以猜想一下,是64束光线为一个wavefront。
所以当CU在跑顶点任务的wavefront,那就没办法跑像素任务的wavefront。因为SIMD单元同一时候只能运行相同的指令,而顶点和像素的任务指令有可能是不同的,没办法打包在一起。
那不但一个CU没有办法“既渲染又光追”,她甚至还不能“既顶点又像素”。
但是CU她是个“***”,一个CU可以维持多个wavefront作为备胎。当这个wavefront遇到延迟,比如因为等待BVH求交结果而导致stall,那CU马上可以切换其他的备胎wavefront运行。上一时钟还在跑光追的wavefront,下一时钟可能就立刻切换成像素的wavefront。
这本来就是是SIMD的特性。GPU不都这样的么。