Board logo

标题: [评测] 多核多线程优化到底有多难 [打印本页]

作者: qqqqqq    时间: 2017-4-15 21:09     标题: 多核多线程优化到底有多难

foobar转码时能把所有线程全部用到100%,有多少个线程就能同时转多少首曲子,和单线程相比直接是*N的速度,效率极高。
这么小的一个程序都能完全充分利用多核多线程,大的软件和游戏反而对多线程利用率极低,这是什么道理?
作者: 卖哥    时间: 2017-4-15 21:13

不是什么事情都可以多线程的

任意输入一个正整数n
如果是奇数,n=n*3+1
如果是偶数,n=n/2
问几步后可以进入4-2-1-4的循环
你多线程一下?
作者: jun4rui    时间: 2017-4-15 21:24

posted by wap, platform: Samsung
引用:
原帖由 @qqqqqq  于 2017-4-15 01:09 发表
foobar转码时能把所有线程全部用到100%,有多少个线程就能同时转多少首曲子,和单线程相比直接是*N的速度,效率极高。
这么小的一个程序都能完全充分利用多核多线程,大的软件和游戏反而对多线程利用率极低,这是什么道理?
一个和尚挑水喝,三个和尚没水喝。道理很好懂啊,干一件事一个人好干,但是十几个人怎么干得又快又好就不容易了。

不过现在软件开发技术越来越先进,多核优化也越来越好了。
作者: jjx01    时间: 2017-4-15 21:56

不能多线程转一首曲子,说明很难
作者: qhlixpfh    时间: 2017-4-15 22:22

简单的道理 假如10个人盖个房子要盖10天  100个人就1天盖好? 2400个人的话1小时能盖出来吗? 这就是多线程优化的难度啊
作者: samusialan    时间: 2017-4-15 22:25

说到底效率低还是成本问题,如果大型软件或游戏是用来在实验室研究经费随便搞而不是拿来卖的话,效率保证能高很多
作者: 旨旨    时间: 2017-4-15 22:37

posted by wap, platform: Android
引用:
原帖由 @jjx01  于 2017-4-15 21:56 发表
不能多线程转一首曲子,说明很难
可以的,但是转曲一般很快,并不需要很多线程
作者: NintendoVii    时间: 2017-4-15 22:54

posted by wap, platform: Android
因为那些多线程优化不好的软件游戏cpu并不算是明显瓶颈啊,费力去优化不值得
作者: 松下裤带子    时间: 2017-4-15 23:04

用的软件可能是几年前的,写软件的类库可能是几年前的,制作软件的软件可能是几年前的,程序员的思维还在几年前。。。。

[ 本帖最后由 松下裤带子 于 2017-4-15 23:07 编辑 ]
作者: yfl2    时间: 2017-4-15 23:20

这什么神奇的比较方法,你转歌是同时运行几个相互没有关联的任务,那你可以同时开几个游戏,多线程利用率也很高233

[ 本帖最后由 yfl2 于 2017-4-15 23:25 编辑 ]
作者: ylgtx    时间: 2017-4-15 23:37

游戏主机不就是8核优化的么,不然那么垃圾的cpu哪跑得动。
作者: ffcactus    时间: 2017-4-15 23:42

posted by wap, platform: iPhone
虚拟机就是多线程优化得好的例子呀,23333
作者: cywater2000    时间: 2017-4-16 08:09

posted by wap, platform: GOOGLE
程序越复杂,多线程越难
作者: 532    时间: 2017-4-16 09:06

很难想象楼主这种级别的玩家还能问出这个问题

这么说吧,有些东西呢,就是很难人多力量大,举个例子,一个孕妇十月怀胎,两个孕妇怀一个胎,你看能不能SLI一下五个月生下来?不行

也别说这个例子太科幻,有些孕妇孕前七八十斤体重一样生五六斤的娃,有些孕妇翻个倍二百斤了还是生差不多大的娃,放CPU界算是大小核干一个活儿没有谁比谁快了
作者: alann    时间: 2017-4-16 12:29

