如何在下面的代码中最小化浮点运算

How to minimize floating point operations in the below code

本文关键字:最小化 浮点运算 代码 在下面      更新时间:2023-10-16

我需要在下面的代码中尽量减少失败的总数,有人能快速查看一下并告诉我该把精力放在哪里吗?我试过几个性能分析器,但结果都无关紧要。。

int twoDToOneD(int i, int j, int nRows)
{
return j*nRows + i;
}
double* addMatrices(int m, int n, double* A, double* B, bool add)
{
double* C = new double[m*n];
double* pA = A;
double* pB = B;
double* pC = C;
int i = m*n;
while(i--)
{
    if(add)
    {
        *pC = *pA + *pB;
    } else 
    {
        *pC = *pA - *pB;
    }
    pC++;
    pA++;
    pB++;
}
return C;
}

谢谢,Cho

没错,我没有读完最后一行,但看起来你只是:

  1. 生成随机int
  2. 将它们存储为double s
  3. 添加它们
  4. 将它们相加并相乘

IOW-我根本看不到分数的任何用途,适当大小的整数会更好。如果这是真的,您可以删除程序中的每个FLOP;)

如果这不是一个准确的信号,您仍然可以在适当的范围内使用它,然后将信号放大,存储为整数,然后在某些情况下将结果降回适当的范围。

对于大小适当的mul/add,使用整数会更快,并且可能需要更少的内存——您也可以对它们应用SIMD指令。

除此之外,改进缓存位置、最小化分支和最小化动态分配也可以使程序速度提高几倍。