Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Diagnostics;
- using System.Linq;
- using Mono.Simd;
- using UnityEngine;
- using Debug = UnityEngine.Debug;
- using Random = System.Random;
- public class Test2 : MonoBehaviour
- {
- private const int SIZE = 2048;
- private void Start()
- {
- var array1 = new float[SIZE * SIZE];
- var array2 = new float[SIZE * SIZE];
- var array3 = new float[SIZE * SIZE];
- // Warm-up Jit
- var array = new float[4];
- NoSSE(array, array, array);
- SSE(array, array, array);
- var timer = Stopwatch.StartNew();
- timer.Stop();
- timer.Reset();
- // No SSE test
- FillArrays(array1, array2);
- timer.Start();
- {
- NoSSE(array1, array2, array3);
- }
- timer.Stop();
- long timeNoSSE = timer.ElapsedTicks;
- float sumNoSSE = array3.Sum();
- // SSE test
- FillArrays(array1, array2);
- timer.Reset();
- timer.Start();
- {
- SSE(array1, array2, array3);
- }
- timer.Stop();
- long timeSSE = timer.ElapsedTicks;
- float sumSSE = array3.Sum();
- Debug.Log("No SSE: " + timeNoSSE * 1000000 / Stopwatch.Frequency + " microseconds");
- Debug.Log("SSE: " + timeSSE * 1000000 / Stopwatch.Frequency + " microseconds");
- Debug.Log("Sums: no SSE = " + sumNoSSE + ", SSE = " + sumSSE);
- }
- private static void SSE(float[] array1, float[] array2, float[] array3)
- {
- for (int i = 0; i < array1.Length; i += 4)
- {
- Vector4f a = array1.GetVector(i);
- Vector4f b = array2.GetVector(i);
- array3.SetVector(a + b, i);
- }
- }
- private static void NoSSE(float[] array1, float[] array2, float[] array3)
- {
- for (int i = 0; i < array1.Length; i++)
- {
- array3[i] = array1[i] + array2[i];
- }
- }
- private void FillArrays(float[] array1, float[] array2)
- {
- var rnd = new Random(1);
- for (int i = 0; i < array1.Length; i++)
- {
- array1[i] = (float)rnd.NextDouble();
- array2[i] = (float)rnd.NextDouble();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement