百科问答小站 logo
百科问答小站 font logo



迄今为止押宝多核的策略几乎都失败了,为什么开发者如此抵触多核? 第1页

  

user avatar    网友的相关建议: 
      

我的天哪!!!!!

押宝多核失败了!!

这是吹捧7350k么?手动滑稽


稍微严肃一点

多核非常成功,在高性能计算领域没有单核啥事了,连定制计算都讲并行化,你想想显卡多少核

桌面也非常成功,zen这次非常好,希望干掉牙膏厂骗钱的双核系列

如果你感受不到多核的好处,请多开几个复杂网页

至于某些老游戏,呵呵


user avatar   jiehou1993 网友的相关建议: 
      

不评价策略问题,仅说说线程并行的难点:

1、并非所有问题都能并行化

串行(单线程)计算在时间上和逻辑上是线性的,第二步计算一定在第一步之后,这和我们的物理法则是吻合的。而并行计算(多线程)在时间和逻辑上不是线性的,可能要求第二步与第一步同时进行。可问题是很多时候第二步计算需要第一步的结果,例如计算这么一个数组:

a(i+1)=a(i)+1

不考虑用解析法求出通项公式的情形,那么求a(1)必然要知道a(0)。这种情况下想要同时计算,只能先用线程0算出a(0),然后用时间机器将a(0)的值返回到计算前,再用线程1同时计算a(1)。

我要是有时间机器,还要啥并行啊,一次性算完返回结果不是更好么。


2、n线程并行的计算速度低于单线程的n倍

计算1+2+3+4+5+6,串行和并行处理的过程一般如下图:


串行算法总共需要5次加法,假设每次加法耗时1s,那么串行算法需要5s完成

并行同样需要2x2+1=5次加法,由于前面四次加法分发给两个线程,最后一次加法只能由单个线程完成,所以并行算法需要2+1=3s完成

你看,2线程的效果并不简单的等于单线程的2倍。更重要的是,上述并行算法的最后一步还需要对两个线程之间的数据进行通信,而线程间通信通常是很慢的,一不小心就会变成计算耗时3s通信耗时30s,导致实际上并行的效率并不高。


3、并行化开发成本高于串行,性价比不一定划算

从上面的例子就能看出来了,并行编程的幺蛾子太多,一个不小心反而比串行更慢,所以对计算速度要求不高的软件(把0.01s的响应时间变成0.001秒也没什么ruan用),以及付不起程序员工资的公司,都不会采用并行化编程。

并行编程使用最广泛的还是科学计算领域。一个用单线程1天才能跑完的任务,用2颗e5 24核暴力计算1小时多就搞定了,能大大的减少刷知乎的时间。




  

相关话题

  谜之代码是否存在? 
  在Ubuntu 上有什么必装的实用软件? 
  你写过什么有趣的程序? 
  程序员如何应对诸如「给我弄个网站吧」的请求? 
  windows10 界面是用什么语言编写的?.NET在最新的操作系统中有哪些应用 
  你见过的最想笑的,最奇葩的,最逗逼的代码是什么? 
  最数学的计算机科学方向有哪些? 
  你写过哪些比较酷的十行以内的 Matlab 代码? 
  怎么使用思维导图? 
  计算机专业大一能写出 Hello World 程序是什么水平? 

前一个讨论
组装台式机性能过剩情况严重吗?
下一个讨论
为什么要买和CPU价钱一样(差不多)的主板?





© 2024-12-22 - tinynew.org. All Rights Reserved.
© 2024-12-22 - tinynew.org. 保留所有权利