POPPUR爱换

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

作者: hunguqi    时间: 2011-8-30 18:47
标题: 我觉得Intel和Amd能够将任何单线程的程序,都可以用多核同时运行加速处理。欢迎探讨。
本帖最后由 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能够将任何单线程的程序,都可以用多核同时运行加速处理。欢迎各位探讨。


作者: 怪你过分美丽    时间: 2011-8-30 18:53
super pi好像真的不支持多线程啊。。。
作者: hunguqi    时间: 2011-8-30 18:55
1楼,你没明白我的意思,我的意思是,为什么不支持多线程的软件,就不能用满2个核心。

是Intel故意为之,还是Intel在技术上根本无法实现,还是Intel和Amd一起犯了一个美丽的错误。
作者: reftin2    时间: 2011-8-30 19:06
真没看明白lz想说啥,但不是所有事都能通过并发提高效率的,比如说你让100个人从北京走到上海,也不会比1个人从北京到上海花更少的时间,等待有时是必须的。
作者: hunguqi    时间: 2011-8-30 19:24
4楼的意思我懂了,他选了选项1。
作者: fshx    时间: 2011-8-30 19:29
技术上无法实现,否则 “反超线程”早就出了,现在的 睿频 实际上就是当年吹的 反超线程

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

除此之外,现在的主流软件大多都是靠“引擎”制作的,引擎本身就决定了编出来的程序是否支持多线程,很多公司为了节约成本,一个引擎用N代是常见的事
作者: hunguqi    时间: 2011-8-30 19:32
我YY了这么多理由,6楼不为所动,还是选了选项1
作者: reftin2    时间: 2011-8-30 19:35
lz看到的两个50%,看上去更像一个单线程程序在不同的时间片被调度到两个核心上去执行。如果能绑定到一个核心上,看到的就是一个100%。这是问题的性质决定的,没办法通过并发提高性能。
多处理器和并行编译技术在70年代就开始研究了,虽然在pc上还是新东西,大型机上早就这样做了。很多年也没什么突破,想在这种领域创新可不容易,呵呵
作者: Alexdel    时间: 2011-8-30 19:36
软件的问题,现实中是软件适应硬件,而不是反过来的
作者: Sirlion    时间: 2011-8-30 19:40
只支持单线程的软件,既然只支持单线程,能用两个线程不就是胡扯了么?

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

我以为你要问的是为何pi是两个核心各50%,而不是一个核心100%另一个0%
作者: hunguqi    时间: 2011-8-30 19:44
本帖最后由 hunguqi 于 2011-8-30 19:49 编辑

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

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

周星驰在“回魂夜”这个影片中有一句名言:
保安:“你被那只鬼掐得七孔流血还死不了”
周星驰:“七孔流血是七孔流血,死是死,是两回事,你千万不要混淆。”
作者: SweetapplE    时间: 2011-8-30 19:52
这些应该是靠软件调配的吧,反正我是看过四核心,一个100%,其它三个几乎0%的情况。
作者: 泯灭    时间: 2011-8-30 20:15
他们为什么要在跑π的时候满负载呢???

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

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

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

一个线程可以看作一条顺序的指令队列,其顺序不能改变,同一时刻自然只能使用一个核心。
作者: philonb    时间: 2011-8-30 20:55
本帖最后由 philonb 于 2011-8-30 21:01 编辑

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

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

其实我也不专业,描述得不是很明白,有请专业的来解释下吧。
作者: fshx    时间: 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,算法才是最重要的,好的算法即使单线程也能凌驾于多线程之上
作者: tianle130    时间: 2011-8-30 21:18
LZ请先理解线程概念,任务管理器看到的只是一个抽象的图表,真正执行是两个“核心”不间断处理时间片,造成看到每个核心50%的结果,双核处理器不是双路CPU,所以根本上是一个中央处理器,单线程软件无法利用多个逻辑核心处理器的全部资源,改编成多线程的话就可以实现您想要的满载效果,super pi 因为单线程的原因,已经成为衡量单核整数运算能力的工具,仅此而已。
比如WOW这种游戏,在四核上面它也是这种情况,程序本身不支持那么多线程。
作者: farter    时间: 2011-8-30 21:42
乱七八糟萝莉把所

在任务管理器里限制SUPERPI只用某一个核心,再跑跑看
作者: hunguqi    时间: 2011-8-30 21:46
18楼根本没看懂俺的意思,不怪你,不是程序员么,的确有点难懂。
作者: yuhiyu    时间: 2011-8-30 21:50
本帖最后由 yuhiyu 于 2011-8-30 21:50 编辑

