至强phi计时器分辨率

时间:2013-10-17 21:07:28

标签: timer sleep intel-mic nuxeo xeon-phi

我的主要目标是在xeon phi协处理器中插入1ms延迟,但我的结果差异大约为9ms。因此,我尝试使用xeon主机和phi协处理器来查找定时器分辨率。我执行了以下代码:

    #include <stdio.h>
    #include <time.h>
    #include <sys/time.h>
    int main()
    {
      struct timespec tim, tim2;
      tim.tv_sec = 0;
      tim.tv_nsec = 100000;
      struct timeval tv;
      double temp_2=0;
      int i =0;
      for ( i=0;i<1000;i++)
       {
         gettimeofday(&tv, NULL);
         double t1=tv.tv_sec+(tv.tv_usec/1000000.0);

         nanosleep(&tim , NULL);

         gettimeofday(&tv, NULL);
         double t2=tv.tv_sec+(tv.tv_usec/1000000.0);

         temp_2+=(t2-t1);
       }
      printf("Nano sleep successfull %lf\n",temp_2/1000);

     return 0;
    } 

在主机中运行以下程序:

  

./ a.out的   纳米睡眠成功0.000155

在xeon phi协处理器中运行:

  

./ nsleep_mic   纳米睡眠成功0.009998

soo我在xeon phi等待差不多90%的错误。

  1. 为什么会发生这种错误的等待?
  2. 如果我希望睡眠时间为1毫秒,如何解决?

1 个答案:

答案 0 :(得分:2)

此处没有足够的信息来完全回答您的问题 - 请添加MPSS的版本和当前的clockource设置;然而,...

请查看dmesg和当前的clocksource,以确保您使用的是TSC并且没有遇到任何问题。另外,请阅读Ravi Murty的这篇优秀文章,以帮助您了解您可能使用Xeon Phi时钟源遇到的一些问题:

http://software.intel.com/en-us/blogs/2013/06/20/eliminate-the-dreaded-clocksource-is-unstable-message-switch-to-tsc-for-a-stable

我建议您将当前的clocksource设置为micetc,每当您的代码(或代表您的内核)想要读取时间时,读取设备的mmio空间会产生额外的开销。切换到TSC以避免这种情况。较新版本的MPSS应设置为TSC作为默认时钟源,但请阅读Ravi的文章并确保您的设备设置正确。