GPU着色器图灵完整吗?

时间:2014-07-04 08:00:26

标签: shader gpu gpgpu computation-theory

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

我的问题是关于各种GPU上的单个着色器(" Stream Processor" /" CUDA Core"): 图灵完成了吗? 我(理论上)可以使用单个着色器计算任意输入的任意函数吗? 我试图了解什么"规模"计算着色器直播。

1 个答案:

答案 0 :(得分:10)

您是否将shader视为用于计算着色的程序?

在维基谈话中,我发现:

  

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

     

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

     

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

作为非图灵完整语言的示例: Wikipedia Page on non-turing-complete Shaders

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

编辑

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