完善薪酬激励机制:GridSim中的例子一:如何创建一个网格资源

来源:百度文库 编辑:中财网 时间:2024/05/06 12:16:42
GridSim中的例子一:如何创建一个网格资源 /*
 步骤
 * 1.初始化GridSim包  GridSim.init()
 * 2.创建一个网格资源,自己编写createGridResource()
   2.1需要创建一个MachineList对象mList去存储一个或者多个机器
   2.2一个机器包含一个或多个PEs(处理器),所以应该在创建一个机器之前
     创建一个PEList对象去存储这些PEs PEList peList1 = new PEList();
   2.3用PE(id, MIPS)创建PEs并且把这些PEs添加到PEList对象中,    
       peList1.add( new PE(0,MIPSRating) );
   2.4用Machine(id, PEList)创建一个机器,它包括机器的id以及PEs or
       CPUs列表,并且把它存储到了机器列表(MachineList mList),mList.add       ( new Machine(0, peList1) );
   2.5从步骤2.2重复,创建更多的机器
   2.6创建一个ResourceCharacteristics对象,它存储网格资源的属性:系统结
        构,操作系统,机器列表,分配策略(时间共享或者空间共享),时区和它的价        格(每个处理器单元价格)
   2.7最后,我们创建一个GridResource对象gridRes = new GridResource
        (name, baud_rate, seed, resConfig, peakLoad, offPeakLoad,        holidayLoad, Weekends, Holidays); 
 */
 具体源代码: import java.util.*;
import gridsim.*;/**
 * 这个类用三个机器创建一个网格资源,在创建任何网格实体之前,要先初始化
 */