说白点,在一个时刻内,只有一个核心在计算SUPER PI,不是给0号核心算,就是给1号。只有一个核心在算,也就只有1个核心的效率。
作者: farter    时间: 2011-8-30 22:04
hunguqi 发表于 2011-8-30 21:46
18楼根本没看懂俺的意思,不怪你,不是程序员么,的确有点难懂。

不是程序员么,别人已经指出N遍的事情,还是理解不了{lol:]

你只可以在操作系统里控制SUPERPI在几个核上跑,而不能用SUPERPI的选项、设置文件或者命令行参数来控制它在几个核上跑,那么这个限制是OS的限制还是程序的限制应该很清楚
作者: fellme    时间: 2011-8-30 22:13
楼主,智商谈兵是会笑死人的,不是专业人就别学专业人说话
作者: hunguqi    时间: 2011-8-30 22:19
楼主羞愧的走了。但我还是不太明白。
作者: amx004    时间: 2011-8-30 22:21
楼主你昨天教导我说
barton2500+打开淘宝和在线视频网页 CPU占用率100% 10秒钟
2500K只需要0.5秒, 所以感觉不出卡顿

这个理论是不是和你一楼的冲突了? 请你用专业的程序员知识解答
作者: 太虚公    时间: 2011-8-30 22:24
水区观光团来对楼主进行惨无人道的全方位立体式外科手术般精确围观
作者: bearqeq    时间: 2011-8-30 22:33
路过。。。。。等高人,我表达不出那个意思
作者: gtv    时间: 2011-8-30 22:41
很明显软件不支持,没有有效利用硬件资源。。
象棋 wprime就支持多线程
作者: zidane1980    时间: 2011-8-30 22:44
hunguqi 发表于 2011-8-30 18:55
1楼,你没明白我的意思,我的意思是,为什么不支持多线程的软件,就不能用满2个核心。

是Intel故意为之, ...

这个问题很奇怪,不过以前用单核的时候同样情况都是能用满的
作者: zhendiy    时间: 2011-8-30 22:50
本帖最后由 zhendiy 于 2011-8-30 23:02 编辑

我真的不明白LZ到底有没有搞清楚双核50%和单核100%的概念。
核心负载程度的计算方式是100%除以核心数,如果你是4核,那么任意颗核心达到25%的时候就是那颗核心100%满载工作的时候。
系统是按照总体100%的性能来计算这个CPU负载的。超线程技术可以无视单独核心负载。
拜托LZ看任务管理器的时候要看右边的每颗核心负载,不要看左边的总值。
双核的情况下就算LZ的一颗物理核心满载到爆,他的总值也只有50%。
如果按照LZ的算法,那么windows是不是在双核满载的时候要显示200%,四核满载的时候显示400%?从此windows威武了,他能给CPU加速,还能提高同步率,初号机暴走,400%同步率。。。。。
作者: 54230859    时间: 2011-8-30 22:57
时间很多 问了一个很搞笑的问题 {sweat:]
作者: hunguqi    时间: 2011-8-30 23:03
太虚公 发表于 2011-8-30 22:24
水区观光团来对楼主进行惨无人道的全方位立体式外科手术般精确围观

俺刚注册的那年,水区牛逼的不行,现在你倒火星上都找不到pcinlife的水区了。
作者: 太虚公    时间: 2011-8-30 23:04
再次围观秀下限     怀疑是不是被盗号了
作者: 112777013    时间: 2011-8-30 23:16
软件不支持 。。。。硬件也不支持 原单核100%平均分配多个核心 难道是负载均衡?
作者: yosh    时间: 2011-8-30 23:21
明明是软件的问题吗。所有的软件都是为硬件服务的不可能为一个软件而去改硬件,如果这样改那电脑就不是电脑了。难道要改成单片机。
作者: iloveyoucss    时间: 2011-8-30 23:27
本帖最后由 iloveyoucss 于 2011-8-30 23:33 编辑

这个软件本来就是测单核性能的,一个CPU100%,两个就是50%,四个就是25%,超过了就不是100%了

一个只能装两百毫升水的杯子,装满水就是两百毫升,然后测试装满这杯水需要多少时间,用两个两百毫升水的杯子装两百毫升水,两个杯子各到一半水,就是两百毫升,两个杯子倒一半水的时间加起来,就是倒满一杯水的时间,把这两个杯子的水倒到一个两百毫升杯子里,正好倒满。楼主偏要在两个杯子里倒更多的水,甚至倒满,然后加起来,那还是测倒满一杯水的时间吗?
作者: marker    时间: 2011-8-30 23:28
windows系统是分时多任务系统,什么是分时??分给你的时间片是满载,分给我的时间片是什么情况你无权也无法由你来决定,是有操作系统调度的。综合cpu利用率同样不是以你的负荷情况为准,是一个综合值,多核情况也是相同道理。一个应用进程不可能也不允许占有全部的时间资源和(主存,也就是内存,严格一点叫逻辑地址空间)空间资源,必须在操作系统的统一调度下工作。
建议lz增加一个选项
11:以上答案都不对
我选这个
作者: cybrans    时间: 2011-8-30 23:29
本帖最后由 cybrans 于 2011-8-30 23:32 编辑

