【发布时间】:2016-11-05 03:21:34
【问题描述】:
我有一个小的 Java 方法,用于在输入向量和矩阵之间执行点积。代码如下:
public void calcOutput() {
outputs = new float[output];
float sum = 0F;
for(int j = 0; j < output; j++) {
for(int i = 0; i < input; i++) {
sum += inputs[i] * weights[j][i];
}
outputs[j] = sum;
}
}
基本上,这应该做的是获取我的输入向量“输入”并使用我命名为“权重”的矩阵执行点积。然后将输出放置在输出向量“输出”中。
我怎样才能使这更快或更高效?如果有帮助,我的权重矩阵也不需要是矩阵。我只需要一种方法来轻松访问相应的索引。
谢谢
【问题讨论】:
-
您是否对这段代码进行了基准测试?为什么你认为它可以更有效率?
-
@cricket_007 是的,考虑到大的输入和输出数字以及大的权重矩阵,它运行大约 30-40 毫秒。
-
您可以通过反转外部循环和内部循环来使其速度稍微加快,以减少对
inputs向量的访问次数。以后有时间我会写答案的。 -
多次调用此方法时使用相同的
weights值吗? -
使用多个累加器可能会有所帮助,这是为了获得良好性能必须做的事情,但 JIT 编译器可能会害怕这样做,因为它会稍微改变结果。
标签: java optimization matrix dot-product