设为首页 加入收藏

TOP

CPU工作方式、多核心、超线程技术详解[转贴](四)
2019-08-23 00:32:12 】 浏览:422
Tags:CPU 工作 方式 核心 线程 技术 详解 转贴
是说我们所达到的指标性能,只有在我们的系统上才行。

  

再举个有趣的例子:

Fermi一代的NVIDIA显卡,也就是GTX460这种,基本上是在300个左右的CUDA Core(可以理解成流处理器)。而Fermi下一代是开普勒(Kepler),也就是GTX660这种,相比460,性能差不多翻倍。但是怎么翻倍的,你知道吗?GTX660的流处理器增加到了1000个左右。但是单个流处理器的性能,660只有460差不多1/2。所以660全靠数量打赢的。

 

结果,问题来了。我们的一个用户,同样一个GPU程序(Gromacs)分别放在Fermi卡上和Kepler卡上跑(Tesla计算卡,差不多就等同于460和660),结果Kepler反而比Fermi慢了不少,运行时间多了一倍。按道理来说不应该啊,用户求助我们。我们检查后确定不是硬件故障,两个卡都工作正常,NV驱动也正常。然后,我就开始看程序的源代码,花了一番功夫后找到了原因!!! 那个程序里面调用的线程数是死的!设置成了最大产生256的线程(至于为什么是256而不是257,因为CUDA里面有个thread wrap(线程包)的概念,一个包是32个,所以一般总线程数习惯都是32的倍数。具体不多说了,感兴趣的可以看一下《GPU高性能编程CUDA实战》)。这样的话,在300个核的Fermi上,基本整个卡的流处理器(几乎)全部跑满了。但是对于1000个流处理器的Kepler,256等于只用了差不多1/4,有700多个流处理器从头到尾就是空闲的。别忘了,Kepler单核性能=50%Fermi单核性能。所以,这样一来,为什么Kepler卡跑得慢,就可以解释了。

 

我们不知道Gromacs这个软件的逻辑,其实也没有必要知道,因为我们并不是计算分子动力学专家。所以后来,我们把我们的发现,汇报给Gromacs程序的开发者,让他们对程序进行了优化和改进,重新改进了并行算法,增加了线程数,下个版本更新时终于把这个问题解决掉了,使得Kepler这代的显卡可以完美地得到支持。

 

可见,有针对性的程序优化是多么的重要!

  

(下面是我作为玩家的理解,不一定专业和准确)

 

实际消费市场中,一个消费级产品,尤其是它的硬件驱动,采取第三种思路,就很有可能会出现‘跑分王’现象。这里,我举显卡的例子,可能大家更容易理解些。像很多年前的ATI显卡,硬件驱动针对那些跑分软件比如3Dmark,很有可能做了极度的优化。为什么会这样?有大程度上是因为ATI(第二种方案)拼不过NVIDIA (第二种方案),而这些厂商深知道消费者买显卡之前都是看评测跑分的,那好,我就给你来这套 田忌赛马:ATI(第三种方案)去和NVIDIA拼 。结果跑分上面不落下峰了,但通用性可能大大下降。实际运用中,遇到各种各样的游戏,如果游戏没有进一步对显卡驱动进行匹配优化,就会导致性能大减。所以这里是一个: 游戏程序 <--> 硬件驱动 <--> 硬件架构 三者相互匹配、相互优化调度的问题。(当然,现实中可能还会多出游戏引擎这个环节,也就是4者)。

  

Crysis(孤岛危机)这类的游戏开发者 (包括Cryengine这种3D引擎开发者),和开发硬件驱动的厂家,思路一般是不太一样的。也就是说孤岛的开发者肯定要考虑平台的通用性,一般不会采取特别极端的开发思路(比如第三种方案)。实际中,游戏速度慢,卡顿,一般怪的多的是厂商(ATI,NV),怪产品不给力,但你会怪游戏开发者写的代码垃圾吗?就算孤岛一向被称为是硬件杀手,那又能怎么样呢?作为消费者,你只能不断的掏钱升级显卡。。。。

 

如果孤岛采取的第二种方案思路,那就说的通了。2核4线程、4核4线程、4核8线程当然是不一样的。因为你从来都不会有绝对性能上的标杆 - 孤岛究竟应该多快多流畅,究竟有没有把GTX980这个硬件的绝对性能榨干到极致。而你只可能有相对的感受 - 用核少的i3打孤岛,肯定没有核多的i7打孤岛那么爽。

 

首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Delphi 7~XE系列升级安装Indy10.6 下一篇没事做的Delphi版的俄罗斯方块游..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目