posted by wap, platform: Android
多线程转同一曲也可以,把曲子分成几段同时转就是。可游戏你得一章一章玩,不能同时玩几章啊。游戏画面倒是可以分割并行处理,但那是gpu的事,gpu一直就是多核并行处理

本帖最后由 alann 于 2017-4-16 12:31 通过手机版编辑
作者: jjx01    时间: 2017-4-16 12:37

引用:
原帖由 旨旨 于 2017-4-15 22:37 发表
posted by wap, platform: Android
可以的,但是转曲一般很快,并不需要很多线程
1秒能转完的曲子,不能说明用户不需要1/8秒来完成
1/8秒能转完的曲子,用1/64秒转完自然更好
作者: wh1406    时间: 2017-4-16 17:50

posted by wap, platform: iPhone
对唯一性资源的操作是无法并行化的,这个是业务逻辑决定的。比如对一个商品库存数读写只能排队,但每个个体余下的操作又依赖于这个数据才能进行。多进程反而得考虑好如何处理竞争的问题。
复杂的程序要并行化首先就需要重新分析业务逻辑,哪些可离散,哪些是线性的,这个工作量就很头疼了,出了错误又非常难调试。
作者: 532    时间: 2017-4-16 18:28

引用:
原帖由 wh1406 于 2017-4-16 17:50 发表
posted by wap, platform: iPhone
对唯一性资源的操作是无法并行化的,这个是业务逻辑决定的。比如对一个商品库存数读写只能排队,但每个个体余下的操作又依赖于这个数据才能进行。多进程反而得考虑好如何处理竞争的 ...
听说被狂喷的那个铁路售票后台就是这种模型,我买了广州到北京的票,往后的可能长沙 武汉 石家庄啥的到北京的全部要扣库存
作者: wh1406    时间: 2017-4-16 18:43

posted by wap, platform: iPhone
引用:
原帖由 @532  于 2017-4-16 18:28 发表
听说被狂喷的那个铁路售票后台就是这种模型,我买了广州到北京的票,往后的可能长沙 武汉 石家庄啥的到北京的全部要扣库存
如果只是这一趟车次,那么途径的的车站肯定要扣一次库存的,比如a1234广州到北京票售出一张,那么长沙,武汉,石家庄到北京的库存就要扣一张票。
如果你说的是其他车次a4321也要扣库存,那确实有点莫名其妙。
作者: lewx    时间: 2017-4-17 12:39

引用:
原帖由 qqqqqq 于 2017-4-15 21:09 发表
foobar转码时能把所有线程全部用到100%,有多少个线程就能同时转多少首曲子,和单线程相比直接是*N的速度,效率极高。
这么小的一个程序都能完全充分利用多核多线程,大的软件和游戏反而对多线程利用率极低,这是什 ...
Posted by: Meizu M3X
这还是单线程啊,又不是多个线程同时处理一个  TGFC·NG
作者: b0207191    时间: 2017-4-17 12:42

直接看这个

http://ifeve.com/why-threads-bad/
作者: 流浪的枪骑兵    时间: 2017-4-19 09:35

线程之间没有交互的话就无所谓,比如LZ提的每个线程转一首MP3
但实际上绝大多数情况下,线程之间必然有交互,有资源的争抢,有状态的协调等等
作者: u571    时间: 2017-4-19 09:43

posted by wap, platform: Chrome
传统程序大多都是串行,前后逻辑依赖性很强,多线程提升性能天花板很低。
作者: hourousha    时间: 2017-4-19 12:25

多线程程序很平常,但多线程优化很有讲究,想效率高,需要尽量做出lock-free的多线程程序,否则同步的开销甚至可能会得不偿失。




欢迎光临 TGFC Lifestyle (http://tgfcer.com/) Powered by Discuz! 6.0.0