public void MinusPlusPlus_2000x2000()
        {
            var tileSize = 40;

            // prepare data
            var data1 = MatrixHelpers.Tile(Matrix<double>.DeSerializeFromFile(@"C:\Users\eh\Documents\KU\Inversion-of-Block-Tridiagonal-Matrices\Dataset\m2000x2000-a.mat"), tileSize);
            var data2 = MatrixHelpers.Tile(Matrix<double>.DeSerializeFromFile(@"C:\Users\eh\Documents\KU\Inversion-of-Block-Tridiagonal-Matrices\Dataset\m2000x2000-b.mat"), tileSize);
            var data3 = MatrixHelpers.Tile(Matrix<double>.DeSerializeFromFile(@"C:\Users\eh\Documents\KU\Inversion-of-Block-Tridiagonal-Matrices\Dataset\m2000x2000-c.mat"), tileSize);
            Matrix<Matrix<double>> expected = MatrixHelpers.Tile(Matrix<double>.DeSerializeFromFile(@"C:\Users\eh\Documents\KU\Inversion-of-Block-Tridiagonal-Matrices\Dataset\m2000x2000-a_b_c-MinusPlusPlus-result.mat"), tileSize);

            var opData1 = new OperationResult<double>(data1);
            var opData2 = new OperationResult<double>(data2);
            var opData3 = new OperationResult<double>(data3);
            OperationResult<double> actual;
            var mProducer = new MinusPlusPlus<double>(opData1, opData2, opData3, out actual);
            var pm = new Manager(mProducer);
            pm.Start();
            pm.Join();

            MatrixHelpers.IsDone(actual);
            MatrixHelpers.Diff(expected, actual.Data);
            MatrixHelpers.Compare(expected, actual.Data);
        }
            public static IEnumerable<Measurement> MinusPlusPlus()
            {
                foreach (int threadCount in ThreadCountGenerator())
                    foreach (int tileSize in TileSizeGenerator)
                        yield return new ThreeBlockMatrixMeasurement
                        {
                            TileSize = tileSize,
                            ThreadCount = threadCount,
                            Execute = (a, b, c, tc) =>
                            {
                                var opRes1 = new OperationResult<double>(a);
                                var opRes2 = new OperationResult<double>(b);
                                var opRes3 = new OperationResult<double>(c);

                                OperationResult<double> actual;
                                var producer = new MinusPlusPlus<double>(opRes1, opRes2,
                                                                         opRes3,
                                                                         out actual);
                                Runner(producer, tc);
                            }
                        };
            }