当前位置: 华文星空 > 知识

怎样写出一个更快的 memset/memcpy ?

2015-08-31知识

glibc中最新的memcpy和memset都是我写的,我们的代码同时也考虑预取,对齐(编译之后使用-D 可以清晰看到),减少指令跳转错误提升性能,,希望能够帮助你

源代码如下:

a. memcpy:

https:// sourceware.org/git/gitw eb.cgi?p=glibc.git;a=commitdiff;h=05f3633da4f9df870d04dd77336e793746e57ed4

b. memset:

https:// sourceware.org/ml/libc- alpha/2014-06/msg00480.html

c. memcpy in Linux Kernel

[tip:core/locking] x86, mem: Optimize memcpy by avoiding memory false dependece

Linus Torvalds 的评价: 「The code looks clever and nice」!

更多早些我写的glibc 函数代码 :

http:// blog.csdn.net/linguranu s/archive/2011/02/16/6189676.aspx

代码中主要考虑了内存的读写优化、指令跳转、指令对齐,指令缺失等问题

虽然优化memcpy/memset等glibc函数,然而任何数据的迁移对于整体系统将是非常沉重的负担(RC 导致延迟),坦诚的说如果发现我们的程序中由于memcpy/memset等 成为性能的瓶颈,那么程序在间接的告诉我们架构不正确建议考虑数据引用如零拷贝,如果内容很短(如64字节之内)就直接用按需赋值就好(避免跳转预测失败带来额外的成本),而不是着重进一步优化这些函数。

也许我们学习知识的目的是为了了解事物的规律,然后在工作中避免问题的产生,而不是等到问题出现再进一步的优化, 在开发高频交易系统的时候我拒绝了memcpy,在做高可用分布式数据库的时候拒绝了自旋锁