As is known to all……咳咳
众所周知,一个workflow就是一张有向图,以Epigenomics为例,它大概长这样:

图.1 Epigenomics_46,实际有47个任务
工作流的形状就像好多棵交错纠缠的树,构成森林……哦不还是 有向图呀;
其中可能存在多个入度为零的节点,我们暂且称之为“根节点”。
以上图为例,有两个“根节点”,我们可以用一句话很方便的找出它们:


至此,已知task_i->vm_solution[i],接下来就是仿真调度。具体安排:
每台vm上的时间片(Event)将由一个一个的任务拼接连成;
其中,每一个任务都有一个就绪时间readyTime,一个执行时间timeCost,一个完成时间finishTime(放到实际就是actReadyTime、actFinishTime);
如果父任务pre与子任务suc不在同一台vm上执行,则它们之间还存在一个传递时间transferTime;
一台vm的完成时间由它上面拥有最大完成时间的任务决定;
整体的makespan,即这些vm里的最大finishTime决定。
好了,可以安排时间片了。那怎么来精确求出各个任务的实际就绪时间、完成时间呢?
可以从这些根节点出发,按DFS来遍历它们。自己写了一个适用于task_i->vm_solution[i]的代码:
private double max(double a, double b) {
return a > b ? a

本文探讨了如何使用深度优先搜索(DFS)在WorkflowSim中进行工作流调度模拟。通过分析有向图结构的工作流,从入度为零的节点(根节点)开始,详细阐述了任务的时间片安排、就绪时间、执行时间、完成时间以及传递时间的计算。文中还提供了一段自编的DFS代码片段,用于确定任务的实际时间参数,并指出在遍历过程中可轻松获取整体最大完成时间。
最低0.47元/天 解锁文章
654

被折叠的 条评论
为什么被折叠?



