hyperscan多CPU指令集适配过程

之前写过jhyperscan性能优化过程_hyperscan java-CSDN博客,发现在libhs.so中针对同一个函数hs_scan会产生avx512_hs_scan, core2_hs_scan, corei7_hs_scan等符号;之前没有深究,近来得空,深入的走读了一遍其编译过程;

其主要过程分为两个部分,首先通过使用-march=core-avx2、corei7、core2对源码分别进行编译;正常编译尽管使用了不同的编译选项,符号是不会发生改变的;比如hs_scan函数编译之后,在.o文件中的符合还是hs_scan, hyperscan为了在编译过程中各个指令集的符号能够并存;使用了符号重命名的方法;使用objectcopy --redefine-syms对符号进行了重命名;比如在-march=core-avx2编译选项下编译的函数hs_scan的符号,修改为avx512_hs_scan函数;如此对于同一个源文件runtime.c被编译了三遍,生成了三个runtime.o,同时产生了avx512_hs_scan,corei7_hs_scan, core2_hs_scan三个符号;链接时将这三个runtime.o,都进行链接;但是对外提供服务的函数名还是hs_scan;此处,hyperscan,通过宏定义,增加了一个hs_scan的函数,而后通过运行机器所支持的指令集,以avx512、corei7、core2的顺序进行匹配,谁匹配到了,就使用该指令集对应的符号进行运行;实际实现的过程中,采用了函数指针的方式进行返回处理。

示意简图如下:

此外,hyperscan针对arm进行的适配也是通过上述类似的方法进行实现的;只是编译选项使用了使用arm指令集的方式,进行处理;对应的编译参数分别为-march=armv8-a、armv8-a+sve、armv8-a+sve+sve2-bitperm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大明__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值