gpt4 book ai didi

c# - HLSL 计算 - 按顺序处理像素?

转载 作者:太空宇宙 更新时间:2023-11-03 11:42:43 24 4
gpt4 key购买 nike

假设我想使用 GPU 计算斐波那契数列的前一百万项。 (我意识到这将超过 32 位数据类型的精度限制 - 仅用作示例)

给定一个带有 40 个着色器/流处理器的 GPU,并使用引用书作弊,我可以将百万项分解为 40 个 block ,每 block 250,000 个 strip ,并为每个着色器设置两个起始值:

unit 0: 1,1 (which then calculates 2,3,5,8,blah blah blah)

unit 1: 250,000th term

unit 2: 500,000th term

...

如果可能的话,我如何才能确保按顺序处理像素?如果输入纹理中的前几个像素具有值(为简单起见,使用 RGBA)

0,0,0,1 // initial condition
0,0,0,1 // initial condition
0,0,0,2
0,0,0,3
0,0,0,5
...

如何确保在前四项准备好之前我不会尝试计算第 5 项?

我意识到这可以在多次传递中完成,但每当计算一个值时都设置一个“就绪”位,但这似乎非常低效,并且在某种程度上消除了在 GPU 上执行此类计算的好处。

OpenCL/CUDA/etc 可能提供了很好的方法来做到这一点,但我正在尝试(为了我自己的启发)让它与 XNA/HLSL 一起工作。

感谢链接或示例。

更新/简化

是否可以编写一个着色器,使用一个像素的值来影响相邻像素的值?

最佳答案

您无法确定处理像素的顺序。如果可以,那将破坏着色器管道的大量像素吞吐量。您可以做的是使用非递归公式计算斐波那契数列。

在您的问题中,您实际上是在尝试序列化着色器单元以一个接一个地运行。您可以立即使用 CPU,速度会快得多。

顺便说一句,多次传递并不像您想象的那么慢,但它们对您的情况没有帮助。如果不知道之前的值,就无法真正计算出任何下一个值,从而扼杀任何并行化。

关于c# - HLSL 计算 - 按顺序处理像素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4326255/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com