我需要尽量减少以下代码中的拖鞋总量,可以竭尽全力快速看,告诉我在哪里努力吗? 我尝试了几个性能分析仪,但结果是无关紧要的..

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. 生成随机ints
  2. 将它们存储为doubles
  3. 添加它们
  4. 添加和乘以它们

    IOW - 我没有看到任何在所有处的分数,并且适当大小的整数将是优越的。如果是真的,您可以删除程序中的每一个牌匾;)

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

    对于适当大小的mul /添加,使用整数将要快得多,可能需要更少的内存 - 您也可以将SIMD指令应用于它们。 除此之外 - 您的提高缓存局部性,最小化分支,最小化动态分配也可以更快地使程序速度几次。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top