And at last- you need to optimize code to be especially suitable for multi-cores.This issue will be mentioned later.

This library was tested on Intel Core2 Duo machine with the help of C#.Testing procedure:

There was created array of 10000000 elements.

This array then was initialized in sequential and parallel ways.And perfomance measurements was done.

When measuring perfomance, several factors was changed to look for impact on parallel execution speed:a) Data clusters amount (array was partitioned into different number of clusters)b) Different mathematical operations on array elements was used.

C# code which did all measurement comparisions between sequential and parallel executions is here:

There results is displayed as XY graph of speed-up factor dependance on data clusters amount.Clusters amount scale is logarithmic.

Several conclusions that can be made from this graph (and this test):

As it was supposed to be, maximal speed-up factor is about 2(because machine was with 2 cores)

speed-up heavily depends on data partitions amount.

It seems there are a lower number of data clusters -> 16, when workload starts being nicelly distributed between cores and speed-up very sharply increases. Or else - if data partitions amount is smaller then 16,- seems there are no speed-up at all, and no use of 2 cores :-)

Speed-up may depend on operations used on array elements. For example- from graph can be seen that parallel execution speeds-up more square root operation than bitshift, or multiplication. It seems somehow Sqrt work can be distributed between cores more friendly.

Last- there exists also upper limit of data clusters amount, on which speed-up is still noticable. So users should not divide data into very big amount of chunks also, because in that way cores are not capable to interoperate efficently. Also higher limit may be dependent on actual operations on array elements.

So all in all - its good that we got this library for .NET. It simplifies a lot writing efficent algorithm for several cores. But.. as we saw- we need to remember that its not enough to have this library for multi-cores enabled code. We need to optimized it for that- Splitting jobs between cores is a different world of programming.