如何编写逻辑来安排我需要的任务:
len(task_fifo)
在处理器组上安排任务pg
,pg
最多有p
处理器1 <= num_of_processors <= p
处理器。- 保留
pg.reserve(num_of_slots, num_of_processors)
进程组需要知道槽数和要保留的处理器数量 - 但政策状态
n <= num_of_slots <= m
可能一次保留。 - 1 个插槽运行 1 个任务
如何确定处理器的插槽和数量想确定我应该保留的队列长度我想知道你将如何编码这个逻辑,使用数学来确定结果。
例如,如果我有task_fifo
457 个任务,最多可以安排在 8 个处理器上,但每个处理器最少需要 100 个任务,最多需要 1000 个任务,那么,我会pg.reserve(115, 4)
添加虚拟任务以使其与“NOOP”保持一致。
知道这一点,我可以将其安排为
# min_slots = 100
# max_slots = 1000
# max_processors = 8
# Since 457 tasks cant be divided equally on 4 processors,
# 114 * 4 = 456 < 457 (is less)
# 115 * 4 = 460 > 457 (is more, but can add NOOPs)
reservation = pg.reserve(115, 4)
# So I add 3 'NOOP' tasks in to task fifo
task_fifo.append("NOOP")
task_fifo.append("NOOP")
task_fifo.append("NOOP")
reservation.run(task_fifo)
| task | 115 | 115 | 115 | 115 | 0 | 0 | 0 | 0 |
--------------------------------------------------------
| proc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
如果任务长度更长,max_slots*max_processors
那么我将需要运行具有多个保留的任务。所以要安排 where8473
任务:
reservation1 = pg.reserve(1000,8)
reservation2 = pg.reserve(119,4)
tasks_fifo + ["NOOP"]*3
reservation1.run(tasks_fifo)
reservation2.run(tasks_fifo)
reservation1:
| task | 1000 | 1000 | 1000 | 1000 | 1000 | 1000 | 1000 | 1000 |
----------------------------------------------------------------
| proc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
reservation2:
| task | 119 | 119 | 119 | 119 | 0 | 0 | 0 | 0 |
--------------------------------------------------------
| proc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
我想确定我应该进行的预订数量以及它们的插槽和处理器数量。
这是很大的帮助!