【问题标题】:Is Hardware Accelerated Min/Max Ray Casting Available with Cuda/Optix?Cuda/Optix 是否提供硬件加速的最小/最大光线投射?
【发布时间】:2021-07-02 19:01:59
【问题描述】:

我想知道是否可以在 Cuda 或 Optix 中加速计算沿 3D 体积中从一点投射到另一点的线/射线的最小值和最大值。

如果没有,Nvidia GPU 上是否有任何特殊硬件可以加速此功能(特别是在 Volta GPU 或 Tesla K80 上)?

【问题讨论】:

  • 在 CUDA 中,只有自己编写代码才能实现。 CUDA 是一个通用计算 API,仅此而已。 CUDA 没有内置光线投射设施,API 或语言中也没有任何潜在的硬件加速器(如果确实存在的话)
  • @talonmies 但我具体询问的是 Optix,这是 Nvidia 的加速光线追踪 API,如果可用,它在内部使用 Cuda 和 RTX 技术。在维基百科上,它说 RTX 在 Volta 上运行,这是我的目标架构,并通过 Tensor 核心加速光线追踪。但我看到 Optix 不仅通过特殊硬件,还通过算法来加速光线投射。我的问题仍然存在,我是否可以将 Optix 用于上述任务。据我了解,您可以将 Optix 内核与 Cuda 内核结合使用。
  • 所以当您写“如果在 Cuda 或 Optix 中可能”时,您不是指 CUDA,而是指 Optix?
  • 我不确定除了使用 Optix 之外是否还有可以在 Cuda 中使用的技术,所以我将其保持打开状态。 GPU 上有特殊的硬件来加速某些事情,例如三线性插值。
  • RTX GPU 提供硬件加速光线追踪。主要的 RTX 引擎提供硬件加速来确定光线在 BVH 中击中的第一件事物。根据我认为的“光线投射”的常见定义,这似乎是定义。我不确定最小/最大光线投射是什么,但根据您在此处的定义,它可能涉及 RTX 引擎中的多次光线遍历。这些都没有在 CUDA 中公开(在 CUDA 中没有办法访问 RTX 引擎),但是它在 Optix 中公开。

标签: cuda nvidia raycasting optix


【解决方案1】:

对标题问题的简短回答是:是的,CUDA 和 OptiX 中提供了硬件加速的光线投射。较长的问题有多种解释,因此我将尝试概述不同的可能性。

我看到的问题的不同轴是:CUDA 与 OptiX、pre-RTX GPU 与 RTX GPU(例如,Volta 与 Ampere)、最小射线查询与最大射线查询,以及可能的表面表示与体积表示.

pre-RTX 与 RTX GPU:

也许很明显,由于 GPU 的高度并行性,K80 或 GV100 GPU 与 CPU 相比可用于加速光线投射。但是,这些 RTX 之前的 GPU 没有任何专门用于光线投射的硬件。有一些不是专门用于光线投射的特殊用途硬件,您可能可以通过各种方式利用它们,因此由您来识别和设计这些类型的硬件加速黑客。

从 Turing 架构开始的 RTX GPU 确实具有专用于光线投射的专用硬件,因此它们对光线查询的加速甚至比使用任何 GPU 并行化光线查询所获得的加速效果还要好。

CUDA 与 OptiX:

CUDA 可用于任何 GPU 上的并行光线追踪,但它目前(在我写这篇文章时)不支持访问专门的 RTX 硬件以进行光线追踪。使用 CUDA 时,您将负责编写所有代码来构建加速结构(例如 BVH)并通过加速结构遍历光线,并且您需要编写相交和着色或命中处理程序。

OptiX、Direct-X 和 Vulkan 都允许您访问 RTX GPU 中的专用光线追踪硬件。通过使用这些 API,可以实现更高的速度和更低的功耗要求,而且它们也需要更少的努力,因为为您提供了通过加速结构的交叉点和光线遍历。这些 API 还为生产级光线投射提供其他常用功能,例如实例化、变换、运动模糊,以及用于处理光线命中和未命中的单线程编程模型。

最小与最大射线查询:

OptiX 具有返回最接近射线原点的表面交点的内置功能,即“最小查询”。 OptiX 没有为最远的交叉点提供类似的单一查询(我假设您所说的“最大”是指这个)。要找到最大距离命中,或距离射线上第二个点最近的命中,您需要跟踪多个命中并跟踪您想要的命中。

在 CUDA 中,您可以自行检测最小和最大查询,因此只要您可以编写所有代码,您就可以做任何您想做的事情。

表面与体积:

您的问题提到了“3D 体积”,它有多种含义,所以只是为了澄清一下:

OptiX (+ DirectX + Vulkan) 是用于表面光线追踪的 API,例如三角形网格。 RTX 专用硬件专用于加速基于表面的表示的光线追踪。

如果您的“3D 体积”是指体素数据或四面体网格等体积表示,那么基于表面的光线追踪可能不是投射光线查询的最快或最合适的方法。在这种情况下,您可能希望在 CUDA 中使用“光线行进”技术,或者查看用于 GPU 的体积光线投射 API,例如 NanoVDB。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 2016-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多