I saw the SIMD object existing in Firefox Nightly. I can quickly check if it 
conforms with the polyfill implementation. Also, I haven't been able to locate 
a formal draft of some spec - the documentation of the polyfill implementation 
is my only reference...

Soeren
 
On 10 Apr 2014, at 9:50, Alon Zakai <[email protected]> wrote:

> Frankly, JS SIMD is still being specced out, so the emscripten polyfill might 
> lag behind the spec, and might well be suboptimal as not much effort has gone 
> into optimizations yet. Currently implementations of the spec are expected to 
> land in firefox and chrome, after that happens I think it will make more 
> sense to spend time on emscripten's SIMD support.
> 
> - Alon
> 
> 
> 
> On Tue, Apr 8, 2014 at 9:56 PM, Soeren Balko <[email protected]> wrote:
> I reviewed the current SIMD implementation (as given by vector.h and in 
> library.js). Unfortunately, the documentation on Javascript's implementation 
> of SIMD is somewhat sparse, so I am using the documentation given in the 
> polyfill implementation 
> (https://github.com/johnmccutchan/ecmascript_simd/blob/master/src/ecmascript_simd.js)
>  as a reference.
> 
> Some of the implementations in library.js do a lot of copying/casting, e.g.
> 
> emscripten_float32x4_and__inline: function(a, b) {
>     return 
> 'SIMD.int32x4.bitsToFloat32x4(SIMD.int32x4.and(SIMD.float32x4.bitsToInt32x4(' 
> + a + '), SIMD.float32x4.bitsToInt32x4(' + b + ')))';
> },
> 
> Given the fact that float32x4 and int32x4 objects are immutable, this has 
> noticable performance penalties. Also, looking at the polyfill implementation 
> of SIMD.float32x4.and(...), I don't think I understand the rationale behind 
> these copies:
> 
> /**
>   * @param {float32x4} a An instance of float32x4.
>   * @param {float32x4} b An instance of float32x4.
>   * @return {float32x4} New instance of float32x4 with values of a & b.
>   */
> SIMD.float32x4.and = function(a, b) {
>   var aInt = SIMD.float32x4.bitsToInt32x4(a);
>   var bInt = SIMD.float32x4.bitsToInt32x4(b);
>   return SIMD.int32x4.bitsToFloat32x4(SIMD.int32x4.and(aInt, bInt));
> }
> 
> In other cases, the emscripten function signature is different from the 
> Javascript SIMD implementation. Like in case of 
> 
> emscripten_float32x4_lessThan__inline: function(a, b) {
>    return 'SIMD.int32x4.bitsToFloat32x4(SIMD.float32x4.lessThan(' + a + ', ' 
> + b + '))';
> },
> 
> which returns an float32x4 object, whereas the polyfill implementation 
> returns an int32x4:
> 
> /**
>   * @param {float32x4} t An instance of float32x4.
>   * @param {float32x4} other An instance of float32x4.
>   * @return {int32x4} 0xFFFFFFFF or 0x0 in each lane depending on
>   * the result of t < other.
>   */
> SIMD.float32x4.lessThan = function(t, other) {
>   var cx = t.x < other.x;
>   var cy = t.y < other.y;
>   var cz = t.z < other.z;
>   var cw = t.w < other.w;
>   return SIMD.int32x4.bool(cx, cy, cz, cw);
> } 
> 
> Can someone educate me why that is, please?
> 
> Soeren
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "emscripten-discuss" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
> 
> 
> -- 
> You received this message because you are subscribed to a topic in the Google 
> Groups "emscripten-discuss" group.
> To unsubscribe from this topic, visit 
> https://groups.google.com/d/topic/emscripten-discuss/gT8GiPScLXM/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to 
> [email protected].
> For more options, visit https://groups.google.com/d/optout.

Dr. Soeren Balko
Founder & Director
zfaas Pty. Ltd.
+61-(0)4-81393191
[email protected]



-- 
You received this message because you are subscribed to the Google Groups 
"emscripten-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to