为什么在进行内存登山测试时需要预热缓存

时间:2019-05-07 07:28:34

标签: performance-testing

为什么我们需要在吞吐量测试之前预热缓存以及如何进行。数据集是否足够大,是否预热缓存没有意义。 举个例子,为什么CSAPP预热中的代码mountain.c会缓存两次。一个在真实测试部分之前的主循环中,另一个在真实测试部分中。 整个代码可以从http://csapp.cs.cmu.edu/3e/code.html

下载

在主循环中,对缓存进行一次预热,这是测试方法


  test(elems, stride);                     /* Warm up the cache */       //line:mem:warmup
    cycles = fcyc2(test, elems, stride, 0);  /* Call test(elems,stride) */ //line:mem:fcyc
    return (size / stride) / (cycles / Mhz); /* Convert cycles to MB/s */  //line:mem:bwcompute
}

在fcyc2的实现中,缓存再次预热

if (compensate) {
    do {
      double cyc;
      if (clear_cache)
    clear();
      f(param1, param2);   /* warm cache */
      start_comp_counter();
      f(param1, param2);
      cyc = get_comp_counter();
      add_sample(cyc, k);
    } while (!has_converged(k, epsilon, maxsamples) && samplecount < maxsamples);
  } else {
    do {
      double cyc;
      if (clear_cache)
    clear();
      f(param1, param2); /* warm cache */
      start_counter();
      f(param1, param2);
      cyc = get_counter();
      add_sample(cyc, k);
    } while (!has_converged(k, epsilon, maxsamples) && samplecount < maxsamples);
  }

0 个答案:

没有答案