Я не уверен, есть ли у этого простое решение или это «именованный» алгоритм, поэтому я решил спросить здесь.
У меня есть график потока данных (DFG) от компилятора. Это взвешенный по дуге DAG. Веса дуг обозначают задержку различных операций, а узлы представляют сами операции (сложение, вычитание, загрузки и т. д.). Я пытаюсь найти минимальный набор ресурсов, который позволяет выполнять вычисления на критическом пути.
Я уже сделал это следующим образом:
// Initialize
ready_list <- 0
clock = 0
resource[resource_types] <- 0
resource_max[resource_types] <- -1
source = SCHEDULED
// Get ready instructions
for each node n in V
// The following means the predecessors of n have finished running based on their
// latecies/arc weights, not just been labeled "scheduled". My apologies for the poor
//pseudo-code
if predessesors of n are scheduled
ready_list <- n
// "schedule" instruction
n = pop(ready_list)
n = SCHEDULED
resource[resource_type(n)]++
// Update maximum resource required
if resource[resource_type(n)] > resource_max[resource_type(n)]
resource_max[resource_type(n)] = resource[resource_type(n)]
if ready_list = empty
clock++;
Тогда массив ресурсов будет иметь минимальное количество ресурсов, необходимых для обеспечения отсутствия конфликтов, а окончательное значение часов будет критическим путем (это просто для того, чтобы доказать, что это не проблема домашнего задания =])
Мне просто интересно, есть ли у этого «имя» или есть какой-то другой симпатичный способ сделать это. Спасибо!