必要なタスクをスケジュールするロジックを作成する方法:
- プロセッサ グループで
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
、最大 8 個のプロセッサでスケジュールできる 457 個のタスクがあるが、各プロセッサが最小で 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 |
予約する必要がある予約の数と、そのスロットとプロセッサの数を確認したいと考えています。
大変助かります!