POPPUR爱换

 找回密码
 注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

搜索
查看: 22397|回复: 153
打印 上一主题 下一主题

我觉得Intel和Amd能够将任何单线程的程序,都可以用多核同时运行加速处理。欢迎探讨。

[复制链接]
跳转到指定楼层
1#
发表于 2011-8-30 18:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hunguqi 于 2011-9-2 16:01 编辑

2011年9月2日更新
有人让我标题改的低调一点,我觉得对,我改了一下,希望大家来踊跃探讨。


举个例子,我要做一个superpi(1mb)计算,那么按双核Cpu的处理方式,cpu1保持50%负载,cpu2保持50%负载,算到算完为止。(如附件图1)

但为什么不能cpu1保持100%负载,cpu2也保持100%负载,算到算完为止呢?

看到一楼的回帖,我觉得大家没明白我的意思,给大家几个选项算了(目前统计至51楼)
1.从硬件技术上来说,无法实现。(6票)
2.Intel和Amd都犯错了,都没做这个功能。
3.Intel对于只支持单线程的软件,故意不让其用满2个核心,因为软件不支持。(4票)
4.Intel对于只支持单线程的软件,故意不让其用满2个核心,因为Amd也是这么干的,没什么道理,只为形成硬件技术上的统一。
5.Intel对于只支持单线程的软件,故意不让其用满2个核心,因为想留一手,到以后芯片发展不下去了,再推出这个技术来赚钱。
6.Intel对于只支持单线程的软件,故意不让其用满2个核心,因为这样可以逼迫软件业向支持多核心的方向发展。
7.Intel对于只支持单线程的软件,故意不让其用满2个核心,因为这样可以不用使用重量级的散热器,因为随便跑什么程序都满载,至少原装散热器有时候是会坑爹的。
8.Intel对于只支持单线程的软件,故意不让其用满2个核心,因为这样可以简化芯片的设计,大量的降低成本,不是造不出,而是不想造。
9.Intel对于只支持单线程的软件,故意不让其用满2个核心,因为Intel被我们误解了,可能Intel其实已经实现了这个功能,但没有任何一款主板或者操作系统支持这个功能,Intel被我们冤枉了。
10.Intel对于只支持单线程的软件,故意不让其用满2个核心,因为这么高级的功能,只用在高端服务器上,PC机现在还没这个资格使用这个技术,说到底,还是为了赚钱。
11.两个核心之间快速切换,任何时刻都只有一个核心在运行这个线程。一个线程可以看作一条顺序的指令队列,其顺序不能改变,同一时刻自然只能使用一个核心。(2票)(第14楼)
12.我们错怪Intel和Amd了,他们都不是奸商(1票)(第37楼)
13.楼主说的都是阴谋论(1票)(第44楼)
14.单线程就是跑路,开车,无论有多少跑道,到达的时间是一样。(2票)
15.实现这种高级货,还要靠楼主。(1票)(第50楼)
16.以上答案都不对(1票)(第36楼)

由于第48楼和第49楼嘲笑楼主,楼主决定公布一个方法,给嘲笑楼主的人,一个有力的反击。

比如有一段程序如下:
语句1: int test1 = 0;
语句2: int test2 = 0;
语句3: test1 = test1 + 10;
语句4: test2 = test2 + 20;
语句5: int test3 = 0;
语句6: test3 = test1 + test2;

在核心1运行的语句1,3,同时可以在核心2运行的语句2,4,最后在核心1运行语句5,6
总体消耗的时间应该是4个cpu时间,比单线程运行节约了2个cpu时间。
我觉得Intel和Amd能够将任何单线程的程序,都可以用多核同时运行加速处理。欢迎各位探讨。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
2#
发表于 2011-8-30 18:53 | 只看该作者
super pi好像真的不支持多线程啊。。。
回复 支持 反对

使用道具 举报

3#
 楼主| 发表于 2011-8-30 18:55 | 只看该作者
1楼,你没明白我的意思,我的意思是,为什么不支持多线程的软件,就不能用满2个核心。

是Intel故意为之,还是Intel在技术上根本无法实现,还是Intel和Amd一起犯了一个美丽的错误。
回复 支持 反对

使用道具 举报

4#
发表于 2011-8-30 19:06 | 只看该作者
真没看明白lz想说啥,但不是所有事都能通过并发提高效率的,比如说你让100个人从北京走到上海,也不会比1个人从北京到上海花更少的时间,等待有时是必须的。
回复 支持 反对

使用道具 举报

5#
 楼主| 发表于 2011-8-30 19:24 | 只看该作者
4楼的意思我懂了,他选了选项1。
回复 支持 反对

使用道具 举报

6#
发表于 2011-8-30 19:29 | 只看该作者
技术上无法实现,否则 “反超线程”早就出了,现在的 睿频 实际上就是当年吹的 反超线程

实现这个必须程序本身支持,实现的方法在编程算法上,单线程的算法是相当简单易于理解的,只要搞清楚因果关系,编程新手就可以编写出来(大多数编程书本教的都是这种);但多线程并发程序,没有对算法相当理解的人是无法做到的。

除此之外,现在的主流软件大多都是靠“引擎”制作的,引擎本身就决定了编出来的程序是否支持多线程,很多公司为了节约成本,一个引擎用N代是常见的事
回复 支持 反对

使用道具 举报

7#
 楼主| 发表于 2011-8-30 19:32 | 只看该作者
我YY了这么多理由,6楼不为所动,还是选了选项1
回复 支持 反对

使用道具 举报