LZ的意思大概是I和A是奸商,故意不让程序完全利用CPU,好blabla...

但是真相就是做不到,单线程软件的多核心加速能做到的话,就没有所谓的冯·诺依曼架构的局限,INTEL也不用费心思开发新架构加强单核的执行效率,只需要一个劲堆核心就得了...天网和T800也早就出现了..

说句难听点的,如果这个真的能做到,I和A故意不做,那估计这两奸商早就被VIA推到火星了.....

全球市场不比天朝,你垄断了就万事大吉,可以不思进取,你要是怀有这样的心思,那么后起之秀马上能把你变成渣渣。
作者: iloveyoucss    时间: 2011-8-30 23:36
楼主对这个软件是用来干嘛的根本不知道,这个软件就是测单核性能的,不是用来测多核性能的。
作者: whhwhhwhh    时间: 2011-8-31 00:20
推士机可以部分解决LZ的问题,不过目前看来推的都 是煤渣
作者: EDVIN    时间: 2011-8-31 01:54
我举个例子,如果看不懂我也没办法了,假如楼主先买一个水桶,每天都把水倒满,看来是不够盛水,就再买一个水桶,楼主非常生气:为什么我把一个桶的水倒满了水还不流到另一个桶里去呢?
作者: readma    时间: 2011-8-31 08:18
zhendiy 发表于 2011-8-30 22:50
我真的不明白LZ到底有没有搞清楚双核50%和单核100%的概念。
核心负载程度的计算方式是100%除以核心数,如果 ...

你有没有看到图啊?或者说你看的图与我看到的不一样?

楼主发的图,显示的是2个核心各自的占用率图,2个核心的占用率同时显示的。而且在运行PI的时候,2个核心都是占用一半,而不是其中一个占100%,另一个空闲。
作者: readma    时间: 2011-8-31 08:20
EDVIN 发表于 2011-8-31 01:54
我举个例子,如果看不懂我也没办法了,假如楼主先买一个水桶,每天都把水倒满,看来是不够盛水,就再买一个 ...

可以把2个桶连起来啊
作者: lqhpop2007    时间: 2011-8-31 08:39
LZ想的就是当年他们说的轰轰烈烈的逆反线程技术了,但技术上应该行不通吧,要不然AMD的推土机当初说的就是逆反线程的但现在已经没有那样的说法了。
作者: mmx266    时间: 2011-8-31 09:28
楼主最近几天很活跃啊~但不至于就进化到阴谋论的程度吧~
作者: vironlee    时间: 2011-8-31 09:31
farter 发表于 2011-8-30 21:42
乱七八糟萝莉把所

在任务管理器里限制SUPERPI只用某一个核心,再跑跑看

听口音是武汉的班子?
作者: 坏人t    时间: 2011-8-31 10:40
提示: 作者被禁止或删除 内容自动屏蔽
作者: thinkj    时间: 2011-8-31 10:46
LZ所讨论的东西跟INTEL或AMD无关,是否能用多线程并行计算,取决程序的架构,计算前后的数据依赖性,算法,等等。当我们写某个程序的时候,默认的时候都是单线程的。

每当我们手动创建多一个线程时就要考虑数据同步,线程的阻塞互斥,打个简单的比方:你自己从篮子中拿苹果,是可控的,因为你自己知道总数,并知道自己拿了多少,这样进行下一步运算时,可以期待拿到的数据是正确的,但是一旦多个人加入,那么他从篮子中拿几个苹果,你是不知道的,因为线程间彼此是分离的。

所以为了保证线程的同步,我们根据算法就要手动加入某些规则,某些特殊的运算,每加入一个线程,编程的复杂度就会成倍上升,出错的几率自然上升,DEBUG所花的成本就会上升。而且每当我们写好一个多线程的应用,那具体能跑到什么程度,还取决于编译器,操作系统,并不是说我们在写程序的时候创建了3个线程,那程序在运行时就一定是呈现CPU运行时3个内核100%的占用。假如操作系统有平衡负载的能力,那么就会根据时间片的轮转平衡所有负载,那时我们的3线程程序就很有可能呈现6核心占用50%的样子。

