据我所知,完整的GPU是计算的庞然大物 - 包括计算的每一步和内存。显然,GPU可以计算我们想要的任何东西 - 它的图灵完成。
我的问题是关于各种GPU上的单个着色器(" Stream Processor" /" CUDA Core"): 图灵完成了吗? 我(理论上)可以使用单个着色器计算任意输入的任意函数吗? 我试图了解什么"规模"计算着色器直播。
答案 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进行编程,以便在任意输入上计算任意函数"。