Advertisement
Guest User

Untitled

a guest
Nov 13th, 2013
243
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.83 KB | None | 0 0
  1. using System.Diagnostics;
  2. using System.Linq;
  3. using Mono.Simd;
  4. using UnityEngine;
  5. using Debug = UnityEngine.Debug;
  6. using Random = System.Random;
  7.  
  8. public class Test2 : MonoBehaviour
  9. {
  10.     private const int SIZE = 2048;
  11.  
  12.     private void Start()
  13.     {
  14.         var array1 = new float[SIZE * SIZE];
  15.         var array2 = new float[SIZE * SIZE];
  16.         var array3 = new float[SIZE * SIZE];
  17.  
  18.         // Warm-up Jit
  19.         var array = new float[4];
  20.         NoSSE(array, array, array);
  21.         SSE(array, array, array);
  22.  
  23.         var timer = Stopwatch.StartNew();
  24.         timer.Stop();
  25.         timer.Reset();
  26.  
  27.         // No SSE test
  28.         FillArrays(array1, array2);
  29.         timer.Start();
  30.         {
  31.             NoSSE(array1, array2, array3);
  32.         }
  33.         timer.Stop();
  34.         long timeNoSSE = timer.ElapsedTicks;
  35.         float sumNoSSE = array3.Sum();
  36.  
  37.         // SSE test
  38.         FillArrays(array1, array2);
  39.         timer.Reset();
  40.         timer.Start();
  41.         {
  42.             SSE(array1, array2, array3);
  43.         }
  44.         timer.Stop();
  45.         long timeSSE = timer.ElapsedTicks;
  46.         float sumSSE = array3.Sum();
  47.  
  48.         Debug.Log("No SSE: " + timeNoSSE * 1000000 / Stopwatch.Frequency + " microseconds");
  49.         Debug.Log("SSE: " + timeSSE * 1000000 / Stopwatch.Frequency + " microseconds");
  50.         Debug.Log("Sums: no SSE = " + sumNoSSE + ", SSE = " + sumSSE);
  51.     }
  52.  
  53.     private static void SSE(float[] array1, float[] array2, float[] array3)
  54.     {
  55.         for (int i = 0; i < array1.Length; i += 4)
  56.         {
  57.             Vector4f a = array1.GetVector(i);
  58.             Vector4f b = array2.GetVector(i);
  59.             array3.SetVector(a + b, i);
  60.         }
  61.     }
  62.  
  63.     private static void NoSSE(float[] array1, float[] array2, float[] array3)
  64.     {
  65.         for (int i = 0; i < array1.Length; i++)
  66.         {
  67.             array3[i] = array1[i] + array2[i];
  68.         }
  69.     }
  70.  
  71.     private void FillArrays(float[] array1, float[] array2)
  72.     {
  73.         var rnd = new Random(1);
  74.         for (int i = 0; i < array1.Length; i++)
  75.         {
  76.             array1[i] = (float)rnd.NextDouble();
  77.             array2[i] = (float)rnd.NextDouble();
  78.         }
  79.     }
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement