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.