所以您看到的superpi实际上是一个单线程的程序,当它达到100%占用的时候,操作系统将他平衡负载,呈现出2个核心50%的。至于为什么不能2个核心都100%,很简单,一、平衡负载。二、它是单线程程序。假设superpi是个2线程程序,那么它运行时,很可能呈现4核心50%占用,假设处理器只有2个核心,那么此时很可能呈现出2核心100%占用。

多线程计算PI值,请参考wPrime。
作者: boris_lee    时间: 2011-8-31 10:49
楼主你真的是程序员么?莫非是XML程序员?
作者: voodoocool    时间: 2011-8-31 11:02
看了笑笑 路過
LZ自稱是程序員,肚子都笑疼了
作者: nic4522    时间: 2011-8-31 11:31
楼主既然intel和AMD都没想到你却想到了,那请问怎么样可以让只支持单线程的软件用满2个核心?
作者: 3332243    时间: 2011-8-31 16:47
提示: 作者被禁止或删除 内容自动屏蔽
作者: hunguqi    时间: 2011-8-31 18:06
太虚公 发表于 2011-8-30 23:04
再次围观秀下限     怀疑是不是被盗号了

应该不是,pcinlife的账号没这么值钱,而且pcinlife又不限制注册,对吧?
作者: hunguqi    时间: 2011-8-31 18:12
EDVIN 发表于 2011-8-31 01:54
我举个例子,如果看不懂我也没办法了,假如楼主先买一个水桶,每天都把水倒满,看来是不够盛水,就再买一个 ...

你别生气,我倒真是没有看懂,请看懂的兄弟解释下。
作者: reftin2    时间: 2011-8-31 18:27
你有兴趣,建议去看看计算机体系结构和操作系统原理的入门书,不然恐怕怎么说你也不明白。。。
作者: xmasjacky    时间: 2011-8-31 19:10
hunguqi 发表于 2011-8-31 18:12
你别生气,我倒真是没有看懂,请看懂的兄弟解释下。

或许这个例子举得不够贴切,不过LZ的理解能力还有待提高。
给你举这么个例子吧:
有一道题目,得出答案得需要100个环环相扣的方程等式推倒出来。
我可以把这100个等式交给几个人完成,也可以交给一个人完成。
但是交给几个人完成并不能提升总体的效率,因为一条等式不能拆分开交给2个人来计算,而下一条等式必须依赖于前一条等式的计算结果。

以上例子我是想说明,单线程性能在以后很长一段时间内都会显得很重要,有很多很多的程序是不可能做到支持多线程的,不管从硬件层面还是软件层面上都做不到。

作者: wl00560    时间: 2011-8-31 19:18
xmasjacky 发表于 2011-8-31 19:10
或许这个例子举得不够贴切,不过LZ的理解能力还有待提高。
给你举这么个例子吧:
有一道题目,得出答案 ...

这个例子不错……
作者: potomac    时间: 2011-8-31 19:48
提示: 作者被禁止或删除 内容自动屏蔽
作者: GTO014    时间: 2011-8-31 19:59
< - 我囧了 , 他们要表达的应该是,其实Super PI是只支持1线程1核心的。
假设双核心 Core 1 = 100% Core 2 = 0% (暂用率是可变的),哪里知道Windows任务管理的Graph实在是烂,把最终的图表或数据表示成 100% 除 2

应该是这样吧
作者: fshx    时间: 2011-8-31 20:18
SUPER PI就如本来一卡车能装满的货物,结果分配了两辆卡车,那么就变成两辆卡车就各装一半,又因为两辆卡车速度一致,所以抵达目的地的时间也一致,不会加快速度。

超线程就如一个壮汉干两个人的活

反超线程则如,本来就是一个人的活(不支持多线程的程序),而手头上有雇佣两个人的资金(双核CPU),那么就只雇佣一个人(运行单核心),并给予较高的薪金提高其积极性(提高单核频率 即 睿频)

如果楼主还不懂,那么无语了……
作者: xinrenaaa    时间: 2011-8-31 22:54
楼主还是去学学基础知识再来吧,或者等你开发出实质性的程序再来发表你的高见。想想为什么每次发明永动机的都是小学没毕业或者初中没毕业的。说句不好听的,永远不要跟一个纯S B争论,因为他会把你的智商拉到跟他一个水平,然后用他多年当S B的丰富经验打败你
作者: hunguqi    时间: 2011-8-31 23:09
楼上的讨论就讨论,不必上升到人身攻击的高度吧。
作者: whhwhhwhh    时间: 2011-8-31 23:15
xmasjacky 发表于 2011-8-31 19:10
或许这个例子举得不够贴切,不过LZ的理解能力还有待提高。
给你举这么个例子吧:
有一道题目,得出答案 ...

