Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
何时使用Nvidia CUDA而不是普通OpenGL着色器_Opengl_Architecture_Cuda_Gpgpu_Nvidia - Fatal编程技术网

何时使用Nvidia CUDA而不是普通OpenGL着色器

何时使用Nvidia CUDA而不是普通OpenGL着色器,opengl,architecture,cuda,gpgpu,nvidia,Opengl,Architecture,Cuda,Gpgpu,Nvidia,我在问自己,无论是使用Nvidia CUDA还是OpenGL着色器进行计算,这两种方法的体系结构优势是什么 因此,我想确定我的应用程序的哪个部分最好在CUDA或OpenGL上实现 当然,如果平台依赖性不是理由,那么您可以通过使用CUDA获得更多关于线程和内存的粒度 要使用OpenGL显示CUDA计算的结果,您必须使用一些可能“棘手”的互操作API 什么时候使用这些体系结构中的一种,什么时候使用组合方法,有什么最佳实践吗?大多数渲染任务都很难使用CUDA实现。着色器与渲染API(如OpenGL)完

我在问自己,无论是使用Nvidia CUDA还是OpenGL着色器进行计算,这两种方法的体系结构优势是什么

因此,我想确定我的应用程序的哪个部分最好在CUDA或OpenGL上实现

当然,如果平台依赖性不是理由,那么您可以通过使用CUDA获得更多关于线程和内存的粒度

要使用OpenGL显示CUDA计算的结果,您必须使用一些可能“棘手”的互操作API


什么时候使用这些体系结构中的一种,什么时候使用组合方法,有什么最佳实践吗?

大多数渲染任务都很难使用CUDA实现。着色器与渲染API(如OpenGL)完全集成,以自动化并提供渲染几何体的所有最常用和最高效的工具。纹理采样和多边形光栅化等功能都内置于所有着色语言中。如果您想使用CUDA之类的工具重新实现它,那么它不仅需要花费很长的时间和精力,而且可能会比着色器运行得慢


在我看来,CUDA的设计目的是使用自然可伸缩的GPU,以更并行、更高效的方式处理其他复杂的计算内容,如物理模拟。除此之外,对于几何体的渲染,使用CUDA或OpenCL这样的计算框架几乎没有什么好处。

好吧,让我们看看我是否明白你的意思。你说CUDA可能仅限于这些明显的GPGPU领域。一般来说,如果没有GLSL(或类似的)内置函数/范例,试着考虑CUDA/OpenCL?我同意这一点。我从来没有遇到过一些无法用着色器解决的渲染问题,但我似乎对一些渲染问题进行了很多优化,在CUDA/CL下效果更好,其中一个例子就是光线跟踪。所以我认为这可以归结为选择一种工具来促进工作。几年前我会同意这一点,但是GL现在有了通用的计算着色器。计算管道与渲染管道完全分离,但它们可以共享资源,而无需进行丑陋的互操作性攻击。如果你正在使用GPU为游戏之类的东西进行物理模拟,那么你自然希望渲染和通用计算之间的开销尽可能低,这意味着如果可以的话,可以避免CUDA或OpenCL(例如,你的目标硬件是DX11/GL4+类)。事实上,我完全忽略了计算着色器,这一点很好!感谢Andon的推荐!解释得很好