1

我的主要目标是在 xeon phi 协处理器中插入 1ms 的延迟,但我的结果却有大约 9ms 的差异。因此,我尝试使用至强主机和 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 Nano 睡眠成功 0.000155

在至强 phi 协处理器中运行:

./nsleep_mic Nano 睡眠成功 0.009998

所以我在 xeon phi 中得到了几乎 90% 的错误等待。

  1. 为什么会发生这种错误的等待?
  2. 如果我想要 1ms 的睡眠时间如何解决?
4

1 回答 1

2

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

请查看 dmesg 和当前时钟源,以确保您使用的是 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

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

于 2013-10-19T02:22:18.903 回答