当我们使用OpenGL获得好速度时,因为它使用纹理内存和许多内置图形功能(混合,mip贴图等)。
为什么我们需要OpenCL(缓慢使用openCL缓冲区)与OpenGL的互操作性,因为我们可以将渲染与计算相结合,或者是否有任何良好的优势,如性能。
我只是想知道这个的主要优点,是否有任何已发表的论文表明他们通过使用OpenGL与OpenCL的互操作性或任何在速度和质量方面表现出性能提升的证据来提高性能。
答案 0 :(得分:12)
OpenGL就是实时光栅化图形。由于它的范围有限,因此可以针对该任务进行更优化,并且大多数硬件也是为此而设计的。
OpenCL是关于通用计算的。折叠蛋白质。天气预报。高频交易。 Simulating neurons。机器学习,SETI,信号处理,比特币挖掘等。
但是中间有很多交叉区域。
首先,很多东西都有可视组件。科学家可能希望能够看到/与折叠的蛋白质相互作用,例如,无需将所有数据从GPU RAM复制到CPU的内存中,处理它以便以可视格式进行处理,然后将其发送回GPU。 / p>
游戏也可以使用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管道中无法实现大量的视觉效果(至少效率不高)。一个例子是real-time ray-tracing。另一个是particle simulations。 Procedural/fractal terrain generation
还有其他一些有助于游戏/实时图形的东西。例如,Physics simulations可以从CPU移出。如果渲染管道/场景图本身could be moved to the GPU也会很棒。这将显着减少CPU和GPU之间的调用次数,并使其更加平行。还有更多的东西,如光线投射,人工智能,路径查找等。基本上你计算的任何东西都只能在视觉上看到。
最后,我确信还有很多其他东西,即使之前没有人,但现在可能。随着硬件走向这个方向,我们越来越多地推动并行算法。