C++ c+中的性能问题+;带数值计算的代码
我想优化一个C/C++代码。在分析了代码的各个方面之后,我发现bellow函数占用了99%的执行时间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
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毫秒。