【发布时间】:2017-11-14 20:12:01
【问题描述】:
我必须使用嵌套的 for 循环来逐列计算 Eigen::MatrixXd 类型矩阵输出的条目。这里 input[0]、input[1] 和 input[2] 被定义为 Eigen::ArrayXXd 以便使用元素操作。这部分似乎是我的代码的瓶颈。谁能帮我加速这个循环?谢谢!
for (int i = 0; i < r; i++) {
for (int j = 0; j < r; j++) {
for (int k = 0; k < r; k++) {
output.col(i * (r * r) + j * r + k) =
input[0].col(i) * input[1].col(j) * input[2].col(k);
}
}
}
【问题讨论】:
-
这部分似乎是我的代码的瓶颈。 似乎是或现在是?您在代码分析中看到过这一点吗? (您在编译时启用了哪些优化?)
-
@Borgleader 这实际上是我的代码中第二个最耗时的部分。
-
如果
r很大,它会做很多工作。但是优化编译器应该看到i * (r * r) + j * r和input[0].col(i) * input[1].col(j)不会随k变化,并将它们移出内部循环。但我们无法从这个 sn-p 判断它是否确实如此。 -
您必须 a) 发布 minimal reproducible example 和/或 b) 发布更多信息,例如您从 perf 获得的信息。我们在这里几乎没有什么工作要做