我正在尝试优化一些C代码,这是我的第一次.作为第一步,我转储了我的可执行文件,以便查看汇编程序代码.例如,对于此功能:
void init_twiddle(int N)
{
int i=0;
for(i=0; i<ELEMENTS_HALF; i++)
{
twiddle_table[i].re = (float) cos((float)i * 2.0 * PI / (float)N);
twiddle_table[i].im = (float) - sin((float)i * 2.0 * PI / (float)N);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我这样做会不会更好:
void init_twiddle(int N)
{
int i=0;
float puls = 2.0 * PI / (float)N;
for(i=0; i<ELEMENTS_HALF; i++)
{
twiddle_table[i].re = (float) cos((float)i * puls);
twiddle_table[i].im = (float) - sin((float)i * puls);
}
Run Code Online (Sandbox Code Playgroud)
为了避免重复数千次的mult和div操作?}
不幸的是,你的第一步已经错了.
不要盲目地遍历你的代码优化任意循环,这些循环可能或(更可能)不会影响性能(可能因为代码很少被调用,因此它并不真正使用任何运行时).
优化意味着:您需要先了解我的计划花费的时间在哪里?使用时序测量来缩小程序花费大部分时间的位置(您可以使用我们的计时器或分析应用程序来使用本地日志记录).如果没有至少一些数字,你甚至不会看到编译器已经帮助过你的地方,也许已经超出了所有可能性,即使你的代码看起来有一些潜力可以更快(现代编译器真的非常擅长).
只有当您知道应用程序中的热点时,才应该开始优化它们.