在我看来,理论上可以使用WebGL进行计算 - 例如计算质数或π或沿着这些线的某些东西。但是,从我看到的很少,着色器本身不是用Javascript编写的,所以我有几个问题:
如果相关,在这个特定的情况下,我试图将相当大的数字作为[非常]扩展的compsci项目的一部分。
修改
答案 0 :(得分:19)
我在Chrome中使用JavaScript中的计算着色器,使用WebGL解决旅行商问题,解决了片段着色器中解决的分布式小优化问题集以及其他一些遗传优化问题。
问题:
您可以将浮点数放入(r:1.00,g:234.24234,b:-22.0),但只能输出整数(r:255,g:255,b:0)。这可以通过将单个浮点数编码为4个整数作为每个片段的输出来克服。这实际上是一项非常繁重的操作,几乎无法解决99%的问题。您可以使用简单的整数或布尔子解决方案解决问题。
调试是一场史无前例的噩梦,社区正在积极地写这篇文章。
将数据注入着色器时像素数据非常慢,读出来的速度更慢。举个例子,读取和写入数据以解决TSP问题分别需要200和400毫秒,实际的'绘制'或者'计算'该数据的时间是14毫秒。为了使用,您的数据集必须以正确的方式足够大。
JavaScript是弱类型的(在表面上......),而OpenGL ES是强类型的。为了实现互操作,我们必须在JavaScript中使用像Int32Array或Float32Array这样的东西,这种东西感觉很尴尬并且限制在通常用它自由吹捧的语言中。
大数字支持归结为使用5或6个输入数据纹理,将所有像素数据组合成单个数字结构(不知何故......),然后以有意义的方式对该大数字进行操作。非常hacky,完全没有推荐。
答案 1 :(得分:15)
目前有一个项目正在努力完成你正在做的事情 - WebCL。不过,我不相信它现在已经存在于任何浏览器中。
回答你的问题:
答案 2 :(得分:5)
*编辑 - 回顾现在还使用了矢量'属性'从外部传递数据。
你需要运行mamp或其他东西才能在本地工作...... https://github.com/byteface/GTP/tree/master/play/simplified
我使用像素来表示字母表的字母,并使用着色器进行字符串搜索。它的速度非常快。比基于CPU的本机搜索程序更快。即在整个书中搜索单个单词的实例在GPU上的浏览器中比在像textedit这样的轻量级程序中更快。我只使用一种纹理。