【发布时间】:2021-03-08 10:52:15
【问题描述】:
我正在尝试并行化两个矩阵A,B 的乘法。
不幸的是,串行实现仍然比并行实现快,或者加速太低。 (矩阵维度 = 512 的加速比就像 1.3)。可能有些事情根本上是错误的。有人可以给我小费吗?
double[][] matParallel2(final double[][] matrixA,
final double[][] matrixB,
final boolean parallel) {
int rows = matrixA.length;
int columnsA = matrixA[0].length;
int columnsB = matrixB[0].length;
Runnable task;
List<Thread> pool = new ArrayList<>();
double[][] returnMatrix = new double[rows][columnsB];
for (int i = 0; i < rows; i++) {
int finalI = i;
task = () -> {
for (int j = 0; j < columnsB; j++) {
// returnMatrix[finalI][j] = 0;
for (int k = 0; k < columnsA; k++) {
returnMatrix[finalI][j] +=
matrixA[finalI][k] * matrixB[k][j];
}
}
};
pool.add(new Thread(task));
}
if (parallel) {
for (Thread trd : pool) {
trd.start();
}
} else {
for (Thread trd : pool) {
trd.run();
}
}
try {
for (Thread trd : pool) {
trd.join();
}
} catch (
Exception e) {
e.printStackTrace();
}
return returnMatrix;
}
【问题讨论】:
标签: java multithreading matrix matrix-multiplication java-threads