GridSim中的例子一:如何创建一个网格资源

来源:百度文库 编辑:神马文学网 时间:2024/04/25 21:21:39
/*
* 步骤
* 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