class example1
{
    public static void main(String[] args)
    {
        System.out.println("开始一个如何创建网格资源的例子");
        try
        {
         //第一步:初始化GridSim包,在创建任何实体之前申明,我们不可能在没有
         //初始化GridSim的前提下运行网格资源,这里将会得到一个运行时间的例外
         //用户的数量也需要创建,在这个例子中,既然我们不需要创建任何用户实体
         //我们就把用户数设为0
         int num_user = 0;
         Calendar calendar = Calendar.getInstance();
         boolean trace_flag = true; //跟踪GridSim实体/活动
         //用任何统计学方法排出的文件或者处理器的名字列表
         String[] exclude_from_file = { "" };       //这两步什么意思?
         String[] exclude_from_processing = { "" };
         //记下报告文件的名字。在这个例子里面我们不需要写什么东西
         String report_name = null;
         //初始化GridSim包
         System.out.println("正准备初始化GridSim包");
         
            GridSim.init(num_user, calendar, trace_flag, exclude_from_file,
                   exclude_from_processing, report_name);  //真正意思上的初始化
               
  
         //第二步:创建一个网格资源
         GridResource gridResource = createGridResource();
         System.out.println("完成第一个例子(example1)");
         //注意:我们还不需要申明一个GridSim.startGridSimulation()
         //因为没有用户向这个资源上发送作业    
       
         catch (Exception e)
         {
          e.printStackTrace();
          System.out.println("发生的错误");
         }
    }
    /**
     * 创建一个网格资源。一个网格资源包括一个或多个机器。同样,一个机器包含一个
     *多个处理单元PEs或者说cpu。
     *


     *在这个简单的例子里,我们模拟一个网格资源,它有三个机器,其中每个机器包含一个或多个PEs
     *@返回一个GridResource对象
     */  
    private static GridResource createGridResource()
    {
     System.out.println("开始创建一个拥有三台机器的网格资源……");
     //接着是创建一个网格资源的步骤
     //1.需要创建一个MachineList对象去存储一个或者多个机器
     MachineList mList = new MachineList();
     System.out.println("创建一个机器列表");
     //2.一个机器包含一个或多个PEs,所以应该在创建一个机器之前
     //创建一个PEList对象去存储这些PEs
     PEList peList1 = new PEList();
     System.out.println("为第一个机器创建一个PE");
     //3.创建PEs并且把这些PEs添加到PEList对象中
     //在这个例子里,我们使用资源来自hpc420.hpcc.jp, AIST, Tokyo, Japan
     //注意:这些数据是从GridSim paper上得来的,第25页
     //在这个例子里,一个机器的所有的PEs拥有同样的MIPS(每秒百万条指令)速度
        int MIPSRating = 377;
        peList1.add( new PE(0,MIPSRating) );
        peList1.add( new PE(1,MIPSRating) );
        peList1.add( new PE(2,MIPSRating) );
        peList1.add( new PE(3,MIPSRating) );
        System.out.println("创建了4个具有同样MIPS速度的PEs并且把它们存储到了处理器列表");
       
        //4. 创建一个机器,它包括机器的id以及PEs or CPUs列表
        mList.add( new Machine(0, peList1) );   //第一个机器
        System.out.println("创建了第一个机器,它拥有4个处理单元,并且把它存储到了机器列表");
        //5.如果在这个例子里我们想创建更多的机器,从步骤2重复
        //如果你只想为一个网格资源创建一个机器,你就可以跳过这一步
        PEList peList2 = new PEList();
        System.out.println();
        System.out.println("为第二个机器创建一个处理单元列表");
        peList2.add( new PE(0, MIPSRating) );
        peList2.add( new PE(1, MIPSRating) );
        peList2.add( new PE(2, MIPSRating) );
        peList2.add( new PE(3, MIPSRating) );
        System.out.println("创建了4个具有同样MIPS速度的PEs并且把它们存储到了处理器列表");
        mList.add( new Machine(1, peList2) ); //第二个机器
        System.out.println("创建了第二个机器,它拥有4个处理单元,并且把它存储到了机器列表");
        PEList peList3 = new PEList();
        System.out.println("为第三个机器创建一个处理单元列表");
        peList3.add( new PE(0, MIPSRating) );
        peList3.add( new PE(1, MIPSRating) );
        System.out.println("创建了2个具有同样MIPS速度的PEs并且把它们存储到了处理器列表");
        mList.add( new Machine(2, peList3) ); //第三个机器
        System.out.println("创建了第三个机器,它拥有2个处理单元,并且把它存储到了机器列表");
        //6.创建一个ResourceCharacteristics对象,它存储网格资源的属性:系统结构,操作系统,
        //机器列表,分配策略(时间共享或者空间共享),时区和它的价格(每个处理器单元价格)
        String arch = "Sun Ultra";  //系统结构
        String os = "Solaris";      //操作系统
        double time_zone = 9.0;     //资源所在位置的时区
        double cost = 3.0;          //使用资源的价格
        ResourceCharacteristics resConfig = new ResourceCharacteristics(
                arch, os, mList, ResourceCharacteristics.TIME_SHARED,
                time_zone, cost);
        System.out.println();
        System.out.println("创建资源的属性和存储机器的列表");
        //7.最后,我们需要创建一个GridResource对象
        String name = "Resource_0";  //资源的名字
        double baud_rate = 100.0;     //通信速度
        long seed = 11L*13*17*19*23+1; //不知道什么东东
        double peakLoad = 0.0;       //在高峰时期的负载
        double offPeakLoad = 0.0;    //非高峰时期的负载
        double holidayLoad = 0.0;    //假期的负载
        //在每个周末加两天,这样网格资源也就是一个星期七天了
        LinkedList Weekends = new LinkedList();
        Weekends.add( new Integer(Calendar.SATURDAY));
        Weekends.add( new Integer(Calendar.SUNDAY));
        //还可以加上假期,在这个例子里面没有
        LinkedList Holidays = new LinkedList();
        GridResource gridRes = null;
        try
        {
            gridRes = new GridResource(name, baud_rate, seed, resConfig,
             peakLoad, offPeakLoad, holidayLoad, Weekends, Holidays); 
        }
        catch (Exception e){
         e.printStackTrace();
        }
        System.out.println("最后创建一个网格资源并且存储这个网格资源的属性"); 
        return gridRes;      
      }
   
}//end class