我知道OpenCL和CUDA。这些在移动设备中是不支持的。但他们中的大多数支持OpenGL ES。因此,我想学习使用OpenGL ES阴影语言进行一般计算。比如OpenCL或CUDA,在OpenGLSL。
据我所知,到目前为止,我可以创建顶点和片段着色器。
PS:
我看了一份报纸使用移动GPU进行通用计算。他们的实验是在一种规格如下的SoC上进行的:
在FFT(128*128)上可以得到3X的加速比。我认为这些结果是好的。你们觉得值得这么做吗。所以,主要的瓶颈是内存访问,对吗?
正如许多人所说的那样,不值得在OpenGL ES上进行通用计算。因此,也不值得期待支持OpenCL的移动设备。对吗?在我看来,OpenGL ES是OpenCL的推动者。
发布于 2012-12-17 09:44:25
有些平台不支持任何浮点格式。一些平台(powervr,tegra,adreno)支持半浮点(16位浮点数)表面,它既可以用作渲染目标,也可以用作纹理。在某些平台(adreno,我相信是最新的powervr)上存在完全的浮点支持,但这是相当罕见的。
所以这在很大程度上取决于你期望做什么样的计算,什么样的精度是可以接受的,以及你的目标平台是什么。
同时考虑到当前的opengl es (2.0)没有完全的IEEE浮点数要求,因此结果可能会有所不同。
最后,它是否值得,这在很大程度上取决于您的批处理大小;访问结果(即从呈现目标读取像素)可能太慢,从而否定了性能增益。
一个接一个地指出你的要点:
您可以创建一个纹理,并形成一个FBO从中。此外,您还可以将数据以常量(制服)或每顶点数据流(varyings/attrib)的形式提供给着色器。
您可以使用正常的纹理处理函数写入纹理。
当FBO被绑定时,您可以使用片段着色器对其进行写入。稍后,您可以通过读取绑定到FBO的纹理来访问结果。
没有。
您可以使用glFinish()刷新管道。但是,如果您试图访问纹理数据,驱动程序应该会隐式地导致管道刷新。
发布于 2012-12-17 13:25:40
在我进入OpenCL之前,当我有大量的数字数据时,我会通过rgba图像将数字数据作为像素数据提供给GPU,然后对其进行操作:这是一种快速的方法,可以处理大量的数字集以进行数学操作,尽管随后您必须将缓冲区复制回CPU以提取更改,所以这取决于您需要用多少数据来操作它,以及您有多少可用的图形RAM和内核的数量等等。
https://stackoverflow.com/questions/13909779
复制相似问题