好的外国设计网站推荐海南州公司网站建设

张小明 2026/3/3 0:41:42
好的外国设计网站推荐,海南州公司网站建设,百度推广四川成都地区服务中心,运维难还是开发难一、循环展开 什么是循环展开#xff1f;为什么要循环展开#xff1f;可能对不少的程序员来说#xff0c;循环展开,loop unrolling。它是一种编译器优化的技术#xff0c;它的本质是通过减少条件分支和运行时的pipeline停顿来提升性能#xff0c;并有可能提高缓存的命中率…一、循环展开什么是循环展开为什么要循环展开可能对不少的程序员来说循环展开,loop unrolling。它是一种编译器优化的技术它的本质是通过减少条件分支和运行时的pipeline停顿来提升性能并有可能提高缓存的命中率。C中的循环展开相对于其它语言来说可能操作更具有灵活性。这种优化一般应用于循环的迭代次数相对较少而且每次迭代计算量较大的情况。网上有些资料把其称为短循环。二、循环展开的方式和分析一般来说循环展开的方式主要有两个方向即手动展开和自动展开。手动展开依赖开发者自己把循环按实际的场景进行展开而自动展开依赖于编译器及其它辅助的技术。手动循环展开手动循环展开非常好理解就是将循环体的操作的代码人工操作多次这样就会减少循环执行的次数。当然这需要开发者自己仔细衡量并平衡相关的代价。如下面的例子for(inti0;i16;i){arr[i]i*2;}// 展开5次for(inti0;i4;i4){arr[i]i*2;arr[i1](i1)*2;arr[i2](i2)*2;arr[i3](i3)*2;arr[i4](i4)*2;}说简单些就是ctrlc,ctrlv大法。强调一下之所以称之为短循环一般是循环次数不太大16次以下时才有优势。其实就是分支预测耗时大于循环消耗时才有优势。也可以使用switch中的fallthrough方法voidworking(intn,int*a,int*b){if(n0||n16){return;}switch(n){casen:a[n]b[n]*2;...case2:a[1]b[1]*2;case1:a[0]b[0]*2;case0:break;}}自动循环展开自动循环展开一般有两种情况1 使用编译优化选项如在编译时增加-O2 或-O3注意O大写小写表示输出选项2使用预编译展开选项即在代码中使用#pragma GCC unroll N或“#pragma unroll”,但需要注意这个N是一个具体数值。另外循环中判断退出的大小值建议是一个常量否则可能无法进行完全展开而只进行部分展开。#pragmaGCC unroll4for(inti0;i4*n;i){arr[i]i*2;}部分展开的意思是上面的4*n如果换成任意数可能不是5的倍数那么编译器就会展开5的倍数部分而余下则不展开直接循环。其实就是能快一点是一点。这叫做循环剥离部分展开loop peelingPartial Unrolling。循环展开之所以能提升性能主要就在于通过展开减少了循环控制中的条件判断和指令跳转减少流水线的扰动提高了CPU指令执行的并行机会。减少了变量迭代更新的次数包括加减等操作。而循环内大的数据计算又可能导致内存缓存的命中率有可能提升只是有可能毕竟相邻数据多了这样就有了提高性能的前提和基础。循环展开需要实际情况进行恰当的应用因为循环展开的结果未必能完全保证提升性能或者说达不到优化的目的。主要原因在于面对过长的循环且内部复杂时过度的展开可能引起严重的代码膨胀有点类似于内联和模板啊。而如果代码的大小超过了缓存的容量就需要不断的去内存取指。这样反而可能导致性能的下降。其次过多的展开导致寄存器的大占用会导致CPU的寄存器耗尽不断的将相关的数据转移到内存降低性能。当然还有些循环是不适合循环展开的比如循环过少或循环内存在在很复杂的分支条件等此时的循环展开其实是没有什么优化的余地的。综合上述在进行循环优化时一定要仔细考虑不要为了展开而展开。一定要从最终的性能测试结果出发有根据的进行循环展开的优化。三、循环展开的缺点循环展开时编译器无法对过长的循环进行完全的展开但可以进行部分展开或开发者自行利用手动再加一些编译期优化代码技术进行运行时的动态处理。这就增加了对开发者的要求。其主要的缺点有最直观就是代码变得不易理解和维护过多的展开有可能导致性能降低的情况如内存数据的读写和数据的溢出到内存包括代码膨胀导致的溢出循环展开的优化的兼容性低。不同的硬件平台、编译平台和系统可能导致不同的结果在现代的CPU中使用SIMD反而可能会有更好的效果所以在编译时提供能够自动向量化的标记-O3 -marchnative反而可能会有更好的效果。四、循环展开的高级用法循环展开除了前面提到的方法还可以使用模板技术和c17以后的新的方式来进行模板或元编程方式看代码templateintNstructuLoop{templatetypename Fstaticvoidinvoke(F func){uLoopN-1::invoke(func);func(N-1);}};// 终止递归的特化条件templatestructuLoop0{templatetypename Fstaticvoidinvoke(F func){}};intarr[10];uLoop16::invoke(arr);使用常量表达式或索引展开使用新标准的代码templateintNvoidunrollTest(intn,float*a,constfloat*b){if(Nn){a[N-1]b[N-1]*2;}ifconstexpr(N1){unrollTestN-1(n,a,b);}}voidworking(intn,float*a,constfloat*b){if(n8){unrollTest8(n,a,b);}}//std::make_index_sequence#includeutility#includearraytemplatetypename T,std::size_t...idvoidunrollInvoke(T*arr,std::index_sequenceid...){((arr[id]id*2),...);// 折叠表达式}templatestd::size_tNvoidunrollDemo(std::arrayint,Narr){unrollInvoke(arr.data(),std::make_index_sequenceN{});}std::arrayint,16arr;unrollDemo(arr);另外顺道提到一下实际开发中也可以利用宏展开的方式进行循环展开的优化但宏的应用不是特别推荐的方法大家有兴趣可以自行查找相关的资料即可。五、总结循环优化在现在的技术看来应该不是一个好的优化方法。当然在某些情况下还是有可能有着不错的优化结果的。这就看开发者对选择的循环展开大小、边界控制等的整体把握了。不过推荐还是使用编译器进行处理并尽量采用SIMD等现代的并行技术。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

