然而,据称Silverlight 5具有更广泛的硬件加速图形,包括一个相当完整的3D管道.但是,我还没有听说是否有人能够利用这个管道加速通用数学运算(如FFT,DCT,IDCT等).还有人试过吗?有关从哪里开始寻找的指示?
解决方法
但那说:
(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)除了一小部分演示软件风格的问题外,它没有任何意义.那好吧.]