我知道OpenCL可以控制GPU的内存架构,因此可以实现更好的优化,但是,除此之外,我们可以使用Compute Shaders进行矢量运算(加法,乘法,反演等)吗?
答案 0 :(得分:53)
与其他OpenGL着色器类型相比,计算着色器与计算机图形没有直接关系,并提供了更直接的底层硬件抽象,类似于CUDA和OpenCL。它提供可自定义的工作组大小,共享内存,组内同步以及CUDA和OpenCL所熟知和喜爱的所有内容。
主要区别基本上是:
所以归结为,计算着色器实际上是打算在现有的OpenGL应用程序中使用,虽然展示了通常的(类似OpenCL / CUDA)计算方法的GPU编程,与图形方法相比,其他着色器阶段,没有OpenCL / CUDA的计算灵活性(当然还提供其他优势)。因此,执行计算任务比将其挤入其他不用于通用计算的着色器阶段或引入您必须同步的其他计算框架更灵活,更直接,更容易。
计算着色器应该能够使用OpenCL实现几乎任何可实现的功能,并且具有相同的灵活性和对硬件资源的控制以及相同的编程方法。因此,如果你有一个很好的适合GPU的算法(可以很好地与CUDA或OpenCL一起使用)来完成你想做的任务,那么是的,你也可以使用计算着色器。但是,仅仅因为计算着色器,使用OpenGL(它仍然是,并且可能始终是实时计算机图形的框架)并没有多大意义。为此,您可以使用OpenCL或CUDA。计算着色器的真正优势在混合图形和计算能力时发挥作用。
答案 1 :(得分:2)
查看here了解另一个观点。 总结:
是的,OpenCL已经存在,但它针对的是重量级应用程序(想想CFD,FEM等),它比OpenGL更加普遍(超越GPU考虑......英特尔' s Xeon Phi架构支持> 50 x86核心。
此外,在OpenGL / CUDA和OpenCL之间共享缓冲区并不好玩。