コード例 #1
0
ファイル: Program.cs プロジェクト: RedMindZ/RedMath
        private static void TestMatMul()
        {
            int       testCount = 10000;
            Stopwatch sw        = new Stopwatch();

            Rational[,] matData = new Rational[3, 3];
            matData.AssignAll(ind => new Rational(ind[0] * matData.GetLength(0) + ind[1]));
            Matrix <Rational> mat1 = new Matrix <Rational>(matData);
            Matrix <Rational> mat2 = new Matrix <Rational>(mat1.Transposition);

            Console.WriteLine("Multiplying matrices:");
            Console.WriteLine(mat1);
            Console.WriteLine("And:");
            Console.WriteLine(mat2);
            Console.WriteLine("For " + testCount + " times...");

            sw.Start();

            Matrix <Rational> res = null;

            for (int i = 0; i < testCount; i++)
            {
                res = mat1 * mat2;
            }

            sw.Stop();

            Console.WriteLine(res);
            Console.WriteLine("Measured time: " + sw.Elapsed.TotalMilliseconds + "ms");
            Console.WriteLine("Average time per operation: " + sw.Elapsed.TotalMilliseconds / testCount + "ms");
            Console.WriteLine();


            Console.WriteLine("Now testing with ParallelMultiply:");

            sw.Restart();

            for (int i = 0; i < testCount; i++)
            {
                res = MatrixMultiplication.CpuParallelMultiply(mat1, mat2);
            }

            sw.Stop();

            Console.WriteLine(res);
            Console.WriteLine("Measured time: " + sw.Elapsed.TotalMilliseconds + "ms");
            Console.WriteLine("Average time per operation: " + sw.Elapsed.TotalMilliseconds / testCount + "ms");
            Console.WriteLine();

            MatrixMultiplication.GpuMultiply <Rational, GpuRational>(mat1, mat2); // 'Warmup' the gpu

            Console.WriteLine("Now testing with GPUMultiply:");

            sw.Restart();

            for (int i = 0; i < testCount; i++)
            {
                res = MatrixMultiplication.GpuMultiply <Rational, GpuRational>(mat1, mat2);
            }

            sw.Stop();

            Console.WriteLine(res);
            Console.WriteLine("Measured time: " + sw.Elapsed.TotalMilliseconds + "ms");
            Console.WriteLine("Average time per operation: " + sw.Elapsed.TotalMilliseconds / testCount + "ms");
            Console.WriteLine();
        }