8#
发表于 2011-8-30 19:35 | 只看该作者
lz看到的两个50%,看上去更像一个单线程程序在不同的时间片被调度到两个核心上去执行。如果能绑定到一个核心上,看到的就是一个100%。这是问题的性质决定的,没办法通过并发提高性能。
多处理器和并行编译技术在70年代就开始研究了,虽然在pc上还是新东西,大型机上早就这样做了。很多年也没什么突破,想在这种领域创新可不容易,呵呵
回复 支持 反对

使用道具 举报

9#
发表于 2011-8-30 19:36 | 只看该作者
软件的问题,现实中是软件适应硬件,而不是反过来的
回复 支持 反对

使用道具 举报

10#
发表于 2011-8-30 19:40 | 只看该作者
只支持单线程的软件,既然只支持单线程,能用两个线程不就是胡扯了么?

你两个核心各50%还不是只相当于一个线程而已,软件自己身就限定了无法使用高于一个线程,这和intel amd有什么关系?

我以为你要问的是为何pi是两个核心各50%,而不是一个核心100%另一个0%
回复 支持 反对

使用道具 举报

11#
 楼主| 发表于 2011-8-30 19:44 | 只看该作者
本帖最后由 hunguqi 于 2011-8-30 19:49 编辑

10楼的说法有点问题,为什么每个核心都只能用50%,不能都用51%,这1%是谁限制的,怎么限制的,为什么限制的,啥都没说,就说不关intel和amd的事,那你这个说法岂不是不能服众?

另外,单线程是单线程,只能用一个核心是只能用一个核心,这是两件事情,如果要扯在一起,就要说出理由。

周星驰在“回魂夜”这个影片中有一句名言:
保安:“你被那只鬼掐得七孔流血还死不了”
周星驰:“七孔流血是七孔流血,死是死,是两回事,你千万不要混淆。”
回复 支持 反对

使用道具 举报

12#
发表于 2011-8-30 19:52 | 只看该作者
这些应该是靠软件调配的吧,反正我是看过四核心,一个100%,其它三个几乎0%的情况。
回复 支持 反对

使用道具 举报

13#
发表于 2011-8-30 20:15 | 只看该作者
他们为什么要在跑π的时候满负载呢???
回复 支持 反对

使用道具 举报

14#
发表于 2011-8-30 20:20 | 只看该作者
hunguqi 发表于 2011-8-30 19:44
10楼的说法有点问题,为什么每个核心都只能用50%,不能都用51%,这1%是谁限制的,怎么限制的,为什么限制的 ...

2*50%=100%很简单的逻辑!

虽然你看到的是两个核心各50%,实际上是一个线程在这两个核心之间快速切换,任何时刻都只有一个核心在运行这个线程。

一个线程可以看作一条顺序的指令队列,其顺序不能改变,同一时刻自然只能使用一个核心。
回复 支持 反对

使用道具 举报

15#
发表于 2011-8-30 20:55 | 只看该作者
本帖最后由 philonb 于 2011-8-30 21:01 编辑

看了楼主描述,就不看选项了
楼主应该对编程这些不太了解
1、对于完全顺序执行的程序,一般从软件上很难写成并行的
2、现在的技术,CPU各个核心之间比较容易形成“串线”,cpu0执行的程序很容易就会在cpu1执行了。这是不指定CPU的情况。

如果在任务管理器里面指定某个CPU运行,楼主可以看一下任务管理器

其实我也不专业,描述得不是很明白,有请专业的来解释下吧。
回复 支持 反对

使用道具 举报

16#
发表于 2011-8-30 21:01 | 只看该作者
本帖最后由 fshx 于 2011-8-30 21:02 编辑
hunguqi 发表于 2011-8-30 19:44
10楼的说法有点问题,为什么每个核心都只能用50%,不能都用51%,这1%是谁限制的,怎么限制的,为什么限制的 ...


可以这样理解,程序就是车道,CPU就是车辆;在一条单车道上,再多的车也只能排队通过

算法上单线程就是一条线下去,下一个运算需要上一个运算的结果,比如:从1加到100,可以是1+2+3+、、、、+100;也可以是1+2+3+……50同时另一端则100+99+98+……51;当然,实际上用得最多的还是公式n(n+1)/2,算法才是最重要的,好的算法即使单线程也能凌驾于多线程之上
回复 支持 反对

使用道具 举报

17#
发表于 2011-8-30 21:18 | 只看该作者
LZ请先理解线程概念,任务管理器看到的只是一个抽象的图表,真正执行是两个“核心”不间断处理时间片,造成看到每个核心50%的结果,双核处理器不是双路CPU,所以根本上是一个中央处理器,单线程软件无法利用多个逻辑核心处理器的全部资源,改编成多线程的话就可以实现您想要的满载效果,super pi 因为单线程的原因,已经成为衡量单核整数运算能力的工具,仅此而已。
比如WOW这种游戏,在四核上面它也是这种情况,程序本身不支持那么多线程。
回复 支持 反对

使用道具 举报

18#
发表于 2011-8-30 21:42 | 只看该作者
乱七八糟萝莉把所

在任务管理器里限制SUPERPI只用某一个核心,再跑跑看
回复 支持 反对

使用道具 举报

19#
 楼主| 发表于 2011-8-30 21:46 | 只看该作者
18楼根本没看懂俺的意思,不怪你,不是程序员么,的确有点难懂。
回复 支持 反对

使用道具 举报

20#
发表于 2011-8-30 21:50 | 只看该作者
本帖最后由 yuhiyu 于 2011-8-30 21:50 编辑

说白点,在一个时刻内,只有一个核心在计算SUPER PI,不是给0号核心算,就是给1号。只有一个核心在算,也就只有1个核心的效率。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

广告投放或合作|网站地图|处罚通告|

GMT+8, 2025-8-13 15:45

Powered by Discuz! X3.4

© 2001-2017 POPPUR.

快速回复 返回顶部 返回列表