【发布时间】:2012-12-03 17:35:47
【问题描述】:
我有以下紧密循环构成了我的代码的串行瓶颈。理想情况下,我会并行化调用它的函数,但这是不可能的。
//n is about 60
for (int k = 0;k < n;k++)
{
double fone = z[k*n+i+1];
double fzer = z[k*n+i];
z[k*n+i+1]= s*fzer+c*fone;
z[k*n+i] = c*fzer-s*fone;
}
是否可以进行任何优化,例如矢量化或一些邪恶的内联来帮助这段代码?
我正在寻找三对角矩阵的特征解。 http://www.cimat.mx/~posada/OptDoglegGraph/DocLogisticDogleg/projects/adjustedrecipes/tqli.cpp.html
【问题讨论】:
-
非顺序内存访问。期间。
-
什么是
i?有没有涉及它的循环? -
i上有外循环吗? -
您介意提出一个可以编译和试验的独立示例吗?
-
尝试在循环外分配 fone 和 fzer,然后将它们设置在循环内。他们很可能会编译成两个推送然后弹出指令。您还可以使用指针来存储两个数组索引,这样您就不必每次都计算 kn+i 和 kn+i+1 两次。
标签: c++ c optimization gcc x86