並列行列の加算と乗算をシミュレートするプログラムを作成する必要があります。A、B、C の 3 つの行列があり、A+B = C または A*B = C を計算したい場合、作成できるスレッドの最大量は (C の行) * (これは、行列 C の各最終位置が他の位置とは無関係に計算できるためです。
私の本当の質問は次のとおりです。MatrixMath
メソッドを持つインターフェイスがある場合、またはメソッドが終了したときに、すべての変更が積または合計行列に書き込まれているmultiply(), add(), print()
ことを確認するにはどうすればよいですか?add()
multiply()
例:
class MatrixMathImplementation implements MatrixMath {
public void multiply(int[][]A, int[][]B, int[][]C) {
//multiply the two matrices, spawning m*n threads
//haven't coded this yet
}
public void add(int[][]A, int[][]B, int[][]C) {
//add the two matricies, spawning m*n threads
//First: Check that A, B, and C are all the same size
if (A.length == B.length && A.length == C.length &&
A[0].length == B[0].length && A[0].length == C[0].length) {
for (int row=0; row < A.length; row++) {
for (int col=0; col < A[0].length; col++) {
new MatrixSumThread(A,B,C,row,col);
}
}
} else {
System.out.println("ERROR: Arrays are not the same size.");
}
}
}
public void print() {
//print the given matrix
//doesn't need to be concurrent, haven't coded this yet either.
}
}
コードでMatrixSumThread
は、特定の行と列に必要な合計を計算し、それを行列 C のその行と列に入れるランナブルを作成しますMatrixProductThread
。
私が持っているかどうかを確認する方法についてのアイデア:
someMatrixMathObject.add(A,B,C);
someMatrixMathObject.multiply(A,B,C);
の前に確実にadd
仕上げることができmultiply
ますか、またはその逆ですか? 助けてくれてありがとう。