其实还是可以把单线程变多线程的,当有核 心没事做时, 可以假设前一步得到了某一个结果,再按这个结果进行下一步运算,当上一步算出的正好是这个假设的结果时,当前核心的运算有效,否则当前核心白算徒浪费电而矣,反正闲着也是闲着.
作者: whhwhhwhh    时间: 2011-8-31 23:21
xinrenaaa 发表于 2011-8-31 22:54
楼主还是去学学基础知识再来吧,或者等你开发出实质性的程序再来发表你的高见。想想为什么每次发明永动机的 ...

LZ的想法并没什么 错的,只是目前的硬件实施不了罢了,当你的电脑有成千上万的核心空闲时完全可以选 用合适的算法,把单线程运算的复杂度降低几个数量等级
作者: xmasjacky    时间: 2011-8-31 23:40
whhwhhwhh 发表于 2011-8-31 23:15
其实还是可以把单线程变多线程的,当有核 心没事做时, 可以假设前一步得到了某一个结果,再按这个结果进行下 ...

如果是布尔值的话还能保证50%的命中率
如果是双精度浮点值,还是放弃吧
作者: largewc    时间: 2011-8-31 23:42
楼主说的就是指令发射数吧,这在奔腾时代就支持了,奔腾开始就有两条流水线了,这两条流水线类似于你说的双核加速单核任务吧。

多通道发射早就被用滥了,这是90年代就有的技术了,通道数不是越多越好,目前也没有提升的空间了,楼主明白了哈。

Pentium有U、V两条流水线,意味着就是两条可以同时执行。目前大多cpu都是2-4条流水线之间,再高,因为运行无法预测分支,而造成了运算浪费,所以没有意义了。

同样还有单条流水线的深度问题,奔4也证明了,太深的流水线反而会降速很多。



双核运行单核程序,应该跟多发射没什么区别,所以楼主不用得意了。
作者: largewc    时间: 2011-8-31 23:43
所以我选择16,楼主你错了,这个东西早就有了
作者: hunguqi    时间: 2011-8-31 23:44
楼上指的流水线就是传说中的超线程吗?
作者: largewc    时间: 2011-8-31 23:47
本帖最后由 largewc 于 2011-8-31 23:47 编辑

去看看什么叫做乱序优化,现在cpu自身就可以做一些乱序调整了,90年代你写过汇编优化,就会了解,乱序优化对于多发射有多大的提高空间。

乱序优化就是解决一些冲突,比如说
int a = c + d;
int b = c - d;
int e = 0;
int f = 0;

乱序后,变成了
u通道
int e = 0;
int a = c + d;

v通道
int f = 0;
int b = c - d;


这东西都发展了几十年了
作者: largewc    时间: 2011-8-31 23:49
不过这种冲突仍然会让cpu有丢弃一个通道运行结果的可能,这就是分支预测的损失了。
作者: largewc    时间: 2011-8-31 23:52
流水线不是超线程,超线程说的是一套运行单元,两套寄存器而已

大多数的情况下,cpu的运算性能都远远好于内存存取,大部分程序的瓶颈都在内存读写上,这时候cpu都有一定的空闲,那么怎么办呢,再加入一套寄存器,利用空闲时间的计算,来模拟出来多核。还不影响原来的计算结果。

所以超线程只有10%-20%性能提升,对于优化得很好,内存和cpu占用比较均衡的程序而言,超线程就没有优化空间。
作者: whhwhhwhh    时间: 2011-8-31 23:56
xmasjacky 发表于 2011-8-31 23:40
如果是布尔值的话还能保证50%的命中率
如果是双精度浮点值,还是放弃吧

但对每一bit来说你必然有1/2的机会猜对.对64位的寄存嚣,当你有2的64次方个核心时你必然能猜对.当然不是一定要有这么多核 心,只要你有足够多的核 心时,你可以通过选 择更合理的算法来提高你猜 对的可能性.
作者: largewc    时间: 2011-9-1 00:00
hunguqi 发表于 2011-8-31 23:44
楼上指的流水线就是传说中的超线程吗?

amd的推土机单核心两套运算单元是什么意思呢,跟超线程有什么区别

是因为现在cpu中,整数单元只占据5%面积,那么除了加入一套寄存器,再加入另外一套整数单元,对于大部分程序而言,这东西就是双核了。而且amd的浮点指令可以拆成两个128位单元独立运行,那么对于99%的程序而言,它就是真实的双核了。

但是它的面积只加了5%,能耗也增加有限,所以跟真正的双核比,还是有很大意义的。

