为什么采用多线程计算速度不升反降?

arryang 2012-04-14 02:18:22
写个测试算法,纯计算型,无IO操作,内存操作微乎其微
在一个intel,双CPU,四核的PC上跑
一个线程,速度6000万, CPU 25%
两个线程,速度1000万 CPU 50%
四个线程,速度500万 CPU 100%

在一个16核的服务器上测试,结果同上边差不多,采用单线程多进程,速度提升和同进程个数基本成正比关系
用intel的编译器编译,结果无太大改观

线程之间无通信和数据同步问题,唯一同步是一个全局变量(int)用户计数

这个现象令我百思不解
哪位有经验的前辈能指导一下,什么情况下会产生这种现象?难道非要采用多进程架构去实现提取?
...全文
357 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hztj2005 2012-10-16
  • 打赏
  • 举报
回复
我也遇到同样的问题,还没有解决。
root_jli 2012-05-08
  • 打赏
  • 举报
回复
运行程序时,是否指定了cpu为多线程?
dfasri 2012-05-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
为什么i7那么快,服务器的cpu却那么慢呢?
[/Quote]
不清楚, 现在的家用级CPU也越来越变态的了, 或者i7的家用版已经超越以前的服务器CPU很多了.
sunfishfly 2012-05-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

肯定是发生较多的伪共享的问题. 你感觉是全局变量是唯一的, 但实际可能处理的数据都是在物理内存位置上是邻近的, 那么就会变得超级的慢的了.

而且不知道你代码里面有没有用CAS这类操作, 假如有, 其实这类操作的快慢, 要看多核CPU架构的, 例如在i7 2600的家用级CPU上, 跑CAS都有3000万/s, 但拿到实际的服务器上, 至强2.16G, 8核, 却只跑300万/s.
这些……
[/Quote]

为什么i7那么快,服务器的cpu却那么慢呢?
modyaj 2012-05-04
  • 打赏
  • 举报
回复
全局变量的写操作不小心就伪共享了 不过会出现些乱东西 全局变量通信估计存在太多的浪费时间了
福建程序员 2012-05-04
  • 打赏
  • 举报
回复
原因就是那个 唯一同步是一个全局变量(int)用户计数 引起的,多进程你没做这个同步了吧?
dfasri 2012-04-17
  • 打赏
  • 举报
回复
肯定是发生较多的伪共享的问题. 你感觉是全局变量是唯一的, 但实际可能处理的数据都是在物理内存位置上是邻近的, 那么就会变得超级的慢的了.

而且不知道你代码里面有没有用CAS这类操作, 假如有, 其实这类操作的快慢, 要看多核CPU架构的, 例如在i7 2600的家用级CPU上, 跑CAS都有3000万/s, 但拿到实际的服务器上, 至强2.16G, 8核, 却只跑300万/s.
这些很难解释, i7上越多线程越快一点, 但至强上, 超多就越慢

567

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