加速一次又一次调用相同函数的代码
Speeding up a code that calls same function again and again
我有一个矩阵 A,大小为 M X N。 我必须为整个矩阵的每一列调用相同的函数。到目前为止,我一直在提取每一列并在列上调用函数迭代直到N。即(列数)
有什么better/faster的方法吗?
感谢任何帮助。谢谢
如今,如果可以的话,您可以使用并行计算来提高性能。
CPU 是 multicore/multithread。
您可以使用例如 java 8 流和并行计算。
例如
@Test
2 public static void matrixVectorProduct() {
3 System.out.println("Matrix Vector multiplication");
4 final int DIM = 5;
5
6 int [][]a = new int[DIM][DIM];
7 int counter = 1;
8 for (int i = 0; i < a.length; i++) {
9 for (int j = 0; j < a[0].length; j++) {
10 a[i][j] = counter++;
11 }
12 }
13
14 int []v = new int[DIM];
15 Arrays.fill(v, 5);
16 int []c = new int[DIM];
17
18 IntStream.range(0, c.length)
19 .parallel()
20 .forEach( (i) -> {
21 IntStream.range(0, a.length)
22 .sequential()
23 .forEach( (j) -> { c[i] += v[j] * a[i][j]; });
24 });
25
26
27 int []expected = new int[]{75, 200, 325, 450, 575};
28 assertArrayEquals(expected, c);
29
30 System.out.println("Matrix-Vector product: " + Arrays.toString(c));
31 }
我有一个矩阵 A,大小为 M X N。 我必须为整个矩阵的每一列调用相同的函数。到目前为止,我一直在提取每一列并在列上调用函数迭代直到N。即(列数)
有什么better/faster的方法吗?
感谢任何帮助。谢谢
如今,如果可以的话,您可以使用并行计算来提高性能。
CPU 是 multicore/multithread。
您可以使用例如 java 8 流和并行计算。
例如
@Test
2 public static void matrixVectorProduct() {
3 System.out.println("Matrix Vector multiplication");
4 final int DIM = 5;
5
6 int [][]a = new int[DIM][DIM];
7 int counter = 1;
8 for (int i = 0; i < a.length; i++) {
9 for (int j = 0; j < a[0].length; j++) {
10 a[i][j] = counter++;
11 }
12 }
13
14 int []v = new int[DIM];
15 Arrays.fill(v, 5);
16 int []c = new int[DIM];
17
18 IntStream.range(0, c.length)
19 .parallel()
20 .forEach( (i) -> {
21 IntStream.range(0, a.length)
22 .sequential()
23 .forEach( (j) -> { c[i] += v[j] * a[i][j]; });
24 });
25
26
27 int []expected = new int[]{75, 200, 325, 450, 575};
28 assertArrayEquals(expected, c);
29
30 System.out.println("Matrix-Vector product: " + Arrays.toString(c));
31 }