最后简单来说,amd的两个运算单元,就是比超线程多了5%面积的整数模块,还有就是浮点不同于intel的256位单运算单元,而是两个128位的双运算单元,也支持合并成一个256位运算单元,为avx指令做处理(也就意味着avx优化过的浮点程序,推土机是没有双核效果的,跟intel单元一样了,不过这种程序非常少)
作者: largewc    时间: 2011-9-1 00:02
推土机或者apu都是为了未来的平衡应用的,不是用来做最高端机的,不过推土机这种用核心数来加速的做法在桌面未必占优,因为支持的程序并不多,虽然它的多核很巧妙,功耗也很好。

不过我看好这东西在平板,轻薄笔记本或者游戏机领域的用途
作者: largewc    时间: 2011-9-1 00:14
fshx 发表于 2011-8-30 19:29
技术上无法实现,否则 “反超线程”早就出了,现在的 睿频 实际上就是当年吹的 反超线程

实现这个必须程 ...

睿频跟反超线程完全没关系……
睿频指的是动态超频技术而已,功耗一定的情况下,可以单核更高频率或者多核更低频率。

反超线程实话说,我没看懂,我不理解这个东西究竟能用在什么地方。
作者: whhwhhwhh    时间: 2011-9-1 00:27
Airhouse 发表于 2011-9-1 00:11
你说的这个叫Branch Prediction,几乎现代所有的处理器都有。但是问题就在于分支预测失败后惩罚也是相当 ...

本来就是什对LZ的问题的一个极端的列子,但在爆力密码破解和天气预报这些对时间极端敏感的任务时,选 取一个合理的付出还是可行的.就像我们去笔算1+2+3+.....+N,显然用极限很好做,但对高频的CPU来说每个加一遍很简单.对现在的CPU来说分支预测的命中率对运算的速度影很大, 但对MANYCORE
来说命中率稍低一点也是可以接收的,当然命中率是越高越好的.
作者: largewc    时间: 2011-9-1 00:31
hunguqi 发表于 2011-8-31 23:44
楼上指的流水线就是传说中的超线程吗?

流水线应该是一个内存操作和运算脱离的技术,因为内存往往远慢于cpu指令周期,让内存读取可以分离于内存操作,并且可以并行处理,可以大幅度加速程序运行速度,不然二者就存在互等的状态了。流水线长度应该是可以并行读取和运行的数量吧(具体我也不是太懂,就我的理解),流水线太长的话,内存也会有大量的无用资源,主要是因为跳转指令,原先预读的内存会因为跳转全部废弃。

这也是为什么奔四需要那么多的缓存,因为如果数量不够,大量的废弃的内存读取会让缓存空间瞬间撑满,而当时的amd的u就不需要,因为没有采用长流水线设计。
作者: xmasjacky    时间: 2011-9-1 09:42
whhwhhwhh 发表于 2011-8-31 23:56
但对每一bit来说你必然有1/2的机会猜对.对64位的寄存嚣,当你有2的64次方个核心时你必然能猜对.当然不是一 ...

2的64次方这样一个天文数字的概率还不如把这些核心全部关闭只需把1个核心的频率提升100M就能轻松超越。当然目前Intel和Amd都是这么做的
作者: 猥琐的民工    时间: 2011-9-1 09:58
我投11,13,14,15{titter:]
作者: largewc    时间: 2011-9-1 18:45
不过我觉得楼主的想法是好的,非常值得鼓励的,很多时候的突破都是依赖于这种创意。

只是老外比我们先进太多了,我们想到的东西,大多都是他们10-20年前都已经想到了。
作者: fshx    时间: 2011-9-1 18:47
largewc 发表于 2011-9-1 00:14
睿频跟反超线程完全没关系……
睿频指的是动态超频技术而已,功耗一定的情况下,可以单核更高频率或者多 ...

反超线程 就是 今天的睿频

反超线程当年是幻想多核共同处理一个单任务程序;但根据程序编写的原理,super PI这类单任务程序上这是根本不可能的,继而诞生了睿频,以关闭空闲核心所降低的TDP来提高单核心的频率以达到让单线程任务也受益的目标。
作者: largewc    时间: 2011-9-1 18:52
反超线程就我的理解看来,是在分支运算的时候,两个并发支路由两个核心来分别执行,这样无论丢弃哪个,都能保证一个是正确的,而不是用算法近似取一个,这样就可以大多数忽视分支的损失了。

但是我觉得也很有限,因为现在cpu计算的深度问题,单流水线长度内往往碰到的不是一个分支运算,而是若干个,这样仍然没有太高的提升空间。

