• 请不要在回答技术问题时复制粘贴 AI 生成的内容
aliipay
V2EX  ›  程序员

性能优化

  •  
  •   aliipay · May 6, 2017 · 5116 views
    This topic created in 3469 days ago, the information mentioned may be changed or developed.
    void memory_xor(uint64_t *dst, const uint64_t *src, uint32_t len)
    {
    for (uint32_t i = 0; i<len; i++)
    {
    *dst++ ^= *src++;
    }
    }
    len 集中在 100-200,dst,src 已经考虑 8 字节对齐,函数多次重复调用,消耗时间占总时间大概在 60-70%还有没有优化空间?
    14 replies  •  2017-05-07 09:38:25 +08:00
    aliipay
    aliipay
    OP
    May 6, 2017
    2
    @yangqi 看上去很厉害的样子,先慢慢研究下。
    问题是多线程实现?我的程序本身是多线程了,cpu 已经满了,不知道能否提升性能
    denghongcai
    denghongcai
    May 6, 2017
    4
    循环次数这么一点点就不要搞 OpenMP 了
    aliipay
    aliipay
    OP
    May 6, 2017
    5
    @yangqi
    gcc version 4.8.5 20150623
    warning: ignoring #pragma omp parallel [-Wunknown-pragmas]
    我单独编译一个 demo 是正常的 加入到现有工程就报这个警告
    Fishdrowned
    Fishdrowned
    May 6, 2017 via Android
    6
    循环展开
    http://en.wikipedia.org/wiki/Duff%27s_device
    不知道这个现在还有没有用
    aliipay
    aliipay
    OP
    May 6, 2017
    7
    @Fishdrowned
    这个试过了,能提高 10%左右
    zk8802
    zk8802
    May 6, 2017 via iPhone
    8
    开启优化之后,编译器应该可以自动进行 loop unrolling 的。你编译之后的汇编代码长什么样?
    billlee
    billlee
    May 6, 2017
    10
    你编译的时候加了 -march=native 吗?
    aliipay
    aliipay
    OP
    May 6, 2017
    11
    @billlee 每加,加了更慢
    现在用的是-fprefetch-loop-arrays -g -ggdb -D__USE_ISOC99 -DNDEBUG -Ofast -fPIC -Wall -std=c++11
    linux40
    linux40
    May 7, 2017 via Android
    12
    不考虑 memcpy 吗
    linux40
    linux40
    May 7, 2017 via Android
    13
    @linux40 眼瞎了。。。
    linux40
    linux40
    May 7, 2017 via Android
    14
    不考虑 restrict 吗
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5404 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 03:21 · PVG 11:21 · LAX 19:21 · JFK 22:21
    ♥ Do have faith in what you're doing.