Java에서 작동하도록 다중 스레드 행렬 곱셈을 시도하는 중입니다. 조작을 수행하기 위해 (m x n) 행렬, (n x k) 행렬 및 't'스레드가 제공됩니다.Java 다중 스레드 행렬 곱셈
행렬이 정사각형이고 t == n 일 때 내 프로그램이 작동합니다. t < n으로 실행하면 다른 스레드는 추가 작업을 수행하지 않으며 부분적으로 완료된 행렬을 반환합니다. 행렬이 정사각형이 아닌 경우 추가 스레드는 배열 범위를 벗어난 오류를 반환하고 실행하지 않습니다. 나는 정말로 조언을 해줄 것이다. 관련 코드 스 니펫은 다음과 같습니다
시작 스레드. multipliers는 나중에 정의 된 클래스 인 MatrixMultiplier의 배열입니다.
Multiply multiply = new Multiply(cols_mat,rows_mat2);
for (int i = 0; i < threads ; i ++){
multipliers[i] = new MatrixMultiplier(multiply);
}
for (int i = 0; i < threads; i++){
my_threads[i] = new Thread(multipliers[i]);
}
for (int i = 0; i < threads; i++){
my_threads[i].start();
}
for (int i = 0; i < threads ; i++){
my_threads[i].join();
}
나는 개인적으로 문 제를 생각하는 행렬 곱셈
class Multiply extends MatrixMultiplication{
private int i;
private int j;
private int chance;
public Multiply(int i, int j){
this.i=i;
this.j=j;
chance=0;
}
public synchronized void multiplyMatrix(){
int sum=0;
int a=0;
for(a=0; a<i; a++){
sum = 0;
for (int b = 0; b<j; b++){
sum=sum+mat[chance][b]*mat2[b][a];
}
result[chance][a]=sum;
}
if(chance >=i)
return;
chance++;
}
}
그리고 행렬 승수
class MatrixMultiplier implements Runnable {
private final Multiply mul;
public MatrixMultiplier(Multiply mul){
this.mul=mul;
}
@Override
public void run(){
mul.multiplyMatrix();
}
}
을 정의
곱하기 클래스 e 거짓은 if (chance> = i) return; 하지만 스레드 열의 책임을 프로그램과 통합하는 방법을 아직 찾지 못했습니다. 다시 말하지만, 올바른 방향으로 나를 가리키는 조언은 크게 감사 할 것입니다. 고맙습니다.