标题
No. 85 - 对openEuler社区发布包xz进行CRC加速
描述
xz使用了CRC32(多项式0xedb88320)来校验数据的正确性。软件使用了常用的查表法来做CRC计算,性能并不理想。在ARMv8.1,提供了CRC32/CRC32C的专用指令:crc32d, crc32w, crc32h, crc32b, crc32cd, crc32cw, crc32ch, crc32cb。分别实现64bit、32bit、16bit和8bit数据的CRC计算。
相对于查表法,ARM CRC指令快30倍左右。也就是说,对同一数据做CRC,加速指令耗用时间是查表法的1/30。
对于CRC-32和CRC-32C,GCC提供了builtin函数,可以在C代码里直接调用。builtin函数名字就是对应的汇编指令名字前加“__”,比如__crc32d函数对应crc32d指令。另外,还需添加“-march=armv8.1-a”编译选项。
openEuler社区的xz发布包没有为ARM平台做过优化:https://gitee.com/src-openeuler/xz。
本任务的目标就是为这个软件包在ARM上做加速,提高压缩性能。
难度
中
导师
@colordev
联系方式
colordev@hotmail.com
产出标准
代码:如果目标处理器有CRC专用指令,则使用CRC专用指令来计算CRC;如果目标处理器不支持CRC专用指令,则使用普通查表法来计算CRC。
编译:根据目标处理器是否支持CRC专用指令,来打开或关闭相关选项,正确编译代码。
技术要求
相关项目
Hey @colordev, Welcome to openEuler Community.
All of the projects in openEuler Community are maintained by @openeuler-ci-bot.
That means the developers can comment below every pull request or issue to trigger Bot Commands.
Please follow instructions at https://gitee.com/openeuler/community/blob/master/en/sig-infrastructure/command.md to find the details.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
登录 后才可以发表评论