在Silverlight 5上使用GPU进行通用数学运算

在Silverlight 5上使用GPU进行通用数学运算,第1张

概述我正在开发一个浏览器内的Silverlight应用程序,该应用程序具有一些相当计算密集的 *** 作,例如,运行反向离散余弦变换或快速傅立叶变换,每秒数百次.能够尽可能多地将其卸载到计算机的GPU上是很有价值的.我知道使用像素着色器的Silverlight 3和4中有 some discussion这个,但是大家一致认为,因为Silverlight 3/4没有对像素着色器使用硬件加速,并且因为它们的像素着 我正在开发一个浏览器内的Silverlight应用程序,该应用程序具有一些相当计算密集的 *** 作,例如,运行反向离散余弦变换或快速傅立叶变换,每秒数百次.能够尽可能多地将其卸载到计算机的GPU上是很有价值的.我知道使用像素着色器的Silverlight 3和4中有 some discussion这个,但是大家一致认为,因为Silverlight 3/4没有对像素着色器使用硬件加速,并且因为它们的像素着色器语言仅限于2级如果有的话,它不会导致性能提升.

然而,据称Silverlight 5具有更广泛的硬件加速图形,包括一个相当完整的3D管道.但是,我还没有听说是否有人能够利用这个管道加速通用数学运算(如FFT,DCT,IDCT等).还有人试过吗?有关从哪里开始寻找的指示?

解决方法 我以为我会回复到目前为止我发现的内容.简短的回答是,不,我不认为Silverlight 5上的3D管道可以用于此类事情.一方面,据我所知,作为管道一部分的像素着色器和顶点着色器实际上在GPU上执行(与Silverlight 4中的2D着色器不同,它们在cpu上执行) .

但那说:

(1)我读过的所有内容都表明将数据传输到GPU非常快,但对于大多数机器来说,从GPU获取数据的速度要慢得多,大约为毫秒级.这使得我们不太可能将GPU加载执行FFT所需的数据,执行FFT,然后将数据拉回到比我们在cpu上执行的速度更快的速度.

(2)Silverlight 5具有非常有限的指令集,可以在GPU上执行.具体来说,它仅限于HLSL Level 2,它具有有限数量的指令和寄存器.我怀疑在这些有限的指令中建模FFT或DCT是可能的 – 充其量是非常困难和非常慢的.

(3)但即使我们可以解决这两个限制,从我所知,Silverlight没有任何能力读取GPU正在执行的计算结果.普通XNA(Silverlight的3D功能所基于的框架)具有各种GetData()或GetTexture()方法,我认为您可以使用这些方法来读取一组计算的结果.但是Silverlight 5版本中缺少那些等效的方法.从我能说的一切,在Silverlight 5中,GPU是一个只写设备.您将着色器加载到它上面,加载数据,拉动扳机,然后挥手告别.您的代码将永远不会再看到这些字节.

如果事实证明我错了,我会回到这里并更新这个答案.但至少在目前,看起来好像这是一个死胡同.

[编辑10/10/11 – 根据MS的Shawn Hargreaves,这在Silverlight 5中不受支持.他猜测为什么(a)难以让它在所有GPU驱动程序中保持一致,并且(b)除了一小部分演示软件风格的问题外,它没有任何意义.那好吧.]

总结

以上是内存溢出为你收集整理的在Silverlight 5上使用GPU进行通用数学运算全部内容,希望文章能够帮你解决在Silverlight 5上使用GPU进行通用数学运算所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1001006.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存