ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Develop] 다중쓰레드로 40x40행렬 곱셈 계산
    Mhwan's Develope/JAVA 2020. 1. 3. 00:24

    ## 기능

     - 자바의 대표적인 장점인 다중쓰레드를 연습하기 위해 다중쓰레드로 40x40행렬 곱셈 계산

     - 두개의 40x40행렬을 arguments로 넣어 실행시키면 결과행렬을 c.dat에 저장 

     

    ## 간단 설명 및 알고리즘

     - Runnable 객체를 상속 받은 클래스를 만들어 쓰레드로 생성

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public class MatrixRunner implements Runnable {
        private Matrix matrix;
        private int start, end;
     
        public MatrixRunner(Matrix matrix, int start, int end) {
            this.matrix = matrix;
            this.start = start;
            this.end = end;
        }
        @Override
        public void run() {
            try{
                matrix.multiplyMatrix(start, end);
            } finally {
                matrix.printPartMatrix(start, end, Thread.currentThread().getName());
            }
        }
    }
    cs

     - 실제 행렬이 있고 행렬의 계산이 이루어지는 하나의 클래스 인스턴스를 만들고 각 쓰레드는 동시적으로 Matrix 인스턴스에 접근하여 계산을 진행

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    public class Matrix {
        private int[][] matrixA, matrixB, matrixC;
        private int size;
     
        public Matrix(int[][]matrixA, int[][]matrixB, int size){
            this.matrixA = matrixA;
            this.matrixB = matrixB;
            this.size = size;
            matrixC = new int[size][size];
        }
     
        public void multiplyMatrix(int start, int end){
            for (int s = start; s<= end; s++) {
                for (int i = 0; i < size; i++) {
                    int sum = 0;
                    for (int j = 0; j < size; j++)
                        sum += (matrixA[i][j] * matrixB[j][s]);
                    matrixC[i][s] = sum;
                }
            }
        }
     
        public synchronized void printPartMatrix(int s, int e, String thName){
            System.out.println("---"+thName+"["+s+", "+e+"]---");
            for(int i = 0; i<size; i++){
                for(int j = s; j<=e; j++)
                    System.out.printf("%5d", matrixC[i][j]);
                System.out.println();
            }
        }
        public void printResultMatrix(){
            MatrixWriter.writeFile("c.dat", matrixC);
            System.out.println("finally result : ");
            for (int i = 0; i<size; i++){
                for (int j = 0; j<size; j++)
                    System.out.printf("%5d ", matrixC[i][j]);
                System.out.println();
            }
        }
    }
    cs

     

     

    ## 링크

    Github : https://github.com/mhwan/MultiThread 

     

    mhwan/MultiThread

    multiply Matrix for MultiThread in java. Contribute to mhwan/MultiThread development by creating an account on GitHub.

    github.com

     

    댓글

Designed by Mhwan.