Попытка получить многопоточное матричное умножение для работы на Java. Для выполнения операции дается матрица (m x n), матрица (n x k) и «t».Многопоточная матричная мультипликация Java
Моя программа работает, когда матрицы квадратные и t == n. При работе с t < n другие потоки не подбирают дополнительные операции и возвращают частично заполненную матрицу. Когда матрицы не квадратные, дополнительные потоки возвращают массив за пределы ошибок и не запускаются. Я был бы очень признателен за любые советы. Вот соответствующие фрагменты кода
Начальные темы. множители - это массив 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();
}
Multiply класс, который определяет матричное умножение
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();
}
}
Где я лично думаю, что ISSU e лежит с if (шанс> = i) return; но я не нашел способ включить обязанности столбца потока с программой, все еще работающей. Снова, любой совет, указывающий мне в правильном направлении, будет очень признателен. Спасибо