绵阳市做公司网站搜索引擎调词工具

Red Hat Linux安装问题排查与使用指南 1. 引言 Red Hat Linux安装程序Anaconda通常是一个相当可靠的工具,能很好地完成Linux的安装工作。然而,在安装过程中可能会遇到一些问题,本文将详细介绍两个常见问题的解决方法:一是安装程序无法找到硬盘或CD - ROM驱动器设备;二是…

张小明 2026/1/20 12:13:52 网站建设

常州网站建设培训淮北住房和城乡建设局门户网站

高效安全的文件传输:rsync 全方位指南(上) 在当今数字化的时代,文件传输是一项日常且重要的任务。而 rsync 作为一款强大且智能的文件传输工具,因其独特的算法和丰富的功能特性,成为了众多用户的首选。下面将详细介绍 rsync 的工作原理、获取安装、使用方法以及服务器配…

张小明 2026/1/20 12:13:21 网站建设

网站惩罚查询做网站 超速云

5分钟搞定:抖音内容批量下载全攻略 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 还在为抖音上精彩内容无法保存而烦恼?面对平台严格的下载限制,传统方法往往效率低下且效…

张小明 2026/1/20 12:12:50 网站建设

做电影网站犯罪吗网站透明导航代码

云顶之弈智能挂机助手:解放双手的自动化游戏神器 【免费下载链接】LOL-Yun-Ding-Zhi-Yi 英雄联盟 云顶之弈 全自动挂机刷经验程序 外挂 脚本 ,下载慢可以到https://gitee.com/stringify/LOL-Yun-Ding-Zhi-Yi 项目地址: https://gitcode.com/gh_mirrors/lo/LOL-Yun…

张小明 2026/1/20 12:12:19 网站建设

wordpress 做大型网站成都极客联盟网站建设公司

第一章:Open-AutoGLM远程控制架构概览Open-AutoGLM 是一种基于大语言模型(LLM)驱动的自动化远程控制系统,专为智能设备管理与跨平台任务编排设计。其核心架构融合了自然语言理解、指令解析、安全通信与执行反馈闭环,实…

张小明 2026/1/20 12:11:48 网站建设

简述商业网站建设的流程园林公司网站建设费用

十三山居松风煮石云为伴,竹杖敲冰涧有声。一榻清寒眠不得,半窗星斗落空明。十四夜雨孤灯照壁雨敲窗,往事如烟不可双。欲写相思千万句,墨痕和泪染空缸。十五观弈黑白分争几度秋,枯枰未冷客登楼。山中一局人何在&#xf…

张小明 2026/1/20 12:11:18 网站建设