gpt4 book ai didi

javascript - 使用 HTML5 WebGL 着色器进行计算

转载 作者:技术小花猫 更新时间:2023-10-29 11:58:32 26 4
gpt4 key购买 nike

在我看来,理论上可以使用 WebGL 进行计算——例如计算素数或 π 或类似的东西。然而,据我所见,着色器本身并不是用 Javascript 编写的,所以我有几个问题:

  1. 着色器是用什么语言 编写的?
  2. 考虑到着色器的工作原理,是否值得尝试做这样的事情?
  3. 如何在运行时来回传递变量?或者,如果不可能,如何在着色器完成执行后将信息传回?
  4. 既然它不是 Javascript,那么如何处理非常大的整数(Java 中的 BigInteger 或 Javascript 中的移植版本)?
  5. 我假设这会自动编译脚本,以便它在显卡的所有核心上运行,我能得到确认吗?

如果相关,在这种特定情况下,我试图将相当大的数字分解为[非常]扩展的 compsci 项目的一部分。

编辑:

  1. WebGL 着色器是用 GLSL 编写的。

最佳答案

我在 Chrome 中使用来自 JavaScript 的计算着色器和 WebGL 来解决旅行商问题,作为在片段着色器和其他一些遗传优化问题中解决的一组分布式较小的优化问题。

问题:

  1. 您可以将 float 放入 (​​r: 1.00, g: 234.24234, b: -22.0) 但只能取出整数 (r: 255, g: 255, b: 0)。这可以通过将单个 float 编码为 4 个整数作为每个片段的输出来克服。这实际上是一个非常繁重的操作,它几乎违背了 99% 的问题的目的。您最好使用简单的整数或 bool 子解决方案来解决问题。

  2. 调试是一场史诗般的噩梦,社区正在积极编写这篇文章。

  3. 将数据注入(inject)着色器,因为像素数据非常慢,读出更慢。举个例子,读取和写入数据以解决 TSP 问题分别需要 200 毫秒和 400 毫秒,该数据的实际“绘制”或“计算”时间为 14 毫秒。为了可用,您的数据集必须以正确的方式足够大。

  4. JavaScript 是弱类型的(从表面上看...),而 OpenGL ES 是强类型的。为了进行互操作,我们必须在 JavaScript 中使用 Int32Array 或 Float32Array 之类的东西,这在一门通常以自由着称的语言中感觉很尴尬和受限。

  5. 大数字支持归结为使用 5 或 6 个输入数据纹理,将所有像素数据组合成一个数字结构(不知何故......),然后以有意义的方式对这个大数字进行操作。非常hacky,完全不推荐。

关于javascript - 使用 HTML5 WebGL 着色器进行计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7410957/

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