⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calculate.cs

📁 矩阵并行算法程序
💻 CS
字号:
using System;
using System.Threading;
namespace Engineer2008.Martrix
{
    internal class Calculate
    {
        #region MATT A[M,N]->B[N,M]
        public static void MATT(int M, int N, double[,] A, double[,] B)
        {
            int I, J; for (I = 0; I < M; I++) for (J = 0; J < N; J++) B[J, I] = A[I, J];
        }
        public static void ParallelMATT(int M, int N, double[,] A, double[,] B)
        {
            int J; Parallel.For(0, M, I => { for (J = 0; J < N; J++) B[J, I] = A[I, J]; });
        }
        #endregion

        #region MATMUL A[M,N]*B[N]=C[M]
         public static void MATMUL(int M, int N, double[,] A, double[] B, double[] C)
        {
            int I, J; for (I = 0; I < M; I++) { C[I] = 0; for (J = 0; J < N; J++)C[I] += A[I, J] * B[J]; }
        }
        public static void ParallelMATMUL(int M, int N, double[,] A, double[] B, double[] C)
        {
            int J; Parallel.For(0, M, I => { C[I] = 0; for (J = 0; J < N; J++)C[I] += A[I, J] * B[J]; });
        }
        #endregion

        #region TMATMUL A[M,N]*B[M]=C[N](用A的转值乘以B)
        public static void TMATMUL(int M, int N, double[,] A, double[] B, double[] C)
        {
            int I, J; for (I = 0; I < N; I++) { C[I] = 0; for (J = 0; J < M; J++)C[I] += A[J, I] * B[J]; }
        }
        public static void ParallelTMATMUL(int M, int N, double[,] A, double[] B, double[] C)
        {
            int J; Parallel.For(0, N, I => { C[I] = 0; for (J = 0; J < M; J++)C[I] += A[J, I] * B[J]; });
        }
        #endregion

        #region MATMUL A[M][N]*B[N][L]=C[M,L]
        public static void MATMUL(int M, int N, int L, double[,] A, double[,] B, double[,] C)
        {
            int I, J, K; for (K = 0; K < L; K++) for (I = 0; I < M; I++) { C[I, K] = 0.0; for (J = 0; J < N; J++) C[I, K] += A[I, J] * B[J, K]; }
        }
        public static void ParallelMATMUL(int M, int N, int L, double[,] A, double[,] B, double[,] C)
        {
            int I, J; Parallel.For(0, L, K => { for (I = 0; I < M; I++) { C[I, K] = 0.0; for (J = 0; J < N; J++) C[I, K] += A[I, J] * B[J, K]; } });
        }
        public static void Parallel2MATMUL(int M, int N, int L, double[,] A, double[,] B, double[,] C)
        {
            int J; Parallel.For(0, L, K => { Parallel.For(0, M, I => { C[I, K] = 0.0; for (J = 0; J < N; J++) C[I, K] += A[I, J] * B[J, K]; }); });
        }
        #endregion

        #region TMATMUL A[M][N]*B[M][L]=C[N,L] (用A的转值乘以B)
        public static void TMATMUL(int M, int N, int L, double[,] A, double[,] B, ref double[,] C)
        {
            int I, J, K; for (K = 0; K < L; K++) for (I = 0; I < N; I++) { C[I, K] = 0.0; for (J = 0; J < M; J++) C[I, K] += A[J, I] * B[J, K]; }
        }
        public static void ParallelTMATMUL(int M, int N, int L, double[,] A, double[,] B, double[,] C)
        {
            int I, J; Parallel.For(0, L, K => { for (I = 0; I < N; I++) { C[I, K] = 0.0; for (J = 0; J < M; J++) C[I, K] += A[J, I] * B[J, K]; } });
        }
        public static void Parallel2TMATMUL(int M, int N, int L, double[,] A, double[,] B,double[,] C)
        {
            int J; Parallel.For(0, L, K => { Parallel.For(0, N, I => { C[I, K] = 0.0; for (J = 0; J < M; J++) C[I, K] += A[J, I] * B[J, K]; }); });
        }
        #endregion

    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -