C++ 如何在下面的代码中最小化浮点操作

C++ 如何在下面的代码中最小化浮点操作,c++,flops,C++,Flops,我需要在下面的代码中最小化失败的总数,有人能快速看一下并告诉我该把我的努力放在哪里吗? 我试过几种性能分析器,但结果并不相关 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* p

我需要在下面的代码中最小化失败的总数,有人能快速看一下并告诉我该把我的努力放在哪里吗? 我试过几种性能分析器,但结果并不相关

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

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

  • 生成随机整数
  • 将它们存储为
    double
    s
  • 添加它们
  • 将它们相加和相乘
  • 我看不出分数有任何用处,一个大小合适的整数会更好。如果这是真的,您可以删除程序中的所有失败;)

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

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


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

    有什么原因不能使用SIMD吗?由于这都是基于矩阵的,它可能作为GPGPU内核表现最好。是的,你可以在vc6的任何版本中使用,更多的是关于你的目标平台是否支持SSE1/2/3/4