博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c 编译选项-funroll-loops
阅读量:4210 次
发布时间:2019-05-26

本文共 404 字,大约阅读时间需要 1 分钟。

一.循环展开

循环展开可以减少循环的次数,对程序的性能带了两方面的提高。一是减少了对循环没有直接贡献的计算,比如循环计数变量的计算,分支跳转指令的执行等。二是提供了进一步利用机器特性进行的优化的机会。.

优化后:

void sum4(vec_ptr v,data_t *dest){int i;int len=vec_length(v);int limit=len-3;data_t  *data=get_vec_start(v);data_t acc=0;for(i=0;i

通过循环展开,每次迭代将累加4个元素,减少了循环次数,从而减少了总的执行时间(单独使用这种优化方法,对浮点数累乘几乎没有提高,但是整数累乘得益于编译器的重关联代码变化会有大幅度提高)。

这种优化可以直接利用编译器完成,将优化level设定到较高,编译器会自动进行循环展开。使用gcc,可以显式使用-funroll-loops选项。

转载地址:http://zbwmi.baihongyu.com/

你可能感兴趣的文章
UNIX编程专题-I/O复用:select、pselect、poll和epoll解析
查看>>
LINUX编程专题-I/O复用:epoll解析
查看>>
Linux源码解析-poll机制
查看>>
UNIX网络编程卷1:套接字联网-第7章:套接字选项
查看>>
UNIX网络编程卷1:套接字联网-第16章:非阻塞式I/O
查看>>
Linux源码解析-进程-进程
查看>>
Linux源码解析-进程-进程状态
查看>>
Linux源码解析-内核栈与thread_info结构详解
查看>>
Linux源码解析-内存描述符(mm_struct)
查看>>
进程的存储空间布局
查看>>
c函数调用过程原理及函数栈帧分析
查看>>
C语言函数调用及栈帧分析
查看>>
unix环境高级编程-进程控制
查看>>
Linux源码解析-task_struct中关于文件的字段解析
查看>>
file结构体详解
查看>>
unix环境高级编程-线程解析
查看>>
unix环境高级编程-互斥量机制
查看>>
unix环境高级编程-读写锁
查看>>
unix环境高级编程-条件变量
查看>>
unix环境高级编程-自旋锁
查看>>