using System.Diagnostics;
public static int ITER = 5000;
public static int N = 100000;
public static double[] TestArr = new double[N];
public static double MAX = 100.0d;
public static double MIN = -100.0d;
public static void Main()
var randNum = new Random();
for (int i = 0; i < TestArr.Length; i++)
TestArr[i] = randNum.NextDouble() * (MAX - MIN) + MIN;
Benchmark("SumNotUnroll", SumNotUnroll, ITER);
Benchmark("SumUnroll", SumUnroll, ITER);
Benchmark("SumUnroll2", SumUnroll2, ITER);
public static void Benchmark(string testName, Action act, int iterations)
var sw = Stopwatch.StartNew();
for (int i = 0; i < iterations; i++)
Console.WriteLine("{0}: {1}", testName, new TimeSpan(sw.ElapsedTicks / iterations));
public static void SumNotUnroll()
for (int i = 0; i < N; ++i)
public static void SumUnroll()
for (int i = 0; i < N; i+=2)
public static void SumUnroll2()
for (int i = 0; i < N; i+=2)
var s = TestArr[i] + TestArr[i+1];