我正在分析在多个处理器上运行的并行算法。
但这很简单,所以我需要模拟长时间运行来分析有效加速。
sleep()/ usleep()不是一个选项。我需要保持CPU忙,以便在其他从属设备休眠的时候,从属程序无法工作。这里的加速是不正确的。
长空for循环是一个选项。但我也想明确设定操作时间。
有没有办法将这两者结合起来或使用别的东西来获得时间固定的长时间操作?
答案 0 :(得分:4)
在进入循环之前调用gettimeofday
并记住时间。在循环内,连续调用gettimeofday
并计算当前时间和开头之间的差异。当差异足够大时,就要摆脱循环。
本质上是这样的:
struct timeval tv_begin, tv_current;
gettimeofday(&tv_begin, NULL);
for (;;) {
gettimeofday(&tv_current, NULL);
unsigned long long diff =
(tv_current.tv_sec * 1000000 + tv_current.tv_usec) -
(tv_begin.tv_sec * 1000000 + tv_begin.tv_usec);
if (diff > TIMEOUT)
break;
}
答案 1 :(得分:2)
getitimer()/setitimer()。设置定时器,让SIGALRM的信号处理程序设置一个开关,让你摆脱循环。在定时器关闭之前,循环执行它所做的 - 或者可能没有任何操作。