反超线程应该是一个被废弃的技术吧,睿频确实是是因为反超线程的另外思路,但是应该不是同一个东西,睿频主要依赖的还是动态超频技术,是把cpu功率由多核全部加载到单个核心来超频单个核心,从而提高运行速度的。
作者: largewc    时间: 2011-9-1 18:56
-------------------------------
AMD已经在双核心Socket AM2处理器当中内置了回击Conroe处理器的杀手锏,即反超线程技术(Reverse-HyperThreading)。用户可以通过升级处理器驱动程序和主板BIOS来激活反超线程技术,介时微软有可能为反超线程技术发布
操作系统补丁。AMD反超线程技术可以作动态调整,即在需要的情况下,开启反超线程,双核处理器被系统视作单核心处理器。

  如此双核处理器的两颗核心可以共同处理一个任务,采用该技术后的AM2处理器每个时钟周期可以处理6条指令,完成计算之后又可以恢复成双核心。
-------------------------------------------------


找到之前的一个新闻,如果我没记错,P4是三并发的,同时代的AMD也是三并发的,所以反超线程就是六并发的,也就是楼主说的,六个核心同时加速单个程序

但是早就证明了,一旦超过4并发,除了费电外,根本没什么性能提升,因为分支错误太多了,所以这个技术并不可行
作者: mooncocoon    时间: 2011-9-1 19:01
没考虑任务同步性,没考虑跨CPU延迟,没考虑广播机制,没考虑……先不说这些你完全没考虑过的细节,我们直接面对这问题的本质吧。

任务的无损拆解和网格化。

请自行股沟败毒……

图灵奖已经连续给搞这个的人了,但是从数学层面上来讲这依旧是个进步缓慢到近乎无解的问题。

所以,都歇了吧,说说容易,做起来没基础的。
作者: mooncocoon    时间: 2011-9-1 19:03
换个说法,其实就是你压根没明白问题到底出在哪里,就这么简单。
大家都这么忙,没人有闲心专门跑来无缘无故笑话你的楼主
作者: largewc    时间: 2011-9-1 19:04
mooncocoon 发表于 2011-9-1 19:03
换个说法,其实就是你压根没明白问题到底出在哪里,就这么简单。
大家都这么忙,没人有闲心专门跑来无缘无 ...

楼主的思路是正确的,这个东西是早就存在的,楼主的方案也是很接近现在cpu的设计的
作者: largewc    时间: 2011-9-1 19:05
-------------------------------------

整数性能应该是Pentium 4的强项。天才的双频ALU设计,快速执行引擎,尤其考虑到126个upos的动态指令窗口和新访问算法的L1数据Cache,是迄今最强有力的整数执行引擎。然而,由于追踪Cache每时钟周期仅能发射3条指令,限制了Pentium 4每时钟周期仅能支撑3条整数指令。在运行单纯整数测试的CPUmark评价Pentiun 4时,所有的整数处理能力似乎都消失了。
----------------------------------

百度搜索,P4确实是三并发的,我没有太优化过P4程序,但是P1-P3的UV双并发还是比较熟悉的。
作者: blooddcl    时间: 2011-9-1 19:07
核心问题就是,这个程序中,是微小计算独立,还是整体计算集成。如果是微小计算独立,自然可以满负荷。
作者: mooncocoon    时间: 2011-9-1 19:10
largewc 发表于 2011-9-1 19:04
楼主的思路是正确的,这个东西是早就存在的,楼主的方案也是很接近现在cpu的设计的

{sweat:]你跟楼主一个路数,都没明白问题到底出在哪里以及哪个层面上。
用瑞士军刀切原子核,就是楼主想做的事情
作者: largewc    时间: 2011-9-1 19:14
mooncocoon 发表于 2011-9-1 19:10
你跟楼主一个路数,都没明白问题到底出在哪里以及哪个层面上。
用瑞士军刀切原子核,就是楼主想 ...

那你说具体一些,我想听听?
作者: largewc    时间: 2011-9-1 19:21
cpu的多管道本质就是多核,多运算管道,只是没有独立的寄存器而已,奔腾一就是依赖这个东西傲视群雄的。
作者: tianle130    时间: 2011-9-1 19:22
卧槽火了,不必为了任务管理器那个图表纠结吧,在有HT的情况下,这个可是很好玩的哦。
任务管理器显示是两个50%,就是两个逻辑核心分工干了一半?显然这只是绘图方式问题,并不是什么厂家限制之类,WINDOWS只是告诉你CPU的大概负载,而不是每个逻辑核心的具体负载。正如你永远达不到绝对的满负荷一样,那样的话你会彻底卡死。。。
作者: mooncocoon    时间: 2011-9-1 19:23
本帖最后由 mooncocoon 于 2011-9-1 19:26 编辑
largewc 发表于 2011-9-1 19:14
那你说具体一些,我想听听?


任务的无损拆解和网格化。

