返回信息流我的程序开了4个线程,服务器6核,使用4个cpu,每个cpu用户占用率只有百分之二十几,求问正常不?猜测是哪里出问题了
这是一条镜像帖。来源:北邮人论坛 / cpp / #80804同步于 2014/7/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
多线程多核cpu利用率
Hathaway
2014/7/15镜像同步21 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 Hathaway 的大作中提到: 】
: 我的程序开了4个线程,服务器6核,使用的cpu用户占用率只有百分之二十几,求问正常不?猜测是哪里出问题了
信息量不够啊
要想跑满至少6线程,每核一个
万一单核支持多硬件线程的话还得每核都分配多个线程
另外还得考虑affinity、同步操作、CPU-Bound/IO-Bound...
想跑满CPU,不容易啊
即使跑满了...吞吐量有多少,排在roofline的哪里?是computation bound还是memory bound
一般4线程在6核下能跑到六七十吧。如果低于50的话一般就是设计问题了。
常见的是:文件读写太频繁(可以考虑用ram盘或者合并小文件),线程间互锁之类。基本上都是线程等待的时间太长,处理时间太短。
表示同事写的不是很高深的程序在戴尔R720 12核(关掉了HT)下,开13线程能跑到97上下,带文件读写和互斥。
嗯,谢谢,分析的很到位,我的读写很频繁,这里是优化的点,如果IO操作换成内存读写的话是不是利用率会提升,但是多核也要使用一个内存系统吧,是不是提升会又有限制?我test下
【 在 jetstorm 的大作中提到: 】
: 一般4线程在6核下能跑到六七十吧。如果低于50的话一般就是设计问题了。
: 常见的是:文件读写太频繁(可以考虑用ram盘或者合并小文件),线程间互锁之类。基本上都是线程等待的时间太长,处理时间太短。
: 表示同事写的不是很高深的程序在戴尔R720 12核(关掉了HT)下,开13线程能跑到97上下,带文件读写和互斥。
非常感谢,虽然好多名词不是很清楚,我调研下
【 在 iFadeToBlack 的大作中提到: 】
: 要想跑满至少6线程,每核一个
: 万一单核支持多硬件线程的话还得每核都分配多个线程
: 另外还得考虑affinity、同步操作、CPU-Bound/IO-Bound...
: ...................
对了,可能我没说清楚,我的是每个cpu的用户使用率百分之二十几,总的是99.9
【 在 jetstorm 的大作中提到: 】
: 一般4线程在6核下能跑到六七十吧。如果低于50的话一般就是设计问题了。
: 常见的是:文件读写太频繁(可以考虑用ram盘或者合并小文件),线程间互锁之类。基本上都是线程等待的时间太长,处理时间太短。
: 表示同事写的不是很高深的程序在戴尔R720 12核(关掉了HT)下,开13线程能跑到97上下,带文件读写和互斥。
【 在 Hathaway 的大作中提到: 】
: 对了,可能我没说清楚,我的是每个cpu的用户使用率百分之二十几,总的是99.9
:
巧合。
楼上有人说得对,并不是所有的程序都是cpu-bound的。有时候内存是瓶颈,有时候IO是瓶颈。
磁盘读写换成内存读写的好处就是等待时间大大缩短,cpu可以及时拿到数据,提升CPU利用率。最简单的测试方法就是使用像Primo Ramdisk一类的程序,把一部分内存(比如1G)虚拟成硬盘,这样可用内存就小了1G,但是会多出一个大小为1G的盘(比如Z盘)来。你可以像操作普通硬盘上的文件一样操作虚拟磁盘,但是可以得到近似操作内存一样的低延迟。这种方式对程序没有改动,简单易行。
另外,你说每用户cpu使用率20%多,总共的99.9%是什么意思?不是很清楚你的意思。难道是多个用户同时在使用CPU么?如果是的话,所有用户的CPU总可用为100%,单个用户可用的是多少就不确定了,这个是由系统调度的,即使你优化程序作用也有限,除非你调整程序运行的优先级,但是会影响系统的响应。
一般来说多核cpu使用率的话,每个cpu有一个单独的使用率,总的使用率是多个CPU的平均值。加入两个核,一个100%,一个0%,总的cpu使用率就是50%。
【 在 Hathaway 的大作中提到: 】
: 嗯,谢谢,分析的很到位,我的读写很频繁,这里是优化的点,如果IO操作换成内存读写的话是不是利用率会提升,但是多核也要使用一个内存系统吧,是不是提升会又有限制?我test下
: