返回信息流开发环境:Linux Eclipse,Windows VS2010
编译器:Intel Compiler由于时间变长我们也试过g++,VC++
使用的库:主要是BOOST thread库,也试过POSIX
测时延方式:利用Ipp库测时延,也用过linux下的gettimeofday函数测过,没区别
我们最近在做一个项目,需要把顺序执行的的程序改成多核并行运算,基本思想就是把一个函数拆分成几块绑定在多个thread上进行并行运算。但(先不说多线程并行)假如我在main中直接调用这个函数运行时延是50us,如果我把它绑定在一个thread上join时延就变成了100us甚至更多,而且时延抖动比直接调函数厉害多了。而且这个thread占用的资源是系统动态分配的,不是定死在一个核上。
我们再如上各种开发环境,编译器,库下做过实验,结果都是如此,实在是摸不着头脑了。。。求大神指点!!这关系到俺们项目组能不能放假,非常拙计啊。。
这是一条镜像帖。来源:北邮人论坛 / cpp / #72662同步于 2013/7/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
【求助】多核并行运算时间变长???boost thread&posix
lzh519215
2013/7/18镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
没有逻辑问题,我们实验的时候就是自己写了一个用memcpy进行数据搬移的小函数,所以线程间不存在相关性,也就是说一定是并行的
【 在 tonyjansan 的大作中提到: 】
: 感觉像是代码逻辑的问题!仔细查上下文依赖关系吧~
瓶颈可能在内存带宽,而不是线程。
【 在 lzh519215 的大作中提到: 】
: 没有逻辑问题,我们实验的时候就是自己写了一个用memcpy进行数据搬移的小函数,所以线程间不存在相关性,也就是说一定是并行的
不只是内存搬移的函数,写文件这种函数也一样会由于绑定在一个线程上导致时延成倍增长
【 在 nuanyangyang 的大作中提到: 】
: 瓶颈可能在内存带宽,而不是线程。
:
显然,写文件的瓶颈在IO而不是CPU。甚至对于高度并发的网络服务器来说,单线程轮询各个网络连接都比多线程快,而且能处理更多的并发连接数。
不过,我认为你需要叙述一下你的需求。具体的应用,优化策略是不同的。
【 在 lzh519215 的大作中提到: 】
: 不只是内存搬移的函数,写文件这种函数也一样会由于绑定在一个线程上导致时延成倍增长
谢谢你!我们找到原因了,是因为操作系统动态调度该线程导致其使用的数据在各个cpu中来回拷贝时间变得很长。后来通过设置亲缘性绑到了一个cpu上就没问题了。
【 在 liuleixh 的大作中提到: 】
: 可以发下代码看看吗?说不定,可以帮助你从代码种发现优化方案。