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

Opengl es 如何使用OpenGL SL进行通用计算,opengl-es,cuda,opencl,Opengl Es,Cuda,Opencl,我知道OpenCL和CUDA。这些在移动设备中不受支持。但它们大多数都支持OpenGLES。所以我想学习使用OpenGL ES着色语言进行通用计算。像OpenCL或CUDA,在OpenGLSL中 我可以使用多少种缓冲区?它们是什么 如何操作这些缓冲区 据我所知,到目前为止,我可以创建顶点和片段着色器 使用片段着色器时可以操纵哪个缓冲区 使用顶点着色器时可以操纵哪个缓冲区 GPU中是否有任何同步功能(我指的是GPU中的同步。就像OpenCL或CUDA中块中同步的线程) PS: 我读了一篇论

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

  • 我可以使用多少种缓冲区?它们是什么
  • 如何操作这些缓冲区
据我所知,到目前为止,我可以创建顶点和片段着色器

  • 使用片段着色器时可以操纵哪个缓冲区
  • 使用顶点着色器时可以操纵哪个缓冲区
  • GPU中是否有任何同步功能(我指的是GPU中的同步。就像OpenCL或CUDA中块中同步的线程)
PS:
我读了一篇论文。他们的实验在Nvidia Tegra SoC上进行,规格如下:

  • 1GHz双核ARM Cortex-A9 CPU
  • 1GB内存
  • Nvidia超低功耗GeForce GPU,运行频率为333MHz,闪存容量为512MB
  • 它可以在FFT上获得3倍的加速比(128*128)。我认为这些结果是好的。你们觉得这样做值得吗。那么主要的瓶颈是内存访问权


    正如许多人所说,在OpenGL ES上进行通用计算是不值得的。因此,也不值得期待支持OpenCL的移动设备。对吗?在我看来,OpenGL ES是OpenCL的基础,有些平台不支持任何浮点格式。某些平台(powervr、tegra、adreno)支持半浮点(16位浮点)曲面,该曲面既可以用作渲染目标,也可以用作纹理。一些平台(adreno和我相信最新的powervr)上存在完全浮动支持,但这种支持非常罕见

    因此,这在很大程度上取决于您希望进行的计算类型、您可以接受的精度以及您的目标平台

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

    最后,它是否值得,在很大程度上取决于你的批量大小;访问结果(即,从渲染目标读回像素)的速度可能非常慢,从而抵消了性能增益

    要逐一解决您的要点:

    • 我可以使用多少种缓冲区?它们是什么
    您可以创建一个纹理,并由此形成FBO。此外,还可以将数据作为常量(统一)或逐顶点数据流(变量/属性)提供给着色器

    • 如何操作这些缓冲区
    可以使用普通纹理处理函数写入纹理

    • 使用片段着色器时可以操纵哪个缓冲区
    绑定FBO时,可以使用片段着色器对其进行写入。稍后,可以通过读取绑定到FBO的纹理来访问结果

    • 使用顶点着色器时可以操纵哪个缓冲区
    没有

    • GPU中是否有任何同步功能

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

    在我进入OpenCL之前,当我有大量数字数据时,我会通过rgba图像将数字数据作为像素数据提供给GPU,然后对其进行操作:这是一种很好的快速的方法来处理大量的数学运算集,尽管你必须从缓冲区复制回CPU才能提取变化,所以这取决于你需要用这种方法处理多少数据,以及它是否值得,以及您有多少可用的图形RAM和内核数量等。

    您的目标是哪个平台?@TraxNet:我现在不知道。但我认为从今天(2012-12-17)起,它应该支持opengl ES 2.0,在android上,这是正确的答案。@Jari Komppa:我认为该平台应该支持opengl ES 2.0。并且可以支持32位浮点运算。实际上我对GLSL知之甚少。我找不到更多关于SL的通用材料computing@TraxNet-没错,OpenGL ES 3.0和为其设计的硬件将完全改变画面。@Samuel-我相当肯定这是事实,主要是因为它不值得,如果只是因为纹理->内存提取速度太慢的原因。iOS上可能有一个快捷方式。虽然支持OpenGL ES 2.0的所有iOS设备都支持半浮动纹理,但只有最新的设备支持渲染到半浮动目标(iPad 2、3、iPhone 5,我相信还有4S)。这里提到了一些细节:。据我所知,它们中没有一个是完全浮动的。从渲染输出的读取速度来看,iOS确实允许从5.0开始使用纹理缓存直接访问纹理。这可以避免glReadPixels(),并大大加快某些读取操作。