这是我并行乘法矩阵的代码:
public void multiplyParallel() {
int numProcessors = Runtime.getRuntime().availableProcessors();
int step = (int)MATRIX_SIZE/numProcessors;
for (int i=0; i<numProcessors; i++) {
Runnable r = new MatrixMultiply(this.start, this.end);
new Thread(r).start();
this.start += step;
this.end += step;
}
this.start = 0;
this.end = 0;
}
@Override
public void run() {
for (int i=this.start; i<this.end; i++)
for (int j=this.start; j<this.end; j++)
for (int k=this.start; k<this.end; k++)
this.matrix3[i][j] = this.matrix1[i][k] * this.matrix2[k][j];
}
但是当我在 1024x1024 矩阵上运行此代码时,它只运行 2-3 毫秒,而串行版本运行大约 1 秒。我最多应该期望并行版本的 1/(numProcessors) 时间。
有什么我做错了吗?run() 方法被调用的次数与我机器上的处理器数量相同。