<p dir="ltr">Two questions:</p>
<p dir="ltr">1. Would APIs that operate on existing data types (rather than tensors) work just as well?<br>
2. Could there instead be a kernel-like API that could work on things independently? Lower level APIs that enable equivalent high-level constructs is a much better place to start.</p>
<p dir="ltr">And two comments:</p>
<p dir="ltr">1. You could easily emulate 2D arrays by simply using 1D arrays and storing data in row- or column-major order. This is pretty well-known at this point, and is how C/C++ allocate multi-dimensional arrays internally.<br>
2. Data parallelization requires special consideration, and I can assure you, machine learning isn't the only thing that could stand to benefit from this. It needs to be broad enpugh that other non-data applications can benefit from it. (Applying DOM changes from a static change list is an embarassingly parallel\* problem. So anything that could speed this up by a substantial bit could be infinitely useful to anyone using Angular, React, Ember, or any other framework out there.)</p>
<p dir="ltr">\* Yes, that's a technical term. Look it up on Wikipedia.</p>
<br><div class="gmail_quote"><div dir="ltr">On Fri, Jan 26, 2018, 20:50 Robert Eisele <<a href="mailto:robert@xarg.org">robert@xarg.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello,<br>
<br>
Allocating multi-dimensional arrays in Javascript is only possible by<br>
building each dimension individually. In addition to being a very<br>
tedious job, a developer has no control over memory usage, which in<br>
general is likely to be very high.<br>
<br>
Seeing an array algebraically as a vector, typed arrays have already<br>
created the ability to work more efficiently and memory-consciously with<br>
lists of numbers. A natural extension of this is not just a matrix, but<br>
a tensor.<br>
<br>
I would like to suggest tensors as a native language construct in ES.<br>
This would have the advantage that developers could write highly<br>
parallelizable code independently of WebGL. As an API one could<br>
introduce the following classes in analogy to typed arrays:<br>
<br>
- IntXTensor<br>
- UintXTensor<br>
- FloatXTensor<br>
<br>
Where X is one of {8, 16, 32, 64}. To make these tensor objects really<br>
effective, it is necessary to introduce meaningful operations, maybe<br>
similar to the features of TensorFlow. I think by introducing tensors in<br>
the browser (but also node.js), a wide range of new applications open<br>
up. For example, working with deep learning right in the browser or<br>
calculating filters on images without having to write shaders for them.<br>
<br>
The most important thing probably is having a way of storing high<br>
dimensional data in the browser without worrying about the memory<br>
footprint, even for complex applications.<br>
<br>
What do you think about it?<br>
<br>
Robert Eisele<br>
<br>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote></div>