作业调度c ++模拟,需要建议/建议

时间:2013-07-20 10:18:29

标签: c++ algorithm simulation job-scheduling

我已经开始创建一个c ++程序来模拟像FiFo这样的作业调度算法。我还远未完成,但现在我的主要问题是如何在我的程序中创建时间流。

这是我目前的主要代码:

for (i = 1; i < 10; i++)
{
  Time1 = clock();
  //this is the alogrithm to generate poisson arrival sequence
  do{   
    k = k + 1;
    // Generate a random number between 0 and 1
    // return a uniform number in [0,1].
    double u = rand() / (double)RAND_MAX;   
    p = p * u;
  }while (p > L);
  A[i] = k-1;   

  Time2 = clock();  
  DT = Time2 -Time1;
  TotalTime=TotalTime + DT;
  cout << "  Total time  " << TotalTime 
       << "  table :" << A[i] 
       << "  Arrival Time  "            
       << TotalTime <<endl ; 

我的主要问题是: 我用时钟测量单位的时间是从clock()函数输出的时间单位是“怪异”数字。我应该使用其他功能吗?

10次迭代的结果

  Total time  6.19522e+032  table :28  Arrival Time  6.19522e+032
  Total time  6.19522e+032  table :29  Arrival Time  6.19522e+032
  Total time  6.19522e+032  table :30  Arrival Time  6.19522e+032
  Total time  6.19522e+032  table :31  Arrival Time  6.19522e+032
  Total time  6.19522e+032  table :32  Arrival Time  6.19522e+032
  Total time  6.19522e+032  table :33  Arrival Time  6.19522e+032
  Total time  6.19522e+032  table :34  Arrival Time  6.19522e+032
  Total time  6.19522e+032  table :35  Arrival Time  6.19522e+032
  Total time  6.19522e+032  table :36  Arrival Time  6.19522e+032

PS :如果您想在自己的计算机上运行代码,我可以提供其余的代码。

2 个答案:

答案 0 :(得分:1)

作为“离散事件”模拟,作业调度将变得更加容易。查看此tutorial paper以了解如何构建此类模型。本文中的框架是用Java编写的(并且也在Ruby中实现),但是可以直接移植到C ++。

答案 1 :(得分:0)

所以第一点是clock()返回一个clock_t变量,所以虽然我认为它不会真的有太大不同,但是让Time1和Time2属于clock_t类型。至于主要问题和评论,看起来你只是忘了将TotalTime初始化为零,这可以解释巨大的数字。

如果输出全为零,那么循环可能运行得非常快,但您也可以使用setprecision增加输出的小数位数。运行以下代码以查看差异,cout.setprecision(int value)将确定要显示的小数位数。

#include <iostream>

int main() {
    double d = 1.0/3.0;

    std::cout.precision(15);

    std::cout << d << std::endl;

    std::cout.precision(3);

    std::cout << d;

    return 0;
}