我有一个非常庞大的嵌套for循环,其中对浮点数进行了一些乘法和加法运算。
for (int i = 0; i < length1; i++)
{
double aa = 0;
for(int h = 0; h < 10; h++)
{
aa += omega[i][outsideGeneratedAddress[h]];
}
double alphaOld = alpha;
alpha = Math.Sqrt(alpha * alpha + aa * aa);
s = -aa / alpha;
c = alphaOld / alpha;
for(int j = 0; j <= i; j++)
{
double oldU = u[j];
u[j] = c * oldU + s * omega[i][j];
omega[i][j] = c * omega[i][j] - s * oldU;
}
}
这个循环占据了我大部分的处理时间,并成为瓶颈。如果我将此循环改写为C语言并从C#进行接口调用,是否可能会看到任何速度提升?
编辑:我更新了代码以显示如何生成s和c。此外,内部循环实际上从0到i,尽管这可能对问题没有太大影响。
编辑2:我在VC++中实现了该算法,并通过dll与C#链接,在启用所有优化时比C#快28%。启用SSE2参数特别有效。使用MinGW和gcc4.4编译只提高了15%的速度。刚刚试过英特尔编译器,发现该代码的速度提升了49%。