在评估负对数似然的情况下,我必须执行一堆操作,这些操作可以从矢量化中受益。
0) for (i = 1...n) { a[i] = 0; } //但我认为 std::fill(a.begin(), a.end(), 0) 已经是最优的
1) for (i = 1...n) { a[i] += b * c[i]; }
2) sum = 0; for (i = 1..n) { sum += a[i] * log(b[i] / c); }
您知道是否有希望让gcc 434进行自动矢量化,并且应该如何编写循环以帮助它(例如使用索引还是使用迭代器,应该将(2)分解为更简单的循环等)目前我正在使用双精度,必须检查是否至少可以将(1)移动到浮点数。