Performance 加速反复调用同一函数的代码
我有一个矩阵,比如说a,大小mxn.我必须为整个矩阵中的每一列调用相同的函数。到目前为止,我一直在提取每一列,并调用该列上的函数迭代到N。i、 e.(列数) 有什么更好/更快的方法吗Performance 加速反复调用同一函数的代码,performance,computation-theory,memory-efficient,computation,space-efficiency,Performance,Computation Theory,Memory Efficient,Computation,Space Efficiency,我有一个矩阵,比如说a,大小mxn.我必须为整个矩阵中的每一列调用相同的函数。到目前为止,我一直在提取每一列,并调用该列上的函数迭代到N。i、 e.(列数) 有什么更好/更快的方法吗 谢谢你的帮助。感谢现在,如果可以的话,您可以使用并行计算提高性能 CPU是多核/多线程的 例如,您可以使用Java8流和并行计算 比如说 @Test 2 public static void matrixVectorProduct() { 3 System.out.println("Matrix
谢谢你的帮助。感谢现在,如果可以的话,您可以使用并行计算提高性能 CPU是多核/多线程的 例如,您可以使用Java8流和并行计算 比如说
@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 }
@测试
2公共静态无效矩阵VectorProduct(){
3系统输出println(“矩阵向量乘法”);
4最终int DIM=5;
5.
6 int[]a=新int[DIM][DIM];
7整数计数器=1;
8表示(int i=0;i{
21 IntStream.范围(0,a.长度)
22.顺序的()
23.forEach((j)->{c[i]+=v[j]*a[i][j];});
24 });
25
26
27 int[]预期=新int[]{75200325450575};
28个资产质量(预计为c);
29
30 System.out.println(“矩阵向量积:“+Arrays.toString(c));
31 }
您是否考虑过换位,然后只传递行?由于缓存利用率的提高,您可能会获得性能的提高,并且您将消除提取列所需的时间。但是如果没有一些代码来查看其他瓶颈可能在哪里,那么很难说。