您的位置 首页 未分类

龙芯2f

龙芯2f

摘要:Glibc库是Linu≧x系统最底层的函数库。本文分析了Gmol%libc库的函数构成,在龙芯2F平台上对其中的字符?串与内存的处理、数据转换、哈?希表查 ?找、以及加密?函数的代码′优化。实验结果表明,大部分函数的优化比率达?到了30%以上,对龙芯2F平台的整体运∑行性能提升具有重要意义。
关键词?:Glibc;1龙芯2F;优化

≌0 引言
≠ 龙芯2F是中国科学院计?算技术研究所研制的高?性能∥通用处理器,具有低功耗、低?成?本以及自主安⊿全?的特点,已应用于高性能计算和日?常生活?领@域?。
龙№芯2F以开源的Linmux作为操作系统±。Glibe库是Linu?x系统?最底ml层的运行库,为其上的应用≯程序提供系统接口*以及其它功能函数。此外,它﹤还是以 C语言构建开发∵程序时使用的基本函数库。本文基于龙芯2F体系结构对?Glibc库㈱进?行优化,对于∮提升龙芯2F的平台$性能与用户体?验有≥重要意义。

1 Glibc?库介?绍
Glibc?库?是GN?U发布的C运2行库,它封装了Linux操?作系统提供的系统服务,除此之外,还?提供∪了其它⌒必要的功能服务实现。Gli?bc库£是Li- nux系统最底层的函数库=,是除?了¥操作系统核心以≤外,?所有应用程序赖以执行的基础环境?。Linux系统上的其它?函数库‖都%需要直接或间接依赖于Glibc 库。
Glibc库包㎎含℃两类函数,一种是与核心沟通的系统函数?,∷它们封装?了系统调用,对传入参数进行预处理之后??就转到系统调用来完成功能,其目的是使得用户可以方便地·使用操作系统核心提供的服务。系统?调用接口与Linux操作系统相关,大部分流程固定<,没有太大优化余?地,对
其不做处理∴。
C库中的×=另一类函数提供常见的通用功能实现?,包括标准输入输″出控制,字符㎜串处理,正则表∣达式,字≒符?串加?密,?查找与‰排序等。它们提供基?本的、与操作系统无关的功能,其℅中的部分函?数有一?定的计算量,¥是优化工作关注的部分。
Glib?c库的版本在不断√?更新,本文以当前最㏕新的G?libc2?.11版本为基?础?进行?优化。

2 龙芯2F体系?结构
龙芯2F处理器实♀现?了64?位的M∫IPS?Ⅲ指令集,整数寄存器和浮点寄存器均?为64×位,支持o32/n32和n64的ABI类♂型+。除了 MIPS标准指令外,龙?芯2F还提供了特∽有的整型计算和浮点计算指令。整型指令包括单条?指令对3个寄存∷器≮进行操作的乘法、*除法以≦及求模运算,浮点指令包括
乘加、开?平方等?运算。
龙芯2F包含两级Cache结构,L?1 Cache数据和指令¢独立,均?为64kB;L2 Cac?he数据?和指令共享,为51∏2?kB。L1 cache和L°2 ca?μche都采用四路组相联结构,组内采用随机?替换〒策略,cache行大小?均为32字节。

3﹣ Gl㏑ibc库的优化
根据对Glib∈c库组成的分析?,文章对其中的字符串与内存?处理?§,数?据转换,哈希表查?找以及?加㎝密函?数÷?进行了优化,以下各?节分别介绍其优化方法和﹥优化效果。
3?.1 字符串与内存处理函数
字符?串与内存处理函∧数组提供了∨较为丰富的函数来完成各种操作,包括o字符串与内存的移动㎏?、比较和查找等。两者的操作通常一一﹢对应∟3,因为C语言中的字符串即用一段连?续>的℡?内存来表示≈,区?别/在?于字符串用空字-符N?ULL来表示结尾,而内存块的结尾由其大小确?定。
对本组函数进行分析可知,部分函数之间的实现流程类似,?如st﹢rlen?和s?trnl㏄en,m℉emcpy和?memccpy等。龙芯2f此外某些函数可通过调用其它函数来完成?,如strcpy可由?strl㎞e?n与me?mcpy函数完成≡。
由于这⊙一特?点,字符串与内存处理函数组的?优化方法可以相互借鉴,使用的优化方法主要包括∠以下?几种:
优化访存◎指令。本﹣组函数的处理流程一般是从一个或两个内存地址开始读?取内存?并∞进行相应的操作。在读取过程㎡中考虑内存地址的对齐情况及读取单位,分别使用不同格式的访存指令。
∩ 分块处理。根据龙m芯2F处理器的寄存器个数将待处理的字符串或内存分块,以充分¬利用∶寄存器进行?循环展∝开。
汇编实现。本组¤函数包含了一些?使£用频繁且对系统性能影⊕响较大的函数,如内存拷贝memcp3y函数等,?对此类函数我们使用汇??编或内嵌汇编来实现,以避免编译器可?能生成低效的代码。
表l是本组?函?数中⊥主要函数的优化?效果,以字符串规※模㏒或内存大小512B作为输入。

关于更多龙芯2f内容,可以收藏本网页。奥沙利文退役 基于龙芯2F的Glibc库优化

龙芯2f龙芯2f

关于作者: houswang

热门文章