public void SpeedTest() { Random rd = new Random(1234); Stopwatch sw = new Stopwatch(); for (uint dst_length = 1; dst_length <= 32; dst_length++) { uint src_length = dst_length * 1000000; AvxArray <float> vx = new float[src_length]; AvxArray <float> vy = new float[dst_length]; Aggregation.Average(src_length, vx, dst_length, vy, 1); sw.Restart(); Aggregation.Average(src_length, vx, dst_length, vy, 1); Aggregation.Average(src_length, vx, dst_length, vy, 1); Aggregation.Average(src_length, vx, dst_length, vy, 1); Aggregation.Average(src_length, vx, dst_length, vy, 1); sw.Stop(); Console.WriteLine($"{dst_length} : {sw.ElapsedMilliseconds / 4} msec"); } }
public void Aggregation_Average() { // Arrange var numbers = new int[] { 10, 20, 30, 40, 50 }; // Act var result = _aggregation.Average(numbers); // Assert Assert.True(Math.Abs(result - 30.0) < 0.1); }
public void ExecuteTest() { Random rd = new Random(1234); for (uint dst_length = 1; dst_length <= 32; dst_length++) { for (uint src_length = dst_length; src_length <= dst_length * 32; src_length += dst_length) { for (uint slides = 0; slides <= 4; slides++) { float[] x = (new float[src_length * slides + 1]).Select((_) => (float)rd.NextDouble() * 2 - 1).ToArray(); float[] y = (new float[dst_length * slides + 1]).Select((_) => (float)rd.NextDouble() + 1).ToArray(); float v1 = y[dst_length * slides]; AvxArray <float> vx = x, vy = y; Aggregation.Average(src_length, vx, dst_length, vy, slides); y = vy; double inv = (double)dst_length / src_length; for (int j = 0; j < slides; j++) { double[] sum = new double[dst_length]; for (int i = 0; i < src_length; i++) { sum[i % dst_length] += x[i + j * src_length]; } for (int i = 0; i < dst_length; i++) { Assert.AreEqual(sum[i] * inv, y[i + j * dst_length], 1e-5f); } } Assert.AreEqual(v1, y[dst_length * slides]); Console.WriteLine($"pass: {src_length} {dst_length} {slides}"); } } } }