예제 #1
0
 public void TestJaggedUnrolled()
 {
     AssertMatrixJagged((result, a, b) =>
     {
         VBMM.MatrixMulti_JaggedUnrolled(result, a, b);
     });
 }
예제 #2
0
 public void TestUnrolled()
 {
     AssertMatrix((result, a, b) =>
     {
         VBMM.MatrixMulti_Unrolled(result, a, b);
     });
 }
예제 #3
0
 public void TestNoAlloc()
 {
     AssertMatrix((result, a, b) =>
     {
         VBMM.MatrixMulti_Baseline(result, a, b);
     });
 }
예제 #4
0
        public void AssertMatrixJagged(Action <double[][], double[][], double[][]> action)
        {
            // Arrange
            var result = Helper.GenerateZeroMatrixJagged();
            var a      = Helper.ToJagged(Helper.GenerateTestMatrix());
            var b      = Helper.ToJagged(Helper.GenerateTestMatrix());

            // Act
            action(result, a, b);

            var newResult = Helper.To2d(result);

            // Assert
            CollectionAssert.AreEqual(newResult, VBMM.MatrixMulti_Original(Helper.To2d(a), Helper.To2d(b)));
        }
예제 #5
0
        public void AssertMatrix(Action <double[, ], double[, ], double[, ]> action)
        {
            // Arrange
            var result = Helper.GenerateZeroMatrix();
            var a      = Helper.GenerateTestMatrix();
            var b      = Helper.GenerateTestMatrix();

            // Act
            action(result, a, b);

            var expected = VBMM.MatrixMulti_Original(a, b);

            // Assert
            for (var i = 0; i <= result.GetUpperBound(0); i++)
            {
                for (var j = 0; j <= result.GetUpperBound(1); j++)
                {
                    Assert.AreEqual(expected[i, j], result[i, j], 0.00001, $"I={i}, J={j}, Expected={expected[i,j]}, Actual={result[i, j]}");
                }
            }
            //CollectionAssert.AreEqual(expected, result);
        }
예제 #6
0
 public double[][] Jagged_Unrolled()
 {
     VBMM.MatrixMulti_JaggedUnrolled(resultjag, ajag, bjag);
     return(resultjag);
 }
예제 #7
0
 public double[,] Unrolled()
 {
     VBMM.MatrixMulti_Unrolled(result, a, b);
     return(result);
 }
예제 #8
0
 public double[,] Baseline()
 {
     VBMM.MatrixMulti_Baseline(result, a, b);
     return(result);
 }
예제 #9
0
        public double[,] Original()
        {
            var newResult = VBMM.MatrixMulti_Original(a, b);

            return(newResult);
        }