Hardprob/Minimum Preemptive Scheduling With Set-Up Times — различия между версиями

Материал из DISCOPAL
Перейти к: навигация, поиск
(Массовая правка: замена PCRE \\le\s на ≤)
 
(не показано 5 промежуточных версий этого же участника)
Строка 1: Строка 1:
 
<!-- start --><!-- {{svg-image-for-hard-problem|{{PAGENAME}}}} -->
 
<!-- start --><!-- {{svg-image-for-hard-problem|{{PAGENAME}}}} -->
 
* Набор компиляторов <em>C</em>, набор задач <em>T</em>, <em>m</em> процессоров, длительности задач <m>l(t)∈  Z^+</m>, нужный для задачи компилятор <m>c(t)∈  C</m>, время запуска-настройки для каждого компилятора <m>s(c)∈  Z^+</m>.
 
* Набор компиляторов <em>C</em>, набор задач <em>T</em>, <em>m</em> процессоров, длительности задач <m>l(t)∈  Z^+</m>, нужный для задачи компилятор <m>c(t)∈  C</m>, время запуска-настройки для каждого компилятора <m>s(c)∈  Z^+</m>.
* Найти <em>m</em>-процессорное [https://ru.wikipedia.org/wiki/%D0%92%D1%8B%D1%82%D0%B5%D1%81%D0%BD%D1%8F%D1%8E%D1%89%D0%B0%D1%8F_%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%BD%D0%BE%D1%81%D1%82%D1%8C вытесняющее расписание] <em>T</em>, т.е. для каждой для каждой задачи <em>t ∈ T</em>, разбиение <em>t</em> на какое-то количество подзадач <m>t_1, \ldots, t_k</m>, такое что  
+
* Найти <em>m</em>-процессорное [https://ru.wikipedia.org/wiki/%D0%92%D1%8B%D1%82%D0%B5%D1%81%D0%BD%D1%8F%D1%8E%D1%89%D0%B0%D1%8F_%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%BD%D0%BE%D1%81%D1%82%D1%8C вытесняющее расписание] <em>T</em>, т.е. для каждой для каждой задачи <em>t ∈ T</em>, разбиение <em>t</em> на какое-то количество подзадач <em>t<sub>1</sub>, , t<sub>k</sub></em>, такое что  
 
** <m>\sum_{i=1}^k l(t_i) = l(t)</m>
 
** <m>\sum_{i=1}^k l(t_i) = l(t)</m>
** и есть некоторое назначение <m>\sigma = (\sigma_1, \sigma_2)</m>, которое назначает каждой подзадаче <m>t_i</m> пару неотрицательных целых <m>(\sigma_1(t_i), \sigma_2(t_i))</m>, таких, что  
+
** и есть некоторое назначение <m>σ = (σ_1, σ_2)</m>, которое назначает каждой подзадаче <em>t<sub>i</sub></em> пару неотрицательных целых <m>(σ_1(t_i), σ_2(t_i))</m>, таких, что  
*** <m>1 ≤\sigma_1(t_i) ≤m</m>
+
*** <m>1 ≤σ_1(t_i) ≤m</m>
*** <m>\sigma_2(t_{i+1}) ≥  \sigma_2(t_i) + l(t_i), \ \ 1 ≤i < k</m>
+
*** <m>σ_2(t_{i+1}) ≥  σ_2(t_i) + l(t_i), \ \ 1 ≤i < k</m>
 
** Это расписание должно удовлетворять дополнительному ограничению:
 
** Это расписание должно удовлетворять дополнительному ограничению:
*** Если два подзадачи <m>t_i</m> от <em>t</em> и <m>t_j'</m> от <em>t'</em>, у которых <m>\sigma_2(t_i) < \sigma_2(t_j')</m> запланированы последовательно на одном процессоре (т.е. <m>\sigma_1(t_i) = \sigma_1(t_j')</m>, и нет другой подзадачи <m>t_k"</m>, у которой <m>\sigma_1(t_k") = \sigma_1(t_i)</m> и <m>\sigma_2(t_i) < \sigma_2(t_k") < \sigma_2(t_j')</m>, то  
+
*** Если два подзадачи <em>t<sub>i</sub></em> от <em>t</em> и <em>t<sub>j</sub>'</em> от <em>t'</em>, у которых <m>σ_2(t_i) < σ_2(t_j')</m> запланированы последовательно на одном процессоре (т.е. <m>σ_1(t_i) = σ_1(t_j')</m>, и нет другой подзадачи <m>t_k"</m>, у которой <m>σ_1(t_k") = σ_1(t_i)</m> и <m>σ_2(t_i) < σ_2(t_k") < σ_2(t_j')</m>, то  
**** <m>\sigma_2(t_j') ≥  \sigma_2(t_i) + l(t_i) + s(c(t'))</m> — если у них один и тот же компилятор (<em>c(t) = c(t')</em>)
+
**** <m>σ_2(t_j') ≥  σ_2(t_i) + l(t_i) + s(c(t'))</m> — если у них один и тот же компилятор (<em>c(t) = c(t')</em>)
**** <m>\sigma_2(t_j') ≥  \sigma_2(t_i) + l(t_i) + s(c(t'))</m> — если эти компиляторы разные.
+
**** <m>σ_2(t_j') ≥  σ_2(t_i) + l(t_i) + s(c(t'))</m> — если эти компиляторы разные.
* Минимизировать общее время выполнения, т.е. максимум по всем подзадачам <m>\sigma_2(t_i)+l(t_i)</m>
+
* Минимизировать общее время выполнения, т.е. максимум по всем подзадачам <m>σ_2(t_i)+l(t_i)</m>
  
 
----
 
----
Строка 22: Строка 22:
  
 
{{ViggoCode|node184}}
 
{{ViggoCode|node184}}
{{GDCode|SS6, SS12}}
+
{{GDCode|SS6}}
 +
{{GDCode|SS12}}
 
<!-- * [ Задача в википедии]  -->
 
<!-- * [ Задача в википедии]  -->
 
</small>
 
</small>

Текущая версия на 16:58, 20 апреля 2023

  • Набор компиляторов C, набор задач T, m процессоров, длительности задач , нужный для задачи компилятор , время запуска-настройки для каждого компилятора .
  • Найти m-процессорное вытесняющее расписание T, т.е. для каждой для каждой задачи t ∈ T, разбиение t на какое-то количество подзадач t1, …, tk, такое что
    • и есть некоторое назначение , которое назначает каждой подзадаче ti пару неотрицательных целых , таких, что
    • Это расписание должно удовлетворять дополнительному ограничению:
      • Если два подзадачи ti от t и tj' от t', у которых запланированы последовательно на одном процессоре (т.е. , и нет другой подзадачи , у которой и , то
        • — если у них один и тот же компилятор (c(t) = c(t'))
        • — если эти компиляторы разные.
  • Минимизировать общее время выполнения, т.е. максимум по всем подзадачам

Задача в лаб17 (рид-онли просмотр)