Overhaul of the Integration Kernels

大修一体化核心

自从Octane开始以来,集成内核就有一个CUDA线程来计算一个完整的采样。我们出于各种原因更改了此设置,主要的原因是集成内核变得非常庞大且无法优化。而且OSLOpenCL几乎不可能以这种方式实现。为了解决该问题,我们将计算采样的大任务分成了较小的步骤,然后由CUDA线程逐一处理。即与过去相比,发生了更多的内核调用。

这种新方法带来两个主要后果:Octane需要保留内核调用之间并行计算的每个采样的信息,这需要额外的GPU内存。而且,由于必须做更多的工作才能进行更多的内核启动,因此给CPU施加了更多压力。为了让您对内核执行有一些控制,我们在直接照明/路径跟踪/信息通道内核节点中添加了两个选项:

+“并行采样”控制我们并行计算的采样数。如果将其设置为较小的值,则Octane需要较少的内存来存储采样状态,但是很可能会使渲染速度变慢。如果将其设置为较高的值,则需要更多的图形内存,渲染速度更快。性能的变化取决于场景,GPU架构以及GPU拥有的着色器处理器的数量。

+“最大图块采样数”控制Octane渲染的每个像素的采样数,直到获取结果并将其存储在胶片缓冲区中为止。较高的数字表示结果很少到达胶片缓冲区,但是减少了渲染期间的CPU开销,因此也可以提高性能。

Comparison for VRAM/RAM Usage Capabilities

VRAM / RAM使用能力比较

这是V2V3之间的比较表

V2

V3

Render buffers

VRAM(gpu)

VRAM(gpu)+RAM(system)

Textures

out-of-core

out-of-core

VRAM

VRAM+RAM

VRAM

VRAM+RAM

Geometry

VRAM

Triangles count: Max. 19.6 millions

VRAM

Triangles count: Max 76 millions

Speed

速度

很难量化对性能的影响,但是我们在测试过程中看到的是,在简单的场景(如国际象棋或康奈尔盒子等)中,旧系统很难被击败。 那是因为在这种类型的场景中,相邻像素的采样非常连贯(相似),这正是GPU所喜欢并且可以非常快速地处理的,因为CUDA线程几乎完成了相同的任务,而不必彼此等待。 在这些情况下,通常会留下大量的VRAM,这意味着您可以将“并行采样”提高到最大,从而使新系统的速度与旧系统一样快或几乎与旧系统一样快。

问题在于,在实际的生产场景中,CUDA线程的执行速度非常快,导致CUDA线程要等待很长时间才能使其他CUDA线程完成某些工作,即打动拇指。对于这些更复杂的场景,新系统通常会更好地工作,因为通过处理每个步骤的方式来提高一致性。而且我们可以进一步优化内核,因为它们的任务范围要狭窄得多。因此,即使使用默认的并行采样设置或使用较低的值(通常在内存不足的情况下),您通常都会看到复杂场景的加速。

TLDR Version

TLDR版本

在简单的场景中,您还有足够的VRAM:将``并行采样''增加到最大数量。

VRAM稀疏的复杂场景中:将其设置为最大值而不耗尽内存。通常它应该比以前更快,或者至少以大致相同的速度渲染。

Moved Film Buffers to the Host and Tiled Rendering

将影片缓冲区移至主机并进行平铺渲染

渲染核心中的第二个主要重构是我们存储渲染结果的方式。在v3之前,每个GPU都有自己的影片缓冲区,其中将部分计算出的采样进行汇总。这有很多缺点:例如,CUDA错误通常意味着您丢失了该GPU计算的采样,或者崩溃/断开连接的从设备意味着您丢失了其采样。另一个问题是较大的图像意味着较大的胶片缓冲,尤其是在启用渲染过程的情况下。是的,由于它非常占用内存,因此深图像渲染几乎是不可能的。实施保存和恢复将是一件痛苦的事情。

为了解决这些问题,我们将影片缓冲区移到了主机内存中。听起来并不令人兴奋,但会带来一些重大后果。最大的问题是,Octane现在必须处理GPU产生的大量数据。特别是在多GPU设置中或使用网络渲染时。作为解决方案,我们为除PMC(无法进行分块渲染)以外的所有集成内核引入了分块渲染。磁贴相对较大(与大多数其他渲染相比),我们尝试了尽可能多地隐藏磁贴渲染。

当然,系统内存中的胶片缓冲区意味着更多的内存使用,因此在提高分辨率之前,请确保已安装足够的RAM(现在可以直接这样做)。另一个后果是,CPU必须将来自各种源(例如本地GPU或网络渲染从设备)的渲染结果合并到需要某些计算能力的影片缓冲区中。我们试图优化该区域,但是显然会对CPU使用率产生影响。如果您在这里遇到问题,请告诉我们。同样,增加内核中的“最大切片采样”选项可以相应地减少开销(请参见上文)。现在,信息传递也可以并行呈现,因为我们现在可以在GPU上重用用于呈现美丽传递的相同图块缓冲区。

Overhauled Work Distribution in Network Rendering

网络渲染中的大修工作分配

我们还必须修改渲染工作如何分配给网络渲染从属,以及如何将其结果发送回去,以使其与新的影片缓冲区一起工作。要解决的最大问题是,将采样传输到主节点要比在从属节点上生成采样慢1-2个数量级。解决此问题的唯一方法是在从属设备上聚合采样,并从结果传输中解耦工作分配,这具有很好的副作用,即在渲染高分辨率(如立体声GearVR立方体贴图)时不再限制从属设备。

当然,从属服务器上的缓存结果意味着它们比过去需要更多的系统内存,如果从属服务器渲染的图块均匀分布,则从属服务器将生成一大堆缓存的图块,需要将其传输到主服务器最终。即渲染完所有采样后,主服务器仍然需要从属服务器接收所有那些缓存的结果,这可能要花费一些时间。为了解决此问题,我们向支持平铺渲染的内核节点引入了一个附加选项:

如果启用了“最小化网络流量”,则仅将同一图块分配给网络渲染从属,直到达到该图块的最大采样/像素,然后才将下一个图块分配给从属。本地GPU完成的工作不受此选项的影响。这样,从站可以将其所有结果合并到相同的缓存切片中,直到主节点切换到其他切片。当然,您应该将最大采样数/像素设置为合理的值,否则网络渲染将在很长时间内集中在第一个图块上。

1

赶快留个言打破零评论!~

返回顶部

显示

忘记密码?

显示

显示

获取验证码

Close