gpt4 book ai didi

opengl-es - 如何使用 OpenGL SL 进行通用计算

转载 作者:行者123 更新时间:2023-12-02 22:19:39 27 4
gpt4 key购买 nike

我了解 OpenCL 和 CUDA。移动设备不支持这些。但它们中的大多数都支持 OpenGL ES。所以我想学习使用 OpenGL ES 着色语言进行通用计算。类似于 OpenCL 或 CUDA,在 OpenGLSL 中。

  • 我可以使用多少种缓冲区?这些是什么?
  • 如何操作这些缓冲区

据我所知,到目前为止我可以创建顶点和片段着色器。

  • 当我使用片段着色器时我可以操作哪个缓冲区
  • 当我使用顶点着色器时我可以操作哪个缓冲区
  • GPU中有没有synchronized的函数(我指的是GPU中的synchronization,比如OpenCL或者CUDA中block中的threadsynchronized)

附言:
我读了一篇论文 Using Mobile GPU for General-Purpose Computing .他们的实验是在具有以下规范的 Nvidia Tegra SoC 上进行的:

  1. 1GHz 双核 ARM Cortex-A9 CPU,
  2. 1GB 内存
  3. 运行频率为 333MHz 的 Nvidia 超低功耗 GeForce GPU 和 512MB 闪存

它可以在 FFT(128*128) 上获得 3 倍的加速。我认为这些结果是好的。大家觉得值不值得做。那么主要的瓶颈是内存访问权吗?

正如许多人所说,不值得在 OpenGL ES 上进行通用计算。因此,也不值得期待移动设备支持 OpenCL。正确的?在我看来,OpenGL ES 是 OpenCL 的火种

最佳答案

一些平台不支持任何浮点格式。一些平台(powervr、tegra、adreno)支持半浮点(16 位浮点)表面,它既可以用作渲染目标,也可以用作纹理。某些平台(adreno,我相信最新的 powervr)存在完全 float 支持,但相当罕见。

因此这在很大程度上取决于您希望进行何种计算、您可以接受何种精度以及您的目标平台是什么。

还要考虑到当前一代 opengl es (2.0) 没有完整的 IEEE float 要求,因此结果可能会有所不同。

最后,它是否值得在很大程度上取决于您的批量大小;访问结果(即从渲染目标读回像素)可能会非常慢,以至于抵消了性能提升。

要一一解决您的要点:

  • 我可以使用多少种缓冲区?它们是什么?

您可以创建纹理并从中形成 FBO。此外,您可以将数据作为常量(制服)或逐顶点数据流(变量/属性)提供给着色器。

  • 如何操作这些缓冲区

您可以使用正常的纹理处理函数写入纹理。

  • 当我使用片段着色器时我可以操作哪个缓冲区

绑定(bind) FBO 后,您可以使用片段着色器写入它。稍后,您可以通过读取绑定(bind)到 FBO 的纹理来访问结果。

  • 当我使用顶点着色器时我可以操作哪个缓冲区

没有。

  • GPU有没有同步函数

您可以使用 glFinish() 刷新管道。不过,如果您尝试访问纹理数据,驱动程序应该会隐式地导致管道刷新。

关于opengl-es - 如何使用 OpenGL SL 进行通用计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13909779/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com