首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 关于Vtune测量branch misprediction的问题 [已结贴,结贴人:haojn]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-08 16:55:49 楼主
    作归并排序的时候想测量一下分支预测失败对归并时性能的影响,于是在vtune中增加branch misprediction performance impact。测量后,该数值居然为0,但理论上讲因为热点部分的分支都是数据相关的,分支预测不可能有这么高。

    另外,我特地写了个绝对是数据相关的分支程序:
    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>

    #define N 10000000

    int aa[N];

    int main( void )
    {
      int i;
      srand( (unsigned)time( NULL ) );
      for (i=0;i <N;i++){
      int a,b;
      a=rand();
      b=rand();
      if (a>b){
      aa[i]=a;
      }
      else{
      aa[i]=b;
      }
      }
    }
    因为都是随机数据,我认为分支预测错误率在if语句块50%左右才对,但测量的结果branch misprediction performance impact只有0.77%

    是vtune哪里设置错了么?如何才能正确地观察到分支预测错误率?

    谢谢!
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-08 22:24:451楼 得分:0
    haojn 你做的归并 能否超越TBB的parallel_sort?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-08 22:44:112楼 得分:0
    我现在还没做并行呢

    单线程的用23.35秒,N=2^27,全随机数据(MKL,标准VSL_BRNG_MCG31,UNIFORM,初始种子12345),Q6600@2.4G

    parallel_sort我这里用6.85秒,其实就是多线程的qsort
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-09 09:32:303楼 得分:10
    首先,样本为零的问题-主要是“事件”发生的次数不够,可用VTune的"Calibration"设置去调节"Sample After" Value,或手工改。

    if (a>b){
      aa[i]=a;
    // 实体不够,二个分支都在相同的Cache line.
      }
      else{
      aa[i]=b;
      }

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-09 10:49:054楼 得分:0
    谢谢!

    目前是calibration based on selected properties
    这个calibration主要的作用是什么呢?

    RESOURCE_STALLS.BR_MISS_CLEAR的sample after是2299,有什么含意么?


    程序改为:
    int a;

    int aa[N];
    int bb[N];

    int b;

    int main( void )
    {
      int i;
      srand( (unsigned)time( NULL ) );
      for (i=0;i <N;i++){
      a=rand();
      b=rand();
      if (a>b){
      aa[i]=a;
      }
      else{
      bb[i]=b;
      }
      }
    }
    这样源和目的操作数都不在同一cache line,如果分支预测错误应该有更大的排空周期,但测得的结果还是只有0.1%
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-09 16:10:165楼 得分:0
    "calibration" 是VTune帮助你测量多少次事件发生后产生一个中断,收集一个样本。

    RESOURCE_STALLS.BR_MISS_CLEAR的sample after是2299, 即是- 分支误测一起的阻塞发生2299次后收集一个样本.

    设置"Sample After" of RESOURCE_STALLS.BR_MISS_CLEAR = 2000
    设置"Sample After" of BR_INST_RETIRED.MISPRED = 2000

    Process         RESOURCE_STALLS.BR_MISS_CLEAR samples BR_INST_RETIRED.MISPRED samples Branch Misprediction Performance Impact

    SimpleTest.exe 525                                 2588                         0.07%

    可见,分支误测确实发生,但影响不大。

    把你的程序改为:
    int a;

    int aa[N];
    int bb[N];

    int foo(int);
    int _tmain(int argc, _TCHAR* argv[])
    {
      int i;
     
      srand( (unsigned)time( NULL ) );

      for (i=0;i <N;i++){
      a=rand();
      b=rand();
      if (a>b){
      aa[i]=a;
      foo(a);
      }
      else{
      bb[i]=b;
      }
      }

      return 0;
    }

    int foo(int a)
    {
      return (++a);
    }

    结果RESOURCE_STALLS.BR_MISS_CLEAR Samples 加倍了, 但 Branch Misprediction Performance Impact 影响不明显。
    Process RESOURCE_STALLS.BR_MISS_CLEAR samples BR_INST_RETIRED.MISPRED samples Branch Misprediction Performance Impact

    SimpleTest.exe 1014                                 3380                         0.10%

    为何?主要是Intel 架构有很多branch target buffer...你的程序不够复杂,试试switch_case加多跳转。


    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-09 23:13:516楼 得分:0
    谢谢!基本上明白了

    有没有对于Core 2微架构详细的技术资料呢?Optimization Reference Manual中的介绍太笼统了

    有几个新问题,关于Core 2架构:
    1、Cache有没有分sub-block?
    2、目前的分支预测用的是什么算法?
    3、L1 Cache的一致性协议用的是写无效么?在Quad中,L2的一致性是通过北桥来实现的?协议是什么?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-10 00:00:347楼 得分:0
    引用 6 楼 haojn 的回复:
    谢谢!基本上明白了

    有没有对于Core 2微架构详细的技术资料呢?Optimization Reference Manual中的介绍太笼统了



    很多问题在 Intel® 64 and IA-32 Architectures Software Developer's Manuals 中有介绍, 看看Volume 1: Basic Architecture和Volume 3A: System Programming Guide, 这里下载PDF文档: http://www.intel.com/products/processor/manuals/index.htm


    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-10 10:48:038楼 得分:0
    谢谢!Software Developer's Manuals我也看过,里面关于架构的介绍同样很少。我希望的是一些更为学术的数据,类似于Computer Architecture,A Quantitative Approach中关于NetBurst的内容
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-11 00:40:599楼 得分:10
    引用 8 楼 haojn 的回复:
    谢谢!Software Developer's Manuals我也看过,里面关于架构的介绍同样很少。我希望的是一些更为学术的数据,类似于Computer Architecture,A Quantitative Approach中关于NetBurst的内容


    这几个帖子已经介绍的比较详细了

    Intel Core 微架构全面解析: http://www.ocer.net/article/a_show.php?id=3675

    Intel Core 微架构 vs. AMD K8 微架构 http://www.ocer.net/article/a_show.php?id=3954

    Intel Core vs. AMD K8 : CPU架构分析 http://www.highdiy.com/html/cpu/eva/223.shtml

    Intel Core架构再解析 http://www.highdiy.com/html/cpu/eva/279.shtml
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • beblue
    • 等级:
    发表于:2008-05-12 08:35:0410楼 得分:0
    我顶一个
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-14 12:28:1411楼 得分:0
    ding
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    世纪乐知(北京)网络技术有限公司 版权所有 京 ICP 证 020026 号
    Copyright © 2000-2007, CSDN.NET, All Rights Reserved