- 论坛徽章:
- 9
|
本帖最后由 wlmqgzm 于 2016-06-01 12:53 编辑
1) 多数人写的未必比标准库更优, 因此, 多数人优化的思路应该是: 减少大数据块的Copy, 实现Zero Copy, 看能否用类似shared_ptr的指针技术来代替, 这样, 可能改进的余地更大.
2) 即使是标准库, 随着CPU指令集的添加, 一些新指令集会大幅度改善性能, 因此, 使用新指令集的库性能更好. 估计今后, 经过 SSE4.2, AVX这些指令集改进过的代码, 慢慢也会陆续推广使用. 毕竟加个链接库, 就可以提升性能.
看知乎的帖子中, 已经分别有SSE4.2和AVX两种指令集memcpy了, 性能都比原生的速度快很多, 但是只限于特定型号CPU, 这样的东西是无法进入到标准库的.
标准库最大的优点是: 兼容性最好, 适合任何CPU.
SSE4.2的性能确实很夸张, 测试过SSE的64bit crc32并发, 就是一条指令读入8字节执行crc32校验, 基本瓶颈都在内存上, 校验速度跟读内存的速度是一样的, 并在此基础上封装了一个高性能crc64/crc32的库自用.
为了兼容, 要附加很多代码, 包括检测CPU的型号和指令集, 对于支持Intel SSE4.2的做一个bool标记, 对于不支持的, 要会调用传统CPU指令的计算模块,
好在是做了C++ singleton class, 这样只在程序启动后第一次construct的时候, 检测一次, 设置一个标志就可以了.
否则, 一堆的检测代码和一堆的判断, 乱不说, 效率也低. |
|