并行矩阵乘法变量错误java
Parallel Matrix Multiplication variable error java
我是按照某人的指导使用我的代码进行的,到目前为止,现在卡住了。
他告诉我并行化算法以在单独的线程中计算矩阵 C 的每个单元格。
我试过按照他说的去做,但遇到了一些错误。我不熟悉 ExecutorService 池,所以我希望我做对了。
第 38 行出现错误,指出无法从静态上下文中引用非静态变量。
有人可以帮我吗?
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class Matrix1 {
public final static int N = 4; //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(1);
for(i = 0; i < N; i++)
for(j = 0; j < N; j++){
c[i][j] = 0;
for(k = 0; k < N; k++)
c[i][j] += a[i][k] * b[k][j]; //C matrix calculated from a and B matrices.
}
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];
}
}
}
在 Multi
的声明中添加 static
关键字:
static class Multi implements Runnable {
我是按照某人的指导使用我的代码进行的,到目前为止,现在卡住了。
他告诉我并行化算法以在单独的线程中计算矩阵 C 的每个单元格。
我试过按照他说的去做,但遇到了一些错误。我不熟悉 ExecutorService 池,所以我希望我做对了。
第 38 行出现错误,指出无法从静态上下文中引用非静态变量。
有人可以帮我吗?
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class Matrix1 {
public final static int N = 4; //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(1);
for(i = 0; i < N; i++)
for(j = 0; j < N; j++){
c[i][j] = 0;
for(k = 0; k < N; k++)
c[i][j] += a[i][k] * b[k][j]; //C matrix calculated from a and B matrices.
}
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];
}
}
}
在 Multi
的声明中添加 static
关键字:
static class Multi implements Runnable {