Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- namespace single_dimension_vs_multidimension
- {
- class Program
- {
- public static double sum(double[] d, int l1, int l2)
- { // assuming the array is rectangular
- double sum = 0;
- int l3 = d.Length / (l1 * l2);
- for (int i = 0; i < l1; ++i)
- for (int j = 0; j < l2; ++j)
- for (int k = 0; k < l3; ++k)
- sum += d[i * l2 + j * l3 + k];
- return sum;
- }
- public static double sum(double[,,] d)
- {
- double sum = 0;
- int l1 = d.GetLength(0);
- int l2 = d.GetLength(1);
- int l3 = d.GetLength(2);
- for (int i = 0; i < l1; ++i)
- for (int j = 0; j < l2; ++j)
- for (int k = 0; k < l3; ++k)
- sum += d[i, j, k];
- return sum;
- }
- public static double sum(double[][][] d)
- {
- double sum = 0;
- for (int i = 0; i < d.Length; ++i)
- for (int j = 0; j < d[i].Length; ++j)
- for (int k = 0; k < d[j].Length; ++k)
- sum += d[i][j][k];
- return sum;
- }
- public static void TestTime<T, TR>(Func<T, TR> action, T obj, int iterations)
- {
- Stopwatch stopwatch = Stopwatch.StartNew();
- for (int i = 0; i < iterations; ++i)
- action(obj);
- Console.WriteLine(action.Method.Name + " took " + stopwatch.Elapsed);
- }
- public static void TestTime<T1, T2, T3, TR>(Func<T1, T2, T3, TR> action, T1 obj1, T2 obj2, T3 obj3, int iterations)
- {
- Stopwatch stopwatch = Stopwatch.StartNew();
- for (int i = 0; i < iterations; ++i)
- action(obj1, obj2, obj3);
- Console.WriteLine(action.Method.Name + " took " + stopwatch.Elapsed);
- }
- public static void Main()
- {
- Random random = new Random();
- const int l1 = 256, l2 = 256, l3 = 256;
- double[] d1 = new double[l1 * l2 * l3];
- double[,,] d2 = new double[l1, l2, l3];
- double[][][] d3 = new double[l1][][];
- for (int i = 0; i < l1; ++i)
- {
- d3[i] = new double[l2][];
- for (int j = 0; j < l2; ++j)
- {
- d3[i][j] = new double[l3];
- for (int k = 0; k < l3; ++k)
- d3[i][j][k] = d2[i, j, k] = d1[i * l2 + j * l3 + k] = random.NextDouble();
- }
- }
- const int iterations = 1000;
- TestTime<double[], int, int, double>(sum, d1, l1, l2, iterations);
- TestTime<double[,,], double>(sum, d2, iterations);
- TestTime<double[][][], double>(sum, d3, iterations);
- TestTime<double[], int, int, double>(sum, d1, l1, l2, iterations);
- TestTime<double[,,], double>(sum, d2, iterations);
- TestTime<double[][][], double>(sum, d3, iterations);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement