首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用OpenGL SL进行通用计算

如何使用OpenGL SL进行通用计算
EN

Stack Overflow用户
提问于 2012-12-17 07:09:49
回答 2查看 1.9K关注 0票数 2

我知道OpenCL和CUDA。这些在移动设备中是不支持的。但他们中的大多数支持OpenGL ES。因此,我想学习使用OpenGL ES阴影语言进行一般计算。比如OpenCL或CUDA,在OpenGLSL。

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

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

  • 当我使用片段着色器时,我可以操作哪个缓冲区?
  • 当我使用顶点着色器时,我可以操作哪个缓冲区?
  • 在GPU中有任何同步功能(我指的是GPU中的同步)。类似于OpenCL或CUDA中块中同步的线程)

PS:

我看了一份报纸使用移动GPU进行通用计算。他们的实验是在一种规格如下的SoC上进行的:

  1. 1 1GHz双核臂皮质A9 CPU,
  2. 1GB内存
  3. Nvidia超低功耗GeForce GPU,运行在333 low,以及512 of的闪存。

在FFT(128*128)上可以得到3X的加速比。我认为这些结果是好的。你们觉得值得这么做吗。所以,主要的瓶颈是内存访问,对吗?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-17 09:44:25

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

所以这在很大程度上取决于你期望做什么样的计算,什么样的精度是可以接受的,以及你的目标平台是什么。

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

最后,它是否值得,这在很大程度上取决于您的批处理大小;访问结果(即从呈现目标读取像素)可能太慢,从而否定了性能增益。

一个接一个地指出你的要点:

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

您可以创建一个纹理,并形成一个FBO从中。此外,您还可以将数据以常量(制服)或每顶点数据流(varyings/attrib)的形式提供给着色器。

  • 如何操作这些缓冲区

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

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

当FBO被绑定时,您可以使用片段着色器对其进行写入。稍后,您可以通过读取绑定到FBO的纹理来访问结果。

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

没有。

  • GPU中有同步功能吗?

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

票数 4
EN

Stack Overflow用户

发布于 2012-12-17 13:25:40

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13909779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档