Advertisement
Guest User

Untitled

a guest
Nov 22nd, 2013
399
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.08 KB | None | 0 0
  1. using System;
  2.  
  3. namespace single_dimension_vs_multidimension
  4. {
  5.     class Program
  6.     {
  7.  
  8.  
  9.         public static double sum(double[] d, int l1, int l2)
  10.         {    // assuming the array is rectangular
  11.             double sum = 0;
  12.             int l3 = d.Length / (l1 * l2);
  13.             for (int i = 0; i < l1; ++i)
  14.                 for (int j = 0; j < l2; ++j)
  15.                     for (int k = 0; k < l3; ++k)
  16.                         sum += d[i * l2 + j * l3 + k];
  17.             return sum;
  18.         }
  19.  
  20.         public static double sum(double[,,] d)
  21.         {
  22.             double sum = 0;
  23.             int l1 = d.GetLength(0);
  24.             int l2 = d.GetLength(1);
  25.             int l3 = d.GetLength(2);
  26.             for (int i = 0; i < l1; ++i)
  27.                 for (int j = 0; j < l2; ++j)
  28.                     for (int k = 0; k < l3; ++k)
  29.                         sum += d[i, j, k];
  30.             return sum;
  31.         }
  32.         public static double sum(double[][][] d)
  33.         {
  34.             double sum = 0;
  35.             for (int i = 0; i < d.Length; ++i)
  36.                 for (int j = 0; j < d[i].Length; ++j)
  37.                     for (int k = 0; k < d[j].Length; ++k)
  38.                         sum += d[i][j][k];
  39.             return sum;
  40.         }
  41.         public static void TestTime<T, TR>(Func<T, TR> action, T obj, int iterations)
  42.         {
  43.             Stopwatch stopwatch = Stopwatch.StartNew();
  44.             for (int i = 0; i < iterations; ++i)
  45.                 action(obj);
  46.             Console.WriteLine(action.Method.Name + " took " + stopwatch.Elapsed);
  47.         }
  48.         public static void TestTime<T1, T2, T3, TR>(Func<T1, T2, T3, TR> action, T1 obj1, T2 obj2, T3 obj3, int iterations)
  49.         {
  50.             Stopwatch stopwatch = Stopwatch.StartNew();
  51.             for (int i = 0; i < iterations; ++i)
  52.                 action(obj1, obj2, obj3);
  53.             Console.WriteLine(action.Method.Name + " took " + stopwatch.Elapsed);
  54.         }
  55.         public static void Main()
  56.         {
  57.             Random random = new Random();
  58.             const int l1 = 256, l2 = 256, l3 = 256;
  59.             double[] d1 = new double[l1 * l2 * l3];
  60.             double[,,] d2 = new double[l1, l2, l3];
  61.             double[][][] d3 = new double[l1][][];
  62.             for (int i = 0; i < l1; ++i)
  63.             {
  64.                 d3[i] = new double[l2][];
  65.                 for (int j = 0; j < l2; ++j)
  66.                 {
  67.                     d3[i][j] = new double[l3];
  68.                     for (int k = 0; k < l3; ++k)
  69.                         d3[i][j][k] = d2[i, j, k] = d1[i * l2 + j * l3 + k] = random.NextDouble();
  70.                 }
  71.             }
  72.             const int iterations = 1000;
  73.             TestTime<double[], int, int, double>(sum, d1, l1, l2, iterations);
  74.             TestTime<double[,,], double>(sum, d2, iterations);
  75.             TestTime<double[][][], double>(sum, d3, iterations);
  76.  
  77.             TestTime<double[], int, int, double>(sum, d1, l1, l2, iterations);
  78.             TestTime<double[,,], double>(sum, d2, iterations);
  79.             TestTime<double[][][], double>(sum, d3, iterations);
  80.         }
  81.  
  82.     }
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement