免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2103 | 回复: 7
打印 上一主题 下一主题

[C++] 多线程读盘的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-02-28 23:55 |只看该作者 |倒序浏览
在一个C++ program 用 OpenMP来实现多线程的并行, 每个线程所做的工作都是一样的: 读盘然后做计算。 相对来说计算不太耗时,读盘的任务较重。
大家是否有处理这类问题的经验,这类问题的并行效率如何?  如果采用单线程读盘,多线程计算的话,效率是不是更高一些?

论坛徽章:
208
巨蟹座
日期:2013-09-02 09:16:36卯兔
日期:2013-09-02 20:53:59酉鸡
日期:2013-09-05 21:21:45戌狗
日期:2013-10-15 20:51:17寅虎
日期:2013-10-18 21:13:16白羊座
日期:2013-10-23 21:15:19午马
日期:2013-10-25 21:22:48技术图书徽章
日期:2013-11-01 09:11:32双鱼座
日期:2013-11-01 20:29:44丑牛
日期:2013-11-01 20:40:00卯兔
日期:2013-11-11 09:21:32酉鸡
日期:2013-12-04 19:56:39
2 [报告]
发表于 2013-03-01 09:16 |只看该作者
gridbird 发表于 2013-02-28 23:55
在一个C++ program 用 OpenMP来实现多线程的并行, 每个线程所做的工作都是一样的: 读盘然后做计算。 相对 ...

我做过类似东西,不过是读写,理论上多变单,应该有效率提升,实际上,我测试结果,并不太大提高,也许是我的方法有问题,估计是文件系统层有优化,不过这个问题要看规模

论坛徽章:
0
3 [报告]
发表于 2013-03-01 11:13 |只看该作者
回复 2# 流氓无产者


--"理论上多变单,应该有效率提升" 这是为什么呢?能否请教下,学习中。谢谢。


   

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
4 [报告]
发表于 2013-03-01 13:07 |只看该作者
本帖最后由 yulihua49 于 2013-03-01 13:09 编辑
gridbird 发表于 2013-02-28 23:55
在一个C++ program 用 OpenMP来实现多线程的并行, 每个线程所做的工作都是一样的: 读盘然后做计算。 相对 ...

openMP愚蠢得很,没什么实用价值,向这样的任务自己弄吧,一个线程读盘,发送给多线程计算。
如果文件N路并行,那就N个线程读盘,发送给多个线程计算。

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
5 [报告]
发表于 2013-03-01 13:23 |只看该作者
做过与磁盘拼性能的项目, 单线程最快, 4KB读写+单线程 是 关键字.

论坛徽章:
0
6 [报告]
发表于 2013-03-01 13:32 |只看该作者

这个和用不用OpenMP或POSIX库实现多线程关系不大,并行算法也比较简单,我的问题是 如果负载主要在读盘操作,计算时间比较少。

假设N个线程

   一个方法是:    每个线程: for (i = 0; i < 1000; i++) { 读盘 --> 计算 }
另一个方法是:    单线程读N块数据,然后对每个线程:for (i = 0; i < 1000; i++) {  计算 }

并行效率可能和盘有关系,比如SSD盘和普通盘也许有区别。

回复 4# yulihua49


   

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
7 [报告]
发表于 2013-03-01 13:41 |只看该作者
这些玩意我早试过了, 劝你别试了.

我的那个项目可以跑满100M带宽, 所以数据都是落入磁盘的, 当时遇到了不少问题, 最后结论就是:

1, 多线程利用多核心做按文件名为key的内存cache, 线上使用了1MB的单文件缓存.
2, 单线程取cache按照4KB一次write进磁盘, 同时该线程需要缓存fd, 避免频繁open/close.

论坛徽章:
208
巨蟹座
日期:2013-09-02 09:16:36卯兔
日期:2013-09-02 20:53:59酉鸡
日期:2013-09-05 21:21:45戌狗
日期:2013-10-15 20:51:17寅虎
日期:2013-10-18 21:13:16白羊座
日期:2013-10-23 21:15:19午马
日期:2013-10-25 21:22:48技术图书徽章
日期:2013-11-01 09:11:32双鱼座
日期:2013-11-01 20:29:44丑牛
日期:2013-11-01 20:40:00卯兔
日期:2013-11-11 09:21:32酉鸡
日期:2013-12-04 19:56:39
8 [报告]
发表于 2013-03-01 19:09 |只看该作者
jack1219 发表于 2013-03-01 11:13
回复 2# 流氓无产者

磁盘读写的效率主要是磁头寻址时间,一般磁盘的物理磁头都不会太多,所以顺序写比乱序写要快得多
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP