【发布时间】:2019-09-24 23:09:07
【问题描述】:
对于我正在制作的程序,我想实现自己的矩阵向量乘法算法。这是它的代码。
static <T extends List<Double>> List<Double> matrixVectorMulti(List<T> matrix, List<Double> vector) {
List<Double> output = new ArrayList<>();
for(int row = 0; row < matrix.size(); row++) {
double sum = 0;
for (int column = 0; column < vector.size(); column++) {
sum += matrix.get(row).get(column) * vector.get(column);
}
output.add(sum);
}
return output;
}
是否可以使用多线程来提高算法的性能,或者我的算法是否更有效。此外,如果您能提供多线程实现的示例代码,将会很有帮助。
注意:列表列表用于对矩阵进行建模,列表用于对向量进行建模。
【问题讨论】:
-
您有示例输入/输出数据吗?由于这是 CPU 密集型活动,因此您可以实现并行执行逻辑。假设您有两个 CPU 内核 (
Runtime.getRuntime().availableProcessors()),您可以有两个线程进行计算……一个用于 row = 0 到 matrix.size()/2,另一个用于剩余的行。您可能需要有多个output并合并结果。 -
要让你的代码在多线程下运行,你需要找到一种方法来安全地划分问题。查看您的代码,内部
for循环中的工作似乎可以发送到单独的线程。例如,如果您有 10 行,那么您将有 10 个线程,每个线程为每行数据计算一个单独的sum值。然后您的主要matrixVectorMulti方法将等待每个线程完成并捕获每个sum值,将它们全部相加,然后将最终值返回为output。
标签: java multithreading