在循环中更改变量时的性能问题

时间:2016-02-15 06:31:22

标签: c++ performance optimization profiling

我在多边形代码中有一些观点,它是我从python调用的dll的一部分。代码没有像我希望的那样快速执行,因此我正在分析并尝试优化代码。

这是有问题的功能:

int mesh_to_points(const meshobj * mesh, const float * datam, const float * x, const float * y, float * datap, const int np)
{
    float fact[4];
    for (int a=0; a<np; a++)
    {
        for (int b=0; b<mesh->numels; b++)
        {
        element cell = mesh->cell[b];
        if (x[a]>cell.maxx || x[a]<cell.minx || y[a]>cell.maxy || y[a]<cell.miny)
        {
            continue;
        }
        if (interp_weights(cell.vx, cell.vy, x[a], y[a], fact, cell.nv))
        {
            datap[a]=b+1.00;
        }
    }
}
return 0;

}

对于我正在尝试的一般测试,这需要4.133秒才能运行。当我改变行

datap[a]=b+1.00

类似......

float cc=b+1.00

总运行时间为0.162秒 - 更符合我希望它运行的方式。

我对C ++比较陌生,到目前为止只有初学者的理解。这种性能是否仅仅改为智能编译器? (在这种情况下是MSVC)或者我填充数组“datap”的方式是否存在固有的缺陷?

0 个答案:

没有答案