@ Alexandre: sure, no problem !

@ Luc:

I'm not sure how much code I can provide without being to specific, but
here is how it goes :


   - *Let's say I have the Smalltalk code bellow:*

*MyClass*>>withNBCall
   externalArray := *NBExternalArrayOfDoubles *new: *self *internalArray
size.
   output := *NBExternalArrayOfDoubles *new: 4.
   [*self *actualNBCallWith: externalArray adress storeResultIn: output adress]
ensure: [externalArray free. output free].

*MyClass*>>withNBCallCommented
   externalArray := *NBExternalArrayOfDoubles *new: *self *internalArray
size.
   output := *NBExternalArrayOfDoubles *new: 4.
   ["self actualNBCallWith: externalArray adress storeResultIn: output
adress"] ensure: [externalArray free. output free].

*MyClass*>>actualNBCallWith: externalArray storeResultIn: output
   <primitive: 'primitiveNativeCall' module: 'NativeBoostPlugin' error:
errorCode>
   ^*self *nbCall: #(void callToC(double * externalArray, double * output))
module: 'lib/myModule.dll'


   - *And the C code bellow:*

*void *callToC(*double ** externalArray, *double ** output) {
   computationWith(externalArray, output);
}

*void *specialCallToC(*double ** externalArray, *double ** output) {
  * unsigned int* i;
   *for *(i = 0; i < 24*3600; i++)
      computationWith(externalArray, output);
}


   - *Now I have the following code typed in Time Profiler tool :*

object := (*MyClass *new) variousInitialization; yourself
24*3600 timesRepeat: [object withNBCall]
>> Over 1 minute computation time of which over 99% are primitives. Also I
don't see the nbCall: in the tree.

object := (*MyClass *new) variousInitialization; yourself
24*3600 timesRepeat: [object withNBCallCommented]
>> Less than 1 second.

object := (*MyClass *new) variousInitialization; yourself
object withNBCall
>> Less than 1 millisecond.

object := (*MyClass *new) variousInitialization; yourself
object withNBSpecialCall "This time, I use the specialCallToC() function"
>> Arround 20 millisecond.


Allright, that's a pile of code but I hope it help :)

On a side note:

   - Pharo 3, Win 7 32-bit
   - I'm not at work anymore and don't have my code with me. So I will
   double check tomorow that I didn't provided false informations but I think
   it's accurate of what I do.


Again, thanks for the interest on my issue !

Thomas.



2014-08-07 18:39 GMT+02:00 kilon alios <kilon.al...@gmail.com>:

> I think that if you posted the code , preferably that contains only the
> problem would be easier to test , debug and investigate.
>
>
>
> On Thu, Aug 7, 2014 at 6:25 PM, Thomas Bany <mun.sys...@gmail.com> wrote:
>
>> Hi everyone,
>>
>> I'm trying to reduce the computation time of the following pseudo-code:
>>
>> - memory allocation (~40 doubles)
>> - object heap to C heap copying
>> - NativeBoost call (nbCall:)
>> - memory freeing
>>
>> The time profiling results are bellow:
>>
>> - 24*3600 calls : > 1 minute
>> - 24*3600 calls with only memory allocation and copying : < 1 second
>> - 1 call with a 24*3600 loop inside de C code : < 1 second
>>
>> So it appears that the very coslty step is the transition from Pharo to
>> C. And I was wondering if it was possible to drasticly reduce this time by
>> doing something like, generate the the machine code once and call it
>> multiple time ?
>>
>> Thanks in advance !
>>
>> Thomas.
>>
>
>

Reply via email to