Thanks for all the tips everyone!  I will be sure to write a ton about my 
experiences once I've released the code, to help others who want to use 
emscripten for projects.

Alon, the tip about using the pointer directly was GENIUS! Basically, (in 
case anyone else stumbles on this), I return a void* in C to the array. 
 Then in JS, I treat this pointer as an offset into the heap array.  I wrap 
the whole thing in a Float32Array and off I go!  MUCH better than copying 
out the array.  The code looks like this:

  var count = _GetArraySize();
  var offset = _GetBufferPtr();
  return new Float32Array(Module.HEAPU8.buffer, offset, count);

Super super simple and way better than what was there before.

Also, I will go ahead and take measurements once I get to the optimization 
stage of the project to see if it truly is better to do simple functions in 
JS directly.

On Monday, April 14, 2014 2:00:08 PM UTC-7, Richard Bateman wrote:
>
>
> Worth considering that in Firefox and Chrome there is asm.js optimization 
> going on that could hypothetically end up causing many of the things 
> compiled through emscripten actually faster than a direct javascript 
> counterpart, though it's a bit counter-intuitive.  Those same things may 
> well be slower on an unoptimized browser, but there is a *huge* performance 
> difference between optimized and unoptimized asm.js interpreters.
>
> Richard
>
> On Apr 14, 2014, at 14:57, Alon Zakai <[email protected] <javascript:>> 
> wrote:
>
> It is best to measure such things, intuition is often wrong, at least mine 
> is ;) Also worth testing in multiple browsers.
>
> If you need to copy over 5,000 floats, you can just read and write from 
> the singleton big typed array, HEAPU8 for example.
>
> - Alon
>
>
>
> On Sun, Apr 13, 2014 at 9:52 PM, Joshua Litt <[email protected]<javascript:>
> > wrote:
>
>> Okay thanks, that helps.
>>
>> At what length function should I favor using plain JS vs emscripten?  I 
>> have some simple calls, such as a vector multiply.  My intuition is its 
>> cheaper to just multiply two small vectors in JS than it is to call into 
>> emscripten.  Is this correct?
>>
>> Also, how expensive are callbacks?  I have a situation where I need 
>> access to an array of around 5000 floats.  Right now I copy the whole array 
>> back into the native layer when I need it.  I could also just issue a 
>> callback for each data item, but that seems more expensive.  It'd be nice 
>> to be able to just read the doubles in place, but something tells me that 
>> is not possible.
>>
>>
>> On Sunday, April 13, 2014 7:11:17 PM UTC-7, Alon Zakai wrote:
>>
>>> Avoiding creating an array object is usually faster. But it might not 
>>> matter much.
>>>
>>> What might make a bigger difference is if you have 16 plain numeric 
>>> arguments, you can use ccall or even call it directly, with almost no 
>>> overhead, whereas with embind or ccall using an array it would have more 
>>> work to do.
>>>
>>> - Alon
>>>
>>>
>>>
>>> On Fri, Apr 11, 2014 at 10:47 AM, Joshua Litt <[email protected]>wrote:
>>>
>>>> I have a c function which takes an array.  This array can have no more 
>>>> than 16 values.  Is it better from a performance standpoint to allocate an 
>>>> array in JS, and pass it to emscripten, or should I just unpack the array 
>>>> into 16 values and make a function which takes that many arguments?
>>>>
>>>> If it matters, most of the time the array will probably be half full.
>>>>
>>>> -- 
>>>> 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 the Google Groups 
>> "emscripten-discuss" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
> -- 
> 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] <javascript:>.
> For more options, visit https://groups.google.com/d/optout.
>
>
>

-- 
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