private void Button_Click(object sender, RoutedEventArgs e)
{
const int N = 7250000*8;
//if (!AssertN(N)) return;
int seed = Environment.TickCount;
var rnd = new Random(seed);
float[] a = new float[N], b = new float[N];
RandomizeArray(a, seed);
RandomizeArray(b);
Stopwatch watch = Stopwatch.StartNew();
for (int i = 0; i < N; i++)
{
a[i] += b[i];
}
watch.Stop();
long elapsed1 = watch.ElapsedMilliseconds;
float avg1 = a.Average();
GC.GetTotalMemory(true);
//RandomizeArray(a, seed);
//watch = Stopwatch.StartNew();
//Parallel.For(0, N, new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount}, i => a[i] += b[i]);
//watch.Stop();
//long elapsed2 = watch.ElapsedMilliseconds;
RandomizeArray(a, seed);
watch = Stopwatch.StartNew();
Thread[] threads = new Thread[Environment.ProcessorCount];
int len = N/Environment.ProcessorCount;
for (int i = 0; i < threads.Length; i++)
{
threads[i] = new Thread(data =>
{
for (int jj = 0, ii = (int)data; ii < N && jj < len; ii++, jj++)
{
a[ii] += b[ii];
}
});
threads[i].Start(i*len);
}
foreach (var thread in threads) thread.Join();
watch.Stop();
long elapsed2 = watch.ElapsedMilliseconds;
float avg2 = a.Average();
RandomizeArray(a, seed);
watch = Stopwatch.StartNew();
Yeppp.Core.Add_IV32fV32f_IV32f(a, 0, b, 0, N);
watch.Stop();
long elapsed3 = watch.ElapsedMilliseconds;
float avg3 = a.Average();
//RandomizeArray(a, seed);
//watch = Stopwatch.StartNew();
//threads = new Thread[Environment.ProcessorCount];
//len = N / Environment.ProcessorCount;
//for (int i = 0; i < threads.Length; i++)
//{
// threads[i] = new Thread(data =>
// {
// int ii = (int)data;
// int count = len + ii > a.Length ? a.Length - ii : len;
// Yeppp.Core.Add_IV32fV32f_IV32f(a, ii, b, ii, count);
// });
// threads[i].Start(i * len);
//}
//foreach (var thread in threads) thread.Join();
//watch.Stop();
//long elapsed4 = watch.ElapsedMilliseconds;
//float avg4 = a.Average();
bool correct = avg1 == avg2 && avg2 == avg3;// && avg3 == avg4;
MessageBox.Show(Tuple.Create(elapsed1, elapsed2, elapsed3, correct).ToString());
//System.Numerics.Vector.LessThan()
//Yeppp.Math.
//for (int i = 0; i < N; i+=4)
//{
// Vector4 va = new Vector4(a[i], a[i+1], a[i+2], a[i+3]);
// Vector4 vb = new Vector4(b[i], b[i + 1], b[i + 2], b[i + 3]);
// Vector4 vc = va + vb;
// vc.CopyTo(c, i);
//}
}