Also just tried rewriting the RB loop to not use STEP:

  dim index as integer
  for j as integer = 0 to iterations
    for i as integer = 0 to count
      'pB.UInt32(i) = pA.UInt32(i)
      pB.Single(index) = pA.Single(index) //* count
      index = index+4
    Next
    index = 0
  Next
  

But in fact this comes in at about 55 seconds, versus 45 when using STEP 4.

On 16/5/07 11:31, "Daniel Stenning" <[EMAIL PROTECTED]> wrote:

> I just tried rerunning the test but with all the contents of the inner loop
> commented out - 
> 
> So in the RB PTR case:
> 
>   dim u as integer = Count * 4
>    for j as integer = 0 to iterations
>      for i as integer = 0 to u step 4
>        // pB.Single(i) = pA.Single(i)
>      Next
>    Next
> 
> And in C dylib:
> 
>  void copySingle (int count, float * A, float * B ) {
>     int i;
>     for ( i = 0; i < count ; i++ )  {
>        // B[i] = A[i];
>     }
>  };
> 
> The C dylib version went down to around 2 seconds ( I think it was less )
> While the RB version is around 19 seconds.
> 
> 
> 
> On 16/5/07 02:21, "Daniel Stenning" <[EMAIL PROTECTED]> wrote:
> 
>> Heres a simple test I did which creates simply copies 44100 floats from one
>> memoryblock to another.  It does this 3000 times in order to allow timing to
>> be done.
>> 
>> I did this initially to see if there is a significant performance gain from
>> using Ptr pointers to the memoryblocks to do the reads and copies, versus
>> using the memoryblock SingleValue() methods.
>> 
>> Indeed there is. Using Ptr is faster.
>> 
>> But out of curiosity I thought I'd see how near the performance was compared
>> to doing the core copy operation in C - using a dylib. So I wrote a quick
>> dylib with a single function:
>> 
>> void copySingle (int count, float * A, float * B ) {
>>    int i;
>>    for ( i = 0; i < count ; i++ )  {
>>       B[i] = A[i];
>>    }
>> };
>> 
>> 
>> And then via a declare called this function 3000 times. ( passing 3000 as
>> the count argument )
>> 
>> The time taken in RB using Ptr:  around 45 seconds
>> And in by calling the C dylib ? :   5 seconds.
>> 
>> This is on a G4 PowerBook.
>> 
>> I was NOT expecting that, and that 45 second timing was even after using
>> pragmas to reduce overheads.
>> 
>> I was expecting RB to be a little slower than C but not  THAT much slower.
>> After all - RB is supposed to be natively compiled - thus comparable to C.
>> 
>> Here is the code for the RB version:
>> ****************************************************************
>> 
>>   #pragma DisableAutoWaitCursor
>>   #pragma DisableBackgroundTasks
>>   #pragma DisableBoundsChecking
>>   #pragma StackOverflowChecking false
>>   
>>   Dim Count As integer = 44100 -1
>>   DIm iterations as integer = 3000
>>   
>>   // source buffer
>>   Dim A as new MemoryBlock( 44100 * 4)
>>   
>>   // stuff A with incrementing single values
>>   for i as integer = 0 to Count
>>     A.SingleValue(i*4) = i
>>   Next
>>   
>>   // target buffer
>>   Dim B as new MemoryBlock( 44100 * 4)
>>   
>>   // use pointers for speed
>>   dim pA As Ptr = A
>>   dim pB as Ptr = B
>>   
>>   Result.Text = "Started"
>>   app.DoEvents
>>   
>>   dim u as integer = Count * 4
>>   for j as integer = 0 to iterations
>>     for i as integer = 0 to u step 4
>>       pB.Single(i) = pA.Single(i)
>>     Next
>>   Next
>>   
>>   Beep
>>   
>>   Result.Text= "FINISHED"
>> 
>> *************************************
>> And here is the version that calls the C function in the dylib:
>> 
>>   
>>   soft Declare Sub copySingle  Lib LIBPATH ( c as integer, ptA as Ptr, ptB
>> as Ptr )
>>   
>>   Dim Count As integer = 44100
>>   DIm iterations as integer = 3000
>>   
>>   Dim A as new MemoryBlock( 44100 * 4)
>>   
>>   // stuff A with incrementing single values
>>   for i as integer = 0 to Count-1
>>     A.SingleValue(i*4) = i
>>   Next
>>   
>>   Dim B as new MemoryBlock( 44100 * 4)
>>   
>>   dim pA As Ptr = A
>>   dim pB as Ptr = B
>>   
>>   Result.Text = "Started"
>>   app.DoEvents
>>   
>>   dim u as integer = Count
>>   for j as integer = 0 to iterations
>>     copySingle( u, pA, pB )
>>   Next
>>   
>>   Beep
>>   Result.Text= "FINISHED"
>> 
>> 
>> 
>> So - here is the 40 million dollar question - WHY is RB nearly 10 times
>> slower than C ?
>> Is this something that can and should be adressed by RS ?
>> 
>> 
>> _______________________________________________
>> Unsubscribe or switch delivery mode:
>> <http://www.realsoftware.com/support/listmanager/>
>> 
>> Search the archives:
>> <http://support.realsoftware.com/listarchives/lists.html>
>> 
> 
> Regards,
> 
> Dan
> 
> 
> 
> _______________________________________________
> Unsubscribe or switch delivery mode:
> <http://www.realsoftware.com/support/listmanager/>
> 
> Search the archives:
> <http://support.realsoftware.com/listarchives/lists.html>
> 

Regards,

Dan



_______________________________________________
Unsubscribe or switch delivery mode:
<http://www.realsoftware.com/support/listmanager/>

Search the archives:
<http://support.realsoftware.com/listarchives/lists.html>

Reply via email to