POPPUR爱换

 找回密码
 注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

搜索
查看: 5497|回复: 56
打印 上一主题 下一主题

[纯技术]流水线长度的测试 可能还是不可能?

[复制链接]
跳转到指定楼层
1#
发表于 2006-12-17 22:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以前用一个含有大量不可预测分支汇编程序测试,其利用分支错误开销的原理,可以显示相同体系结构的长流水线的U,会有更高消耗。 也由此可以确定流水线长度级别。

以相同原理,但是以酷睿2的14级流水线为基准, 来测试其它U的大致相当的流水线长度。 是什么结果呢? 准确性如何?

纯粹技术探索,请各位无阵营之见,踊跃测试。 注意如果出现结果特不正常,估计是某双核,则因设置在单核模式下测试,但好像桌面双核U一般没有遇上问题。

源代码如下可供编译(为便于大众测试,也有编译好的测试程序), 如果怕exe有问题,能不能请管理员帮忙编译出exe,给各位使用。

请各位有P3,PM,CM,Yonah,P4C,P4E,K7,K8等等,都来给出测试结果。   (先预测下:90%的精度还是有的)

[ 本帖最后由 hopetoknow 于 2006-12-17 22:36 编辑 ]

本帖子中包含更多资源

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

x
2#
 楼主| 发表于 2006-12-17 22:38 | 只看该作者
先给个酷睿2的结果,示范一下
Ratio=14.02
Pipeline=14 stages
回复 支持 反对

使用道具 举报

3#
 楼主| 发表于 2006-12-17 22:41 | 只看该作者
//源代码
#include "stdio.h"
#include "time.h"

void main(void)
{
        unsigned int r_eax0, r_edx0, r_eax2, r_edx2, clk;
        double v0, v2;

        printf("Pipeline test starts, please waiting for ......n");

        _asm{
                rdtsc
                mov r_eax0,eax
                mov r_edx0,edx
        }

        clk = clock();
        _asm
        {       
                mov ecx,2*970000
                mov edi,211309892;
                mov edx,738904833;
                mov eax,23459;
                mov ebx,586909;
L1:

L1a:
                sub eax,ebx;               
                xor edx,eax;
                jpe L1a;

                add edi,edx;
                xor ebx,edi;
                jpe L1a;

L2a:
                sub eax,ebx;               
                xor edx,eax;
                jpe L2a;

                add edi,edx;
                xor ebx,edi;
                jpe L1a;

L3a:
                sub eax,ebx;               
                xor edx,eax;
                jpe L3a;

                add edi,edx;
                xor ebx,edi;
                jpe L1a;

L4a:
                sub eax,ebx;               
                xor edx,eax;
                jpe L4a;

                add edi,edx;
                xor ebx,edi;
                jpe L1a;

L5a:
                sub eax,ebx;               
                xor edx,eax;
                jpe L5a;

                add edi,edx;
                xor ebx,edi;
                jpe L1a;

L6a:
                sub eax,ebx;               
                xor edx,eax;
                jpe L6a;

                add edi,edx;
                xor ebx,edi;
                jpe L1a;

                dec ecx;
                jnz L1;
        }
        clk=(clock()-clk);

        _asm{
                rdtsc
                mov r_eax2,eax
                mov r_edx2,edx
        }

        v0 = (double) r_eax0 + ((double) r_edx0 ) * 4294967296.0;
        v2 = (double) r_eax2 + ((double) r_edx2 ) * 4294967296.0;
       

        printf("Time = %5.3f s, %gMHz, Ratio = %gnn",(float)(clk)/1000.0,
                (float)(v2 - v0) /(float)(clk)/1000.0,
                (v2 - v0)/8520000000.0 * 14.0);

        printf("Pipeline = %.2g stagesnTest ends. Press ENTER to exit.", (v2 - v0)/8520000000.0 * 14.0);
        getchar();
}
回复 支持 反对

使用道具 举报

