由于OpenGL使用纹理内存和许多内置的图形函数(混合、MipMap等),因此我们可以获得良好的速度。
为什么我们需要OpenCL(由于OpenCL缓冲区而变慢)与OpenGL的互操作性,只是因为我们可以将渲染与计算相结合,还是有其他好处,如性能。
我只想知道这样做的主要优势,是否有任何已发表的论文显示他们通过使用OpenGL与OpenCL的互操作性增加了性能或任何证明显示在速度和质量方面提高了性能。
由于OpenGL使用纹理内存和许多内置的图形函数(混合、MipMap等),因此我们可以获得良好的速度。
为什么我们需要OpenCL(由于OpenCL缓冲区而变慢)与OpenGL的互操作性,只是因为我们可以将渲染与计算相结合,还是有其他好处,如性能。
我只想知道这样做的主要优势,是否有任何已发表的论文显示他们通过使用OpenGL与OpenCL的互操作性增加了性能或任何证明显示在速度和质量方面提高了性能。
OpenGL专注于实时光栅图形。由于其范围有限,可以更加优化该任务,并且大多数硬件也是为此而设计的。
OpenCL则涉及通用计算。折叠蛋白质、天气预报、高频交易、模拟神经元、机器学习、SETI、信号处理、比特币挖掘等。
但在两者之间也有许多重叠领域。
首先,许多这些东西都具有视觉组件。例如,科学家可能希望能够看到/与折叠的蛋白质进行交互,而无需将所有数据从GPU RAM复制到CPU内存,对其进行处理以使其成为可视格式,然后将其发送回GPU。
此外,游戏也可以使用OpenCL。以Minecraft为例。如果您正在使用现代OpenGL(而不是Minecraft实际使用的OpenGL 1.3)制作Minecraft,则希望只将原始地图数据上传到GPU中。使用几何/镶嵌着色器的单个传递将该数据转换为立方体和其他形状,然后使用变换反馈来捕获结果(您只需要运行一次)。
但Minecraft也有各种关于如何更新地图的规则。计算照明,生长树木,使水流动,引爆TNT等等。这些是你用着色器(或者可能不止一个通道)无法做到的事情。你可以在CPU上进行(Minecraft就是这样做的),但如果你看过那些同时引爆数千个TNT的视频,你会发现这会导致严重的延迟。而水流动可能会对大型服务器上的所有人造成延迟。你可以使用OpenCL来发送给OpenGL,但如果它们链接在一起,效率会更高。有很多视觉效果在OpenGL管道内无法实现(至少不高效)。一个例子是实时光线追踪。另一个是粒子模拟。过程/分形地形生成也是如此。
还有其他一些对游戏/实时图形有用的东西。例如,物理模拟可以移动到CPU外。此外,如果渲染管道/场景图本身可以移动到GPU上,这将显著减少CPU和GPU之间的调用次数,并使其更加并行。还有许多其他的事情,如射线投射、AI、路径查找等等。基本上,任何你只计算以便于视觉呈现的东西。
最后,我确定还有很多其他的东西,以前没有人想到过,但现在是可能的。随着硬件朝着这个方向发展,我们越来越推崇并行算法。