用C(蒙特卡罗技术)限制程序的执行时间

时间:2011-01-16 13:51:34

标签: c execution-time montecarlo

我正在开发一个没有确定的算法来解决使用C语言的项目。我正在使用蒙特卡罗技术来解决这个问题。我希望将随机猜测的数量限制为用户指定的执行时间。 这意味着我想充分利用用户定义的执行时间限制(作为命令行参数)来进行尽可能多的随机迭代。 到目前为止,我可以检查循环条件的执行时间吗?

for(trials=0;execution_time<specified_time;trials++)

如果是这样,我该怎么办? 或者,如果还有其他方式,欢迎。谢谢。

P.S。我正在使用代码块10.05进行编码和GNU编译。

3 个答案:

答案 0 :(得分:2)

您可以尝试标准功能时钟(),它返回自程序启动以来内部时钟周期数。有关详细信息,请参阅该函数的文档。

答案 1 :(得分:2)

是的,如果您的计算机上有足够细粒度的时钟(而且确实如此)。

  1. 记录模拟开始的时间。

  2. 对于循环周围的每次旅行,找到当前时间以及开始时间和现在之间的相应增量。如果该值大于限制,请停止。

  3. 如果您使用time()的一秒钟粒度,请注意量化效果。如果用户说'1秒',如果你的程序在T = N.999s开始并且你停在T =(N + 1).001s,那么你最终可能会运行一小段时间。任何量子都可以产生相同的效果,但由于微秒和纳秒是正常的亚秒级粒度,量子的大小不再是一个问题。

    我所知道的高分辨率时钟功能是:

    • clock_gettime() - POSIX(纳秒)
    • gettimeofday() - POSIX(微秒)
    • times() - Unix System V(每秒CLK_TCK)
    • ftime() - 古代Unix(毫秒)
    • clock() - ISO C - (CLOCKS_PER_SEC)
    • time() - ISO C - (second)

答案 2 :(得分:0)

感谢大家的意见。一个简单的两行代码为我完成了这项工作:

time_t start_time = time(NULL);
while (((int)(time(NULL) - start_time)) < execution_time)
{
   /* ...... */
}