首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

代码运作效率的提高

2012-12-30 
代码运行效率的提高我现在想提高我的C代码的运行效率,如果算法上面已经是最优了,那么还有其他的方法吗?我

代码运行效率的提高
我现在想提高我的C代码的运行效率,如果算法上面已经是最优了,那么还有其他的方法吗?我听说过内联汇编,但是试过后没成功,到底内联汇编怎么样做才能提高代码的运行效率呢?应该不是简单的翻译语言吧?求指教,高分。
[解决办法]
要看具体代码。

[解决办法]
除非你知道你在做什么,否则你自己手写的汇编一般都比开最大优化的编译器编译出来的汇编要慢。
[解决办法]
内联汇编用的好确实有一定的效果,你可以参考这篇博文(http://blog.csdn.net/littlehedgehog/article/details/2259665)。
[解决办法]
基本上,自己写汇编会比编译器快的情况大部分都是你用了编译器不会用的指令。在使用同样类型的指令情况下你想赢的话那你得十分了解cpu和内存。
lz这情况我觉得不用碰汇编,光改C代码本身就能改到几倍速度。
[解决办法]
要找到系统的hotspot,推荐一篇文章给你看看:
http://coolshell.cn/articles/7490.html
[解决办法]
升级硬件,采用多核并行处理。
[解决办法]
优化之前应该先找到点,譬如用profile之类的工具,靠感觉得到的优化大多数时候都不靠谱.

个人意见,仅供参考.
[解决办法]
5层循环, 里面已经全是数据操作, 没有函数调用, 谈不上使用内联了.

只是你的5层循环, 因为我不知道你是在做什么,达到什么目的, 所以想这里会不会有更简单的算法来达到你的目的.
如果没有, 那就考虑看看MMX指令能否提高你的数据处理速度吧.
[解决办法]
内联的作用是减少函数跳转上的开销,但是会增加程序的代码区的大小
如, 未对fun 使用内联时

int i = 0;
void fun()
{
    i++;
}

void main()
{
    int m;
    for (m = 0; m < 5; m++)
      a();
}

使用内联 fun 后实际上是

void main()
{
   i++;
   i++;
   i++;
   i++;
   i++;
}

这样减少的函数跳转上的开销

[解决办法]
不一样的。

引用:
引用:内联汇编用的好确实有一定的效果,你可以参考这篇博文(http://blog.csdn.net/littlehedgehog/article/details/2259665)。
GCC编译器同VC6的编译器相同吗?

[解决办法]
引用:
引用:要看具体代码。
贴出代码如下:
C/C++ code1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980……


粗略看了下,你这应该是某种迷宫寻路的代码,如果是这样的话,那么算法还是可以再优化一些的。
首先,你没必要建立比迷宫大一圈的复制缓冲区,加一圈墙虽然可以简化判断代码,但是如果迷宫数据比较大的话,你设置一圈墙和逐行复制迷宫数据就很浪费时间,如果传入的BYTE* pData指向的缓冲区可以修改的话,你直接在这上面操作就行了,如果不能修改,或者改了影响其他部分的代码,你可以直接memcpy复制一个等大的临时迷宫在上面操作。

[解决办法]
多看几遍《Computer Systems A Programmer's Perspective》第二版。
[解决办法]
楼主大概是要提取影像上的黑色标志点吧,代码确实还有很大的提升空间啊!
[解决办法]
比如,你可以把内层的循环展开,这样可以减少流水线阻塞的发生,影像如果很大如4000*3000,可以分成256*256的小块去做(充分考虑接边),可以使用多核多线程。
[解决办法]
编译器会帮你优化,你可以尝试用gcc -O3编译,不过会增加可执行文件的大小。

另外,多了解一些指令执行过程,会写出高质量的C代码。

内联汇编没有必要,因为编译器已经能做到很好了,除非一些很生涩的指令(平时我们写的代码不会涉及到)。
[解决办法]
引用:

要找到系统的hotspot,推荐一篇文章给你看看: http://coolshell.cn/articles/7490.html


这篇文章不错。

楼主你的5层循环好好先改下把。
[解决办法]
单纯内嵌汇编优化幅度不大,内嵌汇编一定是和特殊指令相结合,如多媒体指令或一些DSP指令;单纯内嵌汇编优化幅度多数不会超过20% ----- 所以除非使用特殊指令,内嵌汇编并不推荐;
另外可以考虑多核技术,如OpenMP等(如果是单核系统,千万不要使用)
如果是嵌入系统,可以从以下几个方面考虑:
1)合理使用LDM(Local Memory)
2)硬件加速;如果是FPGA,可以将一些算法硬件化,或使用比较成熟的C2H技术
最后,特殊指令(配合嵌入汇编)

以上是在您的程序已经充分优化的前提,单纯C算法优化,效能提升可能会有数十倍,所以,C/C++基础的算法优化是关键。
[解决办法]
我的资源里有一篇我之前的文章,您可以看看:http://download.csdn.net/detail/tomsoft/1998019
也可以直接找我索取
[解决办法]
引用:
引用:我的资源里有一篇我之前的文章,您可以看看:http://download.csdn.net/detail/tomsoft/1998019
也可以直接找我索取
索取,多谢指点!20904027@qq.com


已经发送,请查收

热点排行