使矩阵乘法在并行java中工作
我根据我被教导创建矩阵乘法的内容创建了这段代码 但是我想对这段代码进行并行处理,这样它就可以在多个线程上工作 有人能帮我吗?我很不确定怎么做 更新:使矩阵乘法在并行java中工作,java,multithreading,parallel-processing,matrix-multiplication,Java,Multithreading,Parallel Processing,Matrix Multiplication,我根据我被教导创建矩阵乘法的内容创建了这段代码 但是我想对这段代码进行并行处理,这样它就可以在多个线程上工作 有人能帮我吗?我很不确定怎么做 更新: public class ParallelMatrix { public final static int N = 1000; //Random size of matrix public static void main(String[] args) throws InterruptedException { l
public class ParallelMatrix {
public final static int N = 1000; //Random size of matrix
public static void main(String[] args) throws InterruptedException {
long startTime = System.currentTimeMillis();
//Create and multiply matrix of random size N.
double [][] a = new double [N][N];
double [][] b = new double [N][N];
double [][] c = new double [N][N];
int i,j,k;
for(i = 0; i < N ; i++)
for(j = 0; j < N ; j++){
a[i][j] = i + j;
b[i][j] = i * j;
}
ExecutorService pool = Executors.newFixedThreadPool(10);
for(i = 0; i < N; i++) {
for(j = 0; j < N; j++) {
pool.submit(new Multi(N,i,j,a,b,c));
}
}
pool.shutdown();
pool.awaitTermination(1, TimeUnit.DAYS);
long endTime = System.currentTimeMillis();
System.out.println("Calculation completed in " +
(endTime - startTime) + " milliseconds");
}
static class Multi implements Runnable {
final int N;
final double [][] a;
final double [][] b;
final double [][] c;
final int i;
final int j;
public Multi(int N, int i, int j, double[][] a, double[][] b, double[][] c){
this.N=N;
this.i=i;
this.j=j;
this.a=a;
this.b=b;
this.c=c;
}
@Override
public void run() {
for(int k = 0; k < N; k++) c[i][j] += a[i][k] * b[k][j];
}
}
}
公共类并行矩阵{
公共最终静态int N=1000;//矩阵的随机大小
公共静态void main(字符串[]args)引发InterruptedException{
long startTime=System.currentTimeMillis();
//创建并乘以随机大小为N的矩阵。
double[]a=新的double[N][N];
双精度[][]b=新双精度[N][N];
double[]c=新的double[N][N];
int i,j,k;
对于(i=0;i
您可以在单独的线程中计算矩阵C的每个单元格,例如:
class Multi implements Runnable {
final int N;
final double [][] a;
final double [][] b;
final double [][] c;
final int i;
final int j;
...
@Override
public void run() {
for(int k = 0; k < N; k++) c[i][j] += a[i][k] * b[k][j];
}
}
ExecutorService pool = ...;
for (int i = 0;...)
for (int j = 0;...)
pool.submit(new Multi(N,i,j,a,b,c));
pool.shutdown();
pool.awaitTermination(1, TimeUnit.DAYS);
类多实现可运行{
最终整数N;
最终双[][]a;
最终双[][]b;
最终双[][]c;
最终int i;
最终int j;
...
@凌驾
公开募捐{
对于(int k=0;k
但是,对整列或整行执行此操作更有意义。这就是我要做的,如何将代码拆分以添加到其中?如果你能提供代码,我会非常感激的。我已经给你提供了代码。只需像原始代码中那样填写for循环,然后完成构造函数。好的,让我看看我做了多少,我从来没有使用过ExecutorService,所以被弄糊涂了。我没有运气在添加循环时不断出错。错误可能会告诉你出了什么问题。我不会为你写完整的代码。我给了你所有重要的部分,只是感觉差距。如果你有具体的错误,写下来,我可以帮你。