Parallel processing Java中并行方法和顺序方法的区别是什么?
我目前尝试用Java8编写代码。昨天我找到了下一个例子,这些例子来自线性代数。在矩阵向量乘法的基础上(链接中的最后一个示例),我为矩阵乘法编码了我的所有者方法。我的代码在这里:Parallel processing Java中并行方法和顺序方法的区别是什么?,parallel-processing,java-8,Parallel Processing,Java 8,我目前尝试用Java8编写代码。昨天我找到了下一个例子,这些例子来自线性代数。在矩阵向量乘法的基础上(链接中的最后一个示例),我为矩阵乘法编码了我的所有者方法。我的代码在这里: import java.util.stream.IntStream; public static void matrixMatrixProduct() { System.out.println("Matrix matrix mulptiplication"); final int DIM1 = 15;
import java.util.stream.IntStream;
public static void matrixMatrixProduct() {
System.out.println("Matrix matrix mulptiplication");
final int DIM1 = 15;
final int DIM2 = 20;
final int DIM3 = 2;
int[][] a = new int[DIM1][DIM2];
int[][] b = new int[DIM1][DIM3];
int[][] c = new int[DIM3][DIM2];
int counter = 1;
for (int i =0; i < DIM1; i++) {
for (int j =0; j < DIM3; j++) {
b[i][j] = counter++;
}
}
for (int i =0; i < DIM3; i++) {
for (int j =0; j < DIM2; j++) {
c[i][j] = counter++;
}
}
System.out.println("");
System.out.println("Print matrix b");
System.out.println("");
for (int i = 0; i < DIM1; i++) {
for (int j = 0; j < DIM3; j++) {
System.out.print(b[i][j] + " ");
}
System.out.print("\n");
}
System.out.println("");
System.out.println("Print matrix c");
System.out.println("");
for (int i = 0; i < DIM3; i++) {
for (int j = 0; j < DIM2; j++) {
System.out.print(c[i][j] + " ");
}
System.out.print("\n");
}
IntStream.range(0, DIM1)
.parallel()
.forEach( (i) -> {
IntStream.range(0, DIM2)
.sequential()
.forEach( (j) -> {
IntStream.range(0, DIM3)
.parallel()
.forEach( (k) -> {
a[i][j] += b[i][k]*c[k][j];
});
});
});
System.out.println("");
System.out.println("Print matrix a");
System.out.println("");
for (int i = 0; i < DIM1; i++) {
for (int j = 0; j < DIM2; j++) {
System.out.print(a[i][j] + " ");
}
System.out.print("\n");
}
import java.util.stream.IntStream;
公共静态无效矩阵matrixMatrixProduct(){
System.out.println(“矩阵乘法”);
最终int DIM1=15;
最终int DIM2=20;
最终int DIM3=2;
int[]a=新int[DIM1][DIM2];
int[]b=新int[DIM1][DIM3];
int[][]c=新int[DIM3][DIM2];
int计数器=1;
对于(int i=0;i{
IntStream.range(0,DIM2)
.forEach((j)->{
IntStream.range(0,DIM3)
.parallel()
.forEach((k)->{
a[i][j]+=b[i][k]*c[k][j];
});
});
});
System.out.println(“”);
System.out.println(“打印矩阵a”);
System.out.println(“”);
对于(int i=0;i
我的问题是,通过调用
IntStream
类,parallel()
和sequential()
方法之间到底有什么区别?(实际上这是最重要的部分,我在这里显式地进行乘法).基于这些知识,我想知道上次调用IntStream
的正确用法是什么。目前我已经在这里定义了方法parallel()
,但我不确定这是一个正确的解决方案…实际上,如果我将parallel()
更改为sequential()
我在输出中看不到任何差异。并行操作同时发生。这意味着流的元素可以同时处理
连续的操作一次发生一个
从<代码>顺序>(代码)> <代码>并行()>代码>对结果没有影响,因为您的操作是独立于状态的,但可能影响您的运行时间。但是,如果您的操作影响将来的操作,则应该考虑使用<代码>序贯()< < /> >
我假设你希望矩阵运算并行进行,但我对数学不太熟悉链接到@the8472引用的方法。你读过方法的javadocs吗?很抱歉,@the8472的那些方法没有找到。如果你不知道这些方法是做什么的,我会读这篇文章,那么我不明白你为什么要首先使用它们。@zeroflagL,我之前说过,我使用矩阵向量乘法的源代码作为backgr矩阵乘法的基础代码。这两种方法在第一个源代码中已经预定义,我不想更改我不理解正确的部分。因此我在这里提问。我同意,询问矩阵向量乘法的第一个代码可能更好。