百科问答小站 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小时多就搞定了,能大大的减少刷知乎的时间。




  

相关话题

  有哪些明明是 bug,却被说成是 feature 的例子? 
  在测试驱动开发中 如果测试写错了导致单元测试过不了怎么办?如何保证测试的正确性呢? 
  “Facebook 开发的高性能PHP虚拟机 HHVM 比官方的 PHP解释器 快超过9倍”的说法是否属实? 
  面向对象(OOP)是编程语言发展中的弯路吗?为什么? 
  为什么很多计算机系的学生一点不会电脑的基本操作? 
  C#/JavaList自定义索引? 
  编程最基本的术语「bug」该怎么翻译? 
  俄罗斯人编程为什么那么厉害? 
  如何评价Intel第12代 酷睿Alder Lake的改进? 
  制作一个P社游戏的流程是怎样的? 

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





© 2024-11-21 - tinynew.org. All Rights Reserved.
© 2024-11-21 - tinynew.org. 保留所有权利