想要明白我下面在说什么,请先自行股沟败毒上面这个简单的黑字,都给了路了还要做伸手党,而且相隔不到10楼却需要第二次强调这个,真囧……

对绝大部分单任务的无损拆解就像切割原子核,虽然并不是不可能,但需要天量的边际条件和辅助数学过程来保证回溯以及结果组合的正确性。
而你俩现在要干的事情,就是把这种单任务用4,5行不知所云的语句分割开来。

我在说得直白点,你想让很多个运算器一起计算“1+1=?”,然后却不考虑或者说不知道这个任务需要以及怎么拆分成很多个能够回溯同时能够组合结果的过程。


现代处理器的多线程并行处理,针对的是多个并行的不可拆分的单任务的并行执行,跟楼主所说的东西根本就没在一个层面上。而superpi所使用的这么典型的不可拆分算法,就这么被他给凌迟了……
作者: inSeek    时间: 2011-9-1 19:28
whhwhhwhh 发表于 2011-8-31 23:15
其实还是可以把单线程变多线程的,当有核 心没事做时, 可以假设前一步得到了某一个结果,再按这个结果进行下 ...

这类分支论断的事情只有向GPU这类有巨型并行计算资源的时候才可能(目前应该只有Fermi可以)。CPU不可能那么来,太浪费资源了。
作者: cellwing    时间: 2011-9-1 21:04
提示: 作者被禁止或删除 内容自动屏蔽
作者: kuge801    时间: 2011-9-1 21:24
提示: 作者被禁止或删除 内容自动屏蔽
作者: kuge801    时间: 2011-9-1 21:25
提示: 作者被禁止或删除 内容自动屏蔽
作者: hunguqi    时间: 2011-9-1 22:06
kuge801 发表于 2011-9-1 21:25
主要是楼主的标题嚣张了点

{titter:]你的头像把楼主我吸引了回来,
作者: largewc    时间: 2011-9-2 02:13
本帖最后由 largewc 于 2011-9-2 04:25 编辑
mooncocoon 发表于 2011-9-1 19:23
任务的无损拆解和网格化。

想要明白我下面在说什么,请先自行股沟败毒上面这个简单的黑字,都给了路 ...


I服了U,我说了那么多,看来你完全没看懂啊,你以为单核CPU就是在单个线程每个周期顺序执行一个指令啊,从奔腾一开始,CPU就可以在一个线程内,一个周期运行两条指令,这个其实就是相当于双核了,这是基于单核顺序执行外,额外增加了一套计算单元,明白了吗。

现在讲的单核,基本上指的是已经经过若干路计算单元加速过的单核,跟楼主提出的原理是一样的。

比如说
mov eax,0
mov ebx,0
add eax,ebx

mov eax
mov ebx
在奔腾一上,可以同时执行,因为他们互相没有关联。


由于有大量的上下文关联存在,所以双运算单元加速单线程,并不能按照倍数关系,所以大概双计算单元可以加速60%-80%附近,这也是为什么当初奔腾一 133可以顶上其他家200的,因为实际上,它相当于两个133运算单元在加速单个线程程序,大概相当于200m附近了。


现在之所以不再增加计算单元,而改成做多核,实际上是无奈的,因为超过四套运算单元后,同时计算四个,之间的相关性大大提高,反而没有性能提升,所以奔四实际上有四套运算单元,但是加速单线程,实际上只允许三条同时运行,关闭了一条。除了使用SIMD以后,可以用满计算单元,或者利用超线程来用满所有运算单元。

但是你不能否认,楼主的设想没问题的,多套运算单元确实可以加速单线程程序。


不知道你是做什么的,我是游戏这个行业的,工作了十多年了,经历过汇编级别优化,对CPU运算的一些系列略有了解。

多核是因为多运算单元已经到瓶颈,在增加计算单元,已经不能加速单线程程序以后,才补充了完整的寄存器和内存控制单元,做成多核并行运行多任务的,并不是不能加速单任务,我说的够明白了吧。
作者: largewc    时间: 2011-9-2 02:24
Super PI你要是想真正测试单计算单元的效率,只能找一个奔腾一之前的CPU,同频率跟奔腾一测试一下,就很明白了,奔腾一的双计算单元加速单任务不是废柴,所有的程序都能被这种结构加速。
作者: largewc    时间: 2011-9-2 02:29
正因为单核CPU(因为每个计算单元不存在独立寄存器,所以不能因为独立运算单元而称之为多核,但是原理上已经无限接近了),存在多路计算,才出现了后面的3D Now,MMX,SSE之类,就是用专门的指令,可以100%用满多计算单元的CPU效能。




欢迎光临 POPPUR爱换 (https://we.poppur.com/) Powered by Discuz! X3.4