免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: hy036630
打印 上一主题 下一主题

多线程OR多进程-访存密集型应用 [复制链接]

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
21 [报告]
发表于 2011-12-22 10:17 |只看该作者
hy036630 发表于 2011-12-22 08:08
的确是这样的,我觉得也不应该是忙等的问题,应为机器是16线程的机器,按照道理至少有8个独立线程同时跑,
...

http://bbs.chinaunix.net/thread-3626809-1-1.html 看看这个会不会有帮助

论坛徽章:
0
22 [报告]
发表于 2011-12-22 11:42 |只看该作者
本帖最后由 hy036630 于 2011-12-22 11:43 编辑
zylthinking 发表于 2011-12-22 10:17
http://bbs.chinaunix.net/thread-3626809-1-1.html 看看这个会不会有帮助


谢谢啊!
这个问题我注意到了,上文说得cache伪共享问题,是说如果多个线程同时需要更新同一cache行 那么根据MESI(缓存一致性协议)一个线程对cache行修改,会导致其他核的该cache行无效,同时还要write-back本cache行的数据。这样速度可能比不用cache还慢。
不过我的程序共享的数据是不会更新的,也就是只读的,是不是说不会牵涉到这个问题。

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
23 [报告]
发表于 2011-12-22 13:11 来自手机 |只看该作者
hy036630 发表于 2011-12-22 11:42  谢谢啊!  这个问题我注意到了,上文说得cache伪共享问题,是说如果多个线程同时需要更新同一cache行 那 ...

你每线程的对列中的变量更新呢

论坛徽章:
0
24 [报告]
发表于 2011-12-22 14:03 |只看该作者
zylthinking 发表于 2011-12-22 13:11
你每线程的对列中的变量更新呢

{:3_187:}
哎 一个人的想法还是有很多漏洞啊  先不说这里有没有问题 至少我以前没有考虑这个方面。谢了

论坛徽章:
0
25 [报告]
发表于 2011-12-22 14:21 |只看该作者
我测试了一把,没什么效果,在队列的本身的数据中间每个字段中间加上了56个字节,加上自己8个字节,每个数据占一条缓存行,其实队列的吞吐非常大,在我测试的PCServer上有打败100W/s的吞吐。
但是处理数据1个线程是3W/thread 10个线程差不多只有3000/thread  队列应该不是主要问题,
应该是处理的过程出了问题,处理的代码就在上面,都不超过100行
什么东西能够如此影响性能,{:3_186:}

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
26 [报告]
发表于 2011-12-22 15:06 |只看该作者
hy036630 发表于 2011-12-22 14:21
我测试了一把,没什么效果,在队列的本身的数据中间每个字段中间加上了56个字节,加上自己8个字节,每个数据 ...

如果是这个原因, 加任何padding都不可能有用, 因为无论你加什么padding, 也改变不了2个核心同时访问一个变量的事实; 要命的是, 你的 Bqueque变量 AB 共用, Cqueue, BC共用, Dqueue CD共用。。。。。。。

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
27 [报告]
发表于 2011-12-22 15:10 |只看该作者
应该是处理的过程出了问题,处理的代码就在上面,都不超过100行

如果处理过程出了问题, 我想不出为什么多进程反而不出问题的理由

论坛徽章:
0
28 [报告]
发表于 2011-12-22 15:15 |只看该作者
是啊 正如你所说的  这个是不能改变的
队列的影响真有这么大么{:3_185:}  毕竟只是一个指针队列,那要如何避免呢

论坛徽章:
0
29 [报告]
发表于 2011-12-22 15:29 |只看该作者
数据大 可以考虑写内存

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
30 [报告]
发表于 2011-12-22 15:39 |只看该作者
hy036630 发表于 2011-12-22 15:15
是啊 正如你所说的  这个是不能改变的
队列的影响真有这么大么  毕竟只是一个指针队列,那要如何 ...

只是怀疑而已, 你需要验证到底是不是这个原因才能决定下一步啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP