我的主要目标是在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%的错误。
答案 0 :(得分:2)
此处没有足够的信息来完全回答您的问题 - 请添加MPSS的版本和当前的clockource设置;然而,...
请查看dmesg和当前的clocksource,以确保您使用的是TSC并且没有遇到任何问题。另外,请阅读Ravi Murty的这篇优秀文章,以帮助您了解您可能使用Xeon Phi时钟源遇到的一些问题:
我建议您将当前的clocksource设置为micetc,每当您的代码(或代表您的内核)想要读取时间时,读取设备的mmio空间会产生额外的开销。切换到TSC以避免这种情况。较新版本的MPSS应设置为TSC作为默认时钟源,但请阅读Ravi的文章并确保您的设备设置正确。