Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c+中的性能问题+;带数值计算的代码_C++_Algorithm_Performance_Optimization_Time Complexity - Fatal编程技术网

C++ c+中的性能问题+;带数值计算的代码

C++ c+中的性能问题+;带数值计算的代码,c++,algorithm,performance,optimization,time-complexity,C++,Algorithm,Performance,Optimization,Time Complexity,我想优化一个C/C++代码。在分析了代码的各个方面之后,我发现bellow函数占用了99%的执行时间 for (l = i+1; l < m->_n ; ++l) /* m->_n is about 650 this loop takes about 100 ms */ { m = add_line(m, l, i); deg[l] = (deg[i] > deg[l]) ? deg[i] : deg[l]; } /* add

我想优化一个C/C++代码。在分析了代码的各个方面之后,我发现bellow函数占用了99%的执行时间

for (l = i+1; l < m->_n ; ++l)       /* m->_n is about 650      this loop takes about 100 ms   */
{
    m = add_line(m, l, i);

    deg[l] = (deg[i] > deg[l]) ? deg[i] : deg[l];
}

/* add_line function */
MAT* add_line (MAT* mat, int dst, int src)
{
    int j;

    for (j = 0; j < mat->_m; ++j)           // mat->_m is about 650
        mat->_v[dst][j] = (mat->_v[dst][j] + mat->_v[src][j]) & 1;

    return mat;
}

/* also MAT is a struct. _n & _m are width and height of the matrix. */
typedef struct                                      
{
    int _n, _m, **_v;
} MAT;
对于(l=i+1;l\n;++l)/*m->\n约为650,此循环大约需要100毫秒*/
{
m=添加线(m,l,i);
度数[l]=(度数[i]>度数[l])?度数[i]:度数[l];
}
/*添加线函数*/
MAT*添加线(MAT*MAT、int dst、int src)
{
int j;
对于(j=0;j\um;++j)//mat->\um约为650
mat->_v[dst][j]=(mat->_v[dst][j]+mat->_v[src][j])&1;
返回垫;
}
/*MAT也是一个结构_n和μm是矩阵的宽度和高度*/
类型定义结构
{
国际货币基金组织;
}垫;
我怀疑我是否使用2D C++ STD::向量,而不是Mat Stutt,速度增长得更快? 是否有其他解决方案来优化此代码

我认为这个嵌套循环的100毫秒是非常大的,可能是一个严重的错误导致了这一点。
考虑。

您可能想发布完整的基准测试代码及其输入,这有助于您的读者帮助您。仅供参考,没有“C/C++”语言。你可以用C或C++编程。它们是不同的语言。您可能希望将
for
循环限制放入一个常量局部变量中。这可能由编译器执行,具体取决于优化级别。如果完整矩阵仅包含0和1,则可以将整个问题矢量化,并用单个
-值表示多个相邻单元。然后,行加法将包括简单地对这些值进行XOR运算。这会使整个过程加快很多。还可以尝试使用一维数组而不是二维数组来减少内存读取量。请说明您是如何编译该程序的,您是如何对其进行基准测试的,以及完整的。这个循环不应该用你提到的100毫秒的数值。你可能想发布完整的基准测试代码及其输入,这有助于你的读者帮助你。仅供参考,没有语言“C/C++”。你可以用C或C++编程。它们是不同的语言。您可能希望将
for
循环限制放入一个常量局部变量中。这可能由编译器执行,具体取决于优化级别。如果完整矩阵仅包含0和1,则可以将整个问题矢量化,并用单个
-值表示多个相邻单元。然后,行加法将包括简单地对这些值进行XOR运算。这会使整个过程加快很多。还可以尝试使用一维数组而不是二维数组来减少内存读取量。请说明您是如何编译该程序的,您是如何对其进行基准测试的,以及完整的。该循环不应以您提到的值数为100毫秒。