GPU着色器图灵完整吗?

Tre*_*or 10 shader gpu gpgpu computation-theory

我知道完整的GPU是计算的庞然大物 - 包括计算的每一步和内存.显然,GPU可以计算我们想要的任何东西 - 它是图灵完成的.

我的问题是关于各种GPU上的单个着色器("流处理器"/"CUDA核心"):
图灵是否完整?
我(理论上)可以使用单个着色器计算任意输入上的任意函数吗?
我试图了解计算着色器的"规模".

Kam*_*ski 12

你是说shader是用来计算阴影的程序吗?

在维基谈话中我发现:

(...)着色器模型1.x和2.0确实不是图灵完整的,因为它们缺乏广义的迭代能力(它们确实有一些有限的循环结构,但这在编译时有效展开,所以迭代次数必须是不变).

Shader model 3.0,用于最新的PC硬件和Xbox 360,具有完全通用的循环功能,并且在理论意义上是图灵完整的.但这很好地突出了理论与实践之间的区别!当人们声称设备是图灵完成时,他们实际意味着"如果这有无限的时间和无限的存储,它将是图灵完成".Shader模型3.0在寄存器空间和程序指令计数方面仍然非常有限,因此在进行任何实际测试时它都会失败.

请注意,如果允许多次渲染操作,即使着色器1.x也可以成为图灵完成.例如,使用重复的渲染到纹理操作来实现生命游戏是微不足道的.在这种情况下,输入和输出纹理提供了大量的存储空间,并且重复的渲染调用填充了缺少的迭代结构.但这是作弊,因为它依赖于CPU来发出渲染调用!

作为非图灵完备语言的一个例子: 非图灵完整着色器上的维基百科页面

一般来说,它取决于着色器语言(和你的图灵完备要求),但我认为最近的着色器语言可以称为图灵完成(如果我们忽略有限内存的任何限制),因为它们可以循环和读/写变量.

编辑:

如果我误解了你的问题并且你将着色器视为着色器处理单元(如Cuda核心)那么我认为单个核心不应该被视为图灵完整或不完整的类别.GPU不仅构建在核心上.回答您的问题,您可以使用任意数量的cuda核心对GPU进行编程,以"计算任意输入上的任意函数".

  • 使用单核的GPU为您提供与多核GPU相同的'图灵功能'.GPU不仅构建在核心上.Cuda Core只是分层多处理器单元的一部分,而runnig GPU需要更多的资源.执行您的gpu程序您需要具有GPU工作的计算机,而不仅仅是其中的一部分.我认为你应该考虑语言,你的程序是作为图灵完成而写的. (2认同)