我的主要目标是在 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% 的错误等待。
- 为什么会发生这种错误的等待?
- 如果我想要 1ms 的睡眠时间如何解决?