由simplescalr preditor困惑

时间:2015-08-18 09:35:40

标签: simulator computer-architecture branch-prediction

现在我正在学习简单的源代码。但我对预测模块感到困惑。它是关于bimod预测器。 这是初始化:

x[!grepl('something', x)]

这里我们使用PHT表:

case BPred2bit: 
  if (!l1size || (l1size & (l1size-1)) != 0) 
      fatal("2bit table size, `%d', must be non-zero and a power of two",  
      l1size); 
  pred_dir->config.bimod.size = l1size; 
  if (!(pred_dir->config.bimod.table = 
    calloc(l1size, sizeof(unsigned char)))) 
    fatal("cannot allocate 2bit storage"); 
  /* initialize counters to weakly this-or-that */ 
  flipflop = 1; 
  for (cnt = 0; cnt < l1size; cnt++) 
  { 
    pred_dir->config.bimod.table[cnt] = flipflop; 
    flipflop = 3 - flipflop; 
  } 
  break; 

但令我惊讶的是PHT故事永远不会更新!我发现代码无处可去,在pred_update()函数中也没有! 你能告诉我原因吗?剂量简单使用的机制是什么?

1 个答案:

答案 0 :(得分:1)

但它已更新。在bpred_update()中,您可以找到此代码

  if (dir_update_ptr->pdir1)
    {
      if (taken)
    {
      if (*dir_update_ptr->pdir1 < 3)
        ++*dir_update_ptr->pdir1;
    }
      else
    { /* not taken */
      if (*dir_update_ptr->pdir1 > 0)
        --*dir_update_ptr->pdir1;
    }
    }

表的条目可以递增或递减,具体取决于分支的结果。该特定条目来自您问题中的第二个代码段。它只是指向2位计数器的指针。