potomac 该用户已被删除
4#
发表于 2006-12-17 22:45 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

5#
发表于 2006-12-17 23:05 | 只看该作者
原帖由 potomac 于 2006-12-17 22:45 发表
:p w00t) :lol:

老P4么?
回复 支持 反对

使用道具 举报

6#
发表于 2006-12-17 23:16 | 只看该作者
Time=3.953S.Ratio=12.963.pipeline=13
PM760
回复 支持 反对

使用道具 举报

7#
 楼主| 发表于 2006-12-17 23:18 | 只看该作者
对,可给出Ratio,这个技术意义最大了

测试时间很短,  多测几次,取最好的一次。后台程序最好也关了。
回复 支持 反对

使用道具 举报

potomac 该用户已被删除
8#
发表于 2006-12-17 23:19 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

9#
发表于 2006-12-17 23:34 | 只看该作者
Pipeline test starts, please waiting for ......
Time = 4.578 s, 1867.51MHz, Ratio = 14.0484

Pipeline = 14 stages
Test ends. Press ENTER to exit.


后台没关尽,就是把漂着Flash的IE和QQ关了。
很准确啊

不知道上边PM怎么不准呢。难道是后台程序开着造成的?
回复 支持 反对

使用道具 举报

10#
发表于 2006-12-17 23:56 | 只看该作者
如果利用Performance counter采集一下branch predict miss rate,应该能获得更准确的结果 :p
回复 支持 反对

使用道具 举报

11#
 楼主| 发表于 2006-12-17 23:56 | 只看该作者
是一种相对的对比测试。 不一定是绝对等于流水线长度。

多测几次,关后台, 取Ratio最低时的数据,就行了。
回复 支持 反对

使用道具 举报

12#
发表于 2006-12-18 00:22 | 只看该作者
我的Prescott在挂着msn和杀毒/防火墙的情况下测试出的是29。

Pipeline test starts, please waiting for ......
Time = 4.734 s, 3734.66MHz, Ratio = 29.0514

Pipeline = 29 stages
回复 支持 反对

使用道具 举报

13#
发表于 2006-12-18 00:33 | 只看该作者
................某双核

[ 本帖最后由 jaguard 于 2006-12-18 01:53 编辑 ]

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

14#
发表于 2006-12-18 00:37 | 只看该作者
崇拜这种牛人...
回复 支持 反对

使用道具 举报

15#
发表于 2006-12-18 00:49 | 只看该作者
Turion64 MT-28
-----------------------
Pipeline test starts, please waiting for ......
Time = 4.937 s, 1596.56MHz, Ratio = 12.952

Pipeline = 13 stages
Test ends. Press ENTER to exit.
回复 支持 反对

使用道具 举报

16#
发表于 2006-12-18 11:31 | 只看该作者
00年流行的经典U来也:p

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

17#
 楼主| 发表于 2006-12-18 11:32 | 只看该作者
原帖由 Prescott 于 2006-12-17 23:56 发表
如果利用Performance counter采集一下branch predict miss rate,应该能获得更准确的结果 :p

好的, Vtune过了, 各种U大约都是50.x%。 还比较均衡

程序指令构成是 简单ALU指令 66.5x%, 剩下的是Branch。大约是2:1。
一条ALU耗时1或0.5时钟,但是一个错误Branch十几以上

耗时构成:错误Branch指令、正确的Branch指令、 ALU指令
错误Branch指令耗时,占大部分。
回复 支持 反对

使用道具 举报

RacingPHT 该用户已被删除
18#
发表于 2006-12-18 12:48 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

阿蓝2代 该用户已被删除
19#
发表于 2006-12-18 13:20 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

20#
发表于 2006-12-18 13:25 | 只看该作者
PM 测成 13 级不无道理,本来就比 P3 多了 MicroOps Fusion stage
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 14:56

Powered by Discuz! X3.4

© 2001-2017 POPPUR.

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