我正在尝试使用 C++ 库复制 Fortran90 数组语法。在这个问题中详细讨论了库本身。他们都可以这样做:
D = alpha*A + beta*B + gamma*C
对于向量 A、B、C 和标量 alpha、beta、gamma。这可以翻译为:
for (i = 0; i < D.length; i++)
D[i] = alpha*A[i] + beta*B[i] + gamma*C[i]
它遍历每个数组一次,或者像:
for (i = 0; i < D.length; i++)
D[i] = alpha*A[i] + beta*B[i]
for (i = 0; i < D.length; i++)
D[i] += gamma*C[i]
第一种方法对于缓存性能要好得多,我认为这是 fortran 编译器所做的。C++ 矩阵库是否能够将复合向量表达式转换为像 fortran 这样的单个循环,或者它们会发出多个简单循环?