using System;
using System.Linq;
using System.Diagnostics;
public class Program
{
public static void Main()
{
const int Flops = 100000;
const int Repeats = 100;
var random = new Random();
var output = Enumerable.Range(0, Flops).Select(i => random.NextDouble()).ToArray();
var left = Enumerable.Range(0, Flops).Select(i => random.NextDouble()).ToArray();
var right = Enumerable.Range(0, Flops).Select(i => random.NextDouble()).ToArray();
var timer = Stopwatch.StartNew();
for (var i = 0; i < Flops - 1; i++)
{
unchecked
{
output[i] += left[i] * right[i];
}
}
timer.Stop();
for (var i = 0; i < Flops - 1; i++)
{
output[i] = random.NextDouble();
}
timer = Stopwatch.StartNew();
for (var j = 0; j < Repeats; j++)
{
for (var i = 0; i < Flops - 1; i++)
{
unchecked
{
output[i] += left[i] * right[i];
}
}
}
timer.Stop();
Console.WriteLine("ms: {0}", timer.ElapsedMilliseconds);
Console.WriteLine("MFLOPS: {0}", ((double)Flops * Repeats) / timer.ElapsedMilliseconds / 1000.0);
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uTGlucTsKdXNpbmcgU3lzdGVtLkRpYWdub3N0aWNzOwoKcHVibGljIGNsYXNzIFByb2dyYW0KewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCWNvbnN0IGludCBGbG9wcyA9IDEwMDAwMDsKCQljb25zdCBpbnQgUmVwZWF0cyA9IDEwMDsKCQl2YXIgcmFuZG9tID0gbmV3IFJhbmRvbSgpOwoJCXZhciBvdXRwdXQgPSBFbnVtZXJhYmxlLlJhbmdlKDAsIEZsb3BzKS5TZWxlY3QoaSA9PiByYW5kb20uTmV4dERvdWJsZSgpKS5Ub0FycmF5KCk7CgkJdmFyIGxlZnQgPSBFbnVtZXJhYmxlLlJhbmdlKDAsIEZsb3BzKS5TZWxlY3QoaSA9PiByYW5kb20uTmV4dERvdWJsZSgpKS5Ub0FycmF5KCk7CgkJdmFyIHJpZ2h0ID0gRW51bWVyYWJsZS5SYW5nZSgwLCBGbG9wcykuU2VsZWN0KGkgPT4gcmFuZG9tLk5leHREb3VibGUoKSkuVG9BcnJheSgpOwoJCXZhciB0aW1lciA9IFN0b3B3YXRjaC5TdGFydE5ldygpOwoJCWZvciAodmFyIGkgPSAwOyBpIDwgRmxvcHMgLSAxOyBpKyspCgkJewoJCQl1bmNoZWNrZWQKCQkJewoJCQkJb3V0cHV0W2ldICs9IGxlZnRbaV0gKiByaWdodFtpXTsKCQkJfQoJCX0KCgkJdGltZXIuU3RvcCgpOwoJCWZvciAodmFyIGkgPSAwOyBpIDwgRmxvcHMgLSAxOyBpKyspCgkJewoJCQlvdXRwdXRbaV0gPSByYW5kb20uTmV4dERvdWJsZSgpOwoJCX0KCgkJdGltZXIgPSBTdG9wd2F0Y2guU3RhcnROZXcoKTsKCQlmb3IgKHZhciBqID0gMDsgaiA8IFJlcGVhdHM7IGorKykKCQl7CgkJCWZvciAodmFyIGkgPSAwOyBpIDwgRmxvcHMgLSAxOyBpKyspCgkJCXsKCQkJCXVuY2hlY2tlZAoJCQkJewoJCQkJCW91dHB1dFtpXSArPSBsZWZ0W2ldICogcmlnaHRbaV07CgkJCQl9CgkJCX0KCQl9CgoJCXRpbWVyLlN0b3AoKTsKCQlDb25zb2xlLldyaXRlTGluZSgibXM6IHswfSIsIHRpbWVyLkVsYXBzZWRNaWxsaXNlY29uZHMpOwoJCUNvbnNvbGUuV3JpdGVMaW5lKCJNRkxPUFM6IHswfSIsICgoZG91YmxlKUZsb3BzICogUmVwZWF0cykgLyB0aW1lci5FbGFwc2VkTWlsbGlzZWNvbmRzIC8gMTAwMC4wKTsKCX0KfQ==