【问题标题】:GPGPU for 3d math用于 3D 数学的 GPGPU
【发布时间】:2012-12-06 06:24:55
【问题描述】:

我正在阅读很多关于 gpgpu 的内容,并且我目前正在学习 OpenGL。现在我必须自己编写所有数学(或使用现有的第 3 方库),我有了使用 gpu 而不是 cpu 来创建自己的数学库的想法。 (矩阵向量等)

但我没有找到任何使用 gpu 的 3d 数学库。

有具体原因吗?

也许 CPU 更擅长这些任务?

【问题讨论】:

    标签: opengl opencl gpgpu gpu


    【解决方案1】:

    寻找 CUDA 推力作为起点。我认为 GPU 将非常适合这项任务。 CPU 上的 SIMD 也值得研究,但不会像您希望的那样提供尽可能多的并行性。

    【讨论】:

    • 谢谢,但我想比 CUDA 更开放。我刚刚找到了看起来很有希望的 ViennaCL。但我也看到我必须移动记忆。对于像矩阵或向量这样微不足道的东西,这真的会给我带来性能提升吗?因为我有点害怕一旦把内存移到gpu上,cpu方案就已经完成了。
    • 也取决于数据的大小。请记住,您可能会使用 cudaMemCpy 或其他函数在 CPU 和 GPU 之间传输数据,因此您的数据集必须足够大,以证明您从 CUDA 获得的 SIMT 计算增益是合理的。还要考虑一些小事情,例如 Array of Structs 或 Structs of Arrays 对您的应用程序的性能优势。
    【解决方案2】:

    这取决于您一次要处理多少个向量或矩阵,以及您是否要绘制结果。

    GLSL(OpenGL Shading Language)已经内置了一个数学库。它具有矩阵数学、转置、逆运算的函数和运算符;矢量点和叉积;将向量乘以矩阵等。

    当您使用 OpenGL 绘制几何图形或其他内容时,您可以在 GPU 上的着色器中使用这些内置函数。在 3D 数学库中复制已经存在的内容毫无意义。

    如果您想在不绘制任何东西的情况下进行小规模矢量/矩阵数学运算,例如射线-平面相交测试,那么 CPU 会更好。将值复制到 GPU 并将结果复制回来将比仅在 CPU 上进行数学运算花费更长的时间。 (即使 GPU 实际上更快 - 今天的典型速度是 CPU 2Ghz+,GPU

    如果您想在不绘图的情况下进行“工业规模”矩阵/矢量数学运算,那么值得考虑 GPU。 (这就是 CUDA 和 OpenCL 存在的原因。)使用支持变换反馈和纹理缓冲区对象(通常是 V3+)的现代 OpenGL 版本,您可以在 GPU 上对数百到数千个矩阵/向量进行数学运算,而 OpenGL 4.3 甚至可以做到这一点使用计算着色器更容易。它不如 CUDA/OpenCL 方便或高效,但如果您已经了解 OpenGL,那就容易多了。

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      你可以试试arrayfire。最多支持4个维度,对常用功能有很多支持。目前仅支持 cuda,但不久将使用相同的界面添加对 opencl 的支持(我在 Accelereyes 工作,所以我知道这一点)。

      【讨论】:

        【解决方案4】:

        你想做什么样的操作?您可以将 OpenCL 内置 float4 及其默认运算符(+、-、*、/、点、sqrt)用于 Vector3 或 Vector4。您可以使用四元数和矩阵轻松扩展它,这就是我们所做的。

        http://github.com/erwincoumans/experiments

        该代码可以帮助您学习 OpenCL 以及 OpenGL 和 OpenCL-OpenGL 互操作。

        我的 github 存储库包含用于 3D Bullet 游戏物理库的 OpenCL 版本的简单 3d 数学函数,用于四元数、3d 向量和 3x3 矩阵。它还具有快速基数排序、前缀扫描、碰撞检测算法和刚体动力学,100% 在 GPU 上运行。它可以在 NVIDIA、AMD、Intel Windows 和 Mac OSX 上运行。 https://github.com/erwincoumans/experiments/blob/master/opencl/primitives/AdlPrimitives/Math/MathCL.h

        【讨论】:

          猜你喜欢
          • 2020-04-17
          • 1970-01-01
          • 1970-01-01
          • 2011-09-13
          • 2010-12-05
          • 1970-01-01
          • 2016-04-05
          • 1970-01-01
          • 2016-06-13
          相关资源
          最近更新 更多