Opengl es 如何使用OpenGL SL进行通用计算
我知道OpenCL和CUDA。这些在移动设备中不受支持。但它们大多数都支持OpenGLES。所以我想学习使用OpenGL ES着色语言进行通用计算。像OpenCL或CUDA,在OpenGLSL中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: 我读了一篇论
- 我可以使用多少种缓冲区?它们是什么李>
- 如何操作这些缓冲区
- 使用片段着色器时可以操纵哪个缓冲区
- 使用顶点着色器时可以操纵哪个缓冲区
- GPU中是否有任何同步功能(我指的是GPU中的同步。就像OpenCL或CUDA中块中同步的线程)
我读了一篇论文。他们的实验在Nvidia Tegra SoC上进行,规格如下:
正如许多人所说,在OpenGL ES上进行通用计算是不值得的。因此,也不值得期待支持OpenCL的移动设备。对吗?在我看来,OpenGL ES是OpenCL的基础,有些平台不支持任何浮点格式。某些平台(powervr、tegra、adreno)支持半浮点(16位浮点)曲面,该曲面既可以用作渲染目标,也可以用作纹理。一些平台(adreno和我相信最新的powervr)上存在完全浮动支持,但这种支持非常罕见 因此,这在很大程度上取决于您希望进行的计算类型、您可以接受的精度以及您的目标平台 还要考虑到当前gen opengl es(2.0)没有完整的IEEE浮点要求,因此结果可能会有所不同 最后,它是否值得,在很大程度上取决于你的批量大小;访问结果(即,从渲染目标读回像素)的速度可能非常慢,从而抵消了性能增益 要逐一解决您的要点:
- 我可以使用多少种缓冲区?它们是什么
- 如何操作这些缓冲区
- 使用片段着色器时可以操纵哪个缓冲区
- 使用顶点着色器时可以操纵哪个缓冲区
- 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(),并大大加快某些读取操作。