【问题标题】:Using GPU on Silverlight 5 for general-purpose math在 Silverlight 5 上使用 GPU 进行通用数学运算
【发布时间】:2011-11-28 02:35:51
【问题描述】:

我正在开发一个浏览器内的 Silverlight 应用程序,该应用程序具有一些计算密集型操作,例如每秒数百次运行逆离散余弦变换或快速傅里叶变换。能够将尽可能多的数据卸载到计算机的 GPU 上是很有价值的。我知道在 Silverlight 3 和 4 中有 some discussion 使用像素着色器,但共识是因为 Silverlight 3/4 没有为其像素着色器使用硬件加速,并且因为他们的像素着色器语言仅限于第 2 级,它不会导致性能大幅提升(如果有的话)。

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

【问题讨论】:

    标签: silverlight gpu silverlight-5.0


    【解决方案1】:

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

    但话虽如此:

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

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

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

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

    [编辑 2011 年 10 月 10 日 - 根据 MS 的 Shawn Hargreaves,Silverlight 5 不支持此功能。他猜测为什么 (a) 很难让它在所有 GPU 上始终如一地工作驱动程序,以及 (b) 对于除了一小部分演示软件风格的问题之外的所有问题,它没有任何意义。哦,好吧。]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-18
      • 2011-04-06
      • 2016-07-09
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多