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进行编程,以"计算任意输入上的任意函数".
| 归档时间: |
|
| 查看次数: |
2875 次 |
| 最近记录: |