OpenCL与OpenGL互操作的优势

Meg*_*raj 5 opengl gpgpu opencl

当我们可以使用OpenGL获得良好的速度,因为它使用纹理内存和许多内置图形功能(混合,mip贴图等).

为什么我们需要OpenCL(缓慢使用openCL缓冲区)与OpenGL的互操作性,因为我们可以将渲染与计算结合起来,或者是否有诸如性能等优点.

我只是想知道这个的主要优点,是否有任何已发表的论文表明他们通过使用OpenGL与OpenCL的互操作性或任何在速度和质量方面表现出性能提升的证据来提高性能.

Dav*_*hop 12

OpenGL就是实时光栅化图形.由于它的范围有限,因此可以针对该任务进行更优化,并且大多数硬件也是为此而设计的.

OpenCL是关于通用计算的.折叠蛋白质.天气预报.高频交易.模拟神经元.机器学习,SETI,信号处理,比特币挖掘等.

但是中间有很多交叉区域.

首先,很多东西都有可视组件.科学家可能希望能够看到/与折叠的蛋白质相互作用,例如,无需将所有数据从GPU RAM复制到CPU的内存中,处理它以便以可视格式进行处理,然后将其发送回GPU.

游戏也可以使用OpenCL.拿类似Minecraft的东西.如果您使用现代OpenGL(而不是Minecraft实际使用的OpenGL 1.3)制作Minecraft,您可能只想将原始地图数据上传到GPU.使用带有几何/曲面细分着色器的单个过程将该数据转换为多维数据集和其他形状,然后使用变换反馈来捕获结果(您只需运行一次).

但是Minecraft也有关于如何更新地图的各种规则.计算照明.种树.让水流动.爆炸TNT等.那些你不能用着色器真正做到的东西(或者可能没有一次通过).你可以在CPU(Minecraft做的)上做到这一点,但如果你看到那些人们立刻引发了1000个TNT的视频,你会看到这种滞后.流水可能会导致大型服务器上的每个人都滞后.您可以使用OpenCL将其发送到OpenGL,但如果将它们链接在一起,则效率更高.

您可以使用OpenCL伪造新的OpenGL技术.例如,如果您有OpenCL但没有Geometry/Tessellation着色器,那么您可以在OpenCL中执行此操作(当然,实际上它并没有那么有用,因为大多数具有过时OpenGL实现的系统也缺乏OpenCL支持).是否有像镶嵌着色器那样有用但却不存在的东西?

在OpenGL管道中有很多无法实现的视觉效果(至少效率不高).一个例子是实时光线跟踪.另一个是粒子模拟.程序/分形地形生成.

还有其他一些有助于游戏/实时图形的东西.例如,可以将物理模拟移出CPU.如果渲染管道/场景图本身可以移动到GPU也会很棒.这将显着减少CPU和GPU之间的调用次数,并使其更加平行.还有更多的东西,如光线投射,人工智能,路径查找等.基本上你计算的任何东西只是在视觉上看到.

最后,我确信有很多其他的东西,即使以前没有人,但现在可能.随着硬件向这个方向发展,我们越来越多地推动并行算法.