例如:当我在 taichi 顶层并行 for 内写了很多循环以及 if 来处理不同情况时,应该是会显著降低运行效率的。我的想法是把原本渲染像素的并行 for 内的大量循环提升,不需要同步每个像素的进度(不同像素的运行的循环次数、指令长度有非常大不同,如果提升肯定可以减少每个子任务实际运行指令长度的差异),这样最后结果不会有很大差异,无非是不同像素采样次数不同而已,视觉上差异不大,这样应该会显著带来性能提升?
film = ti.Vector.field(n=3,dtype=ti.f32,shape=(width,height))
for i, j in film:
rgb = tm.vec3(0.0)
for n in range(sample_per_pixel):
rgb += trace(ray)
rgb = rgb/sample_per_pixel
some gamma
我的办法法是改成:
film = ti.Vector.field(n=3,dtype=ti.f32,shape=(width,height))
dummy = ti.field(dtype=ti.f32,shape=(width,height,sample_per_pixel))
for i, j, _ in dummy:
film[i,j] += trace(ray)
for i, j in film:
film[i,j] = film[i,j]/sample_per_pixel