性能优化

2017-05-06 01:09:47 +08:00
 aliipay
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%还有没有优化空间?
3818 次点击
所在节点    程序员
14 条回复
yangqi
2017-05-06 01:14:16 +08:00
aliipay
2017-05-06 01:28:22 +08:00
@yangqi 看上去很厉害的样子,先慢慢研究下。
问题是多线程实现?我的程序本身是多线程了,cpu 已经满了,不知道能否提升性能
denghongcai
2017-05-06 01:38:02 +08:00
denghongcai
2017-05-06 01:39:56 +08:00
循环次数这么一点点就不要搞 OpenMP 了
aliipay
2017-05-06 02:19:15 +08:00
@yangqi
gcc version 4.8.5 20150623
warning: ignoring #pragma omp parallel [-Wunknown-pragmas]
我单独编译一个 demo 是正常的 加入到现有工程就报这个警告
Fishdrowned
2017-05-06 07:51:38 +08:00
循环展开
http://en.wikipedia.org/wiki/Duff%27s_device
不知道这个现在还有没有用
aliipay
2017-05-06 11:53:52 +08:00
@Fishdrowned
这个试过了,能提高 10%左右
zk8802
2017-05-06 12:10:25 +08:00
开启优化之后,编译器应该可以自动进行 loop unrolling 的。你编译之后的汇编代码长什么样?
zwzmzd
2017-05-06 13:01:07 +08:00
billlee
2017-05-06 13:42:56 +08:00
你编译的时候加了 -march=native 吗?
aliipay
2017-05-06 15:54:34 +08:00
@billlee 每加,加了更慢
现在用的是-fprefetch-loop-arrays -g -ggdb -D__USE_ISOC99 -DNDEBUG -Ofast -fPIC -Wall -std=c++11
linux40
2017-05-07 09:34:19 +08:00
不考虑 memcpy 吗
linux40
2017-05-07 09:35:04 +08:00
@linux40 眼瞎了。。。
linux40
2017-05-07 09:38:25 +08:00
不考虑 restrict 吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/359490

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX