Есть ли имя для алгоритма, который находит минимальный набор ресурсов, который не допускает конкуренции за ресурсы в графе потока данных/взвешенном DAG?

Я не уверен, есть ли у этого простое решение или это «именованный» алгоритм, поэтому я решил спросить здесь.

У меня есть график потока данных (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++;  

Тогда массив ресурсов будет иметь минимальное количество ресурсов, необходимых для обеспечения отсутствия конфликтов, а окончательное значение часов будет критическим путем (это просто для того, чтобы доказать, что это не проблема домашнего задания =])

Мне просто интересно, есть ли у этого «имя» или есть какой-то другой симпатичный способ сделать это. Спасибо!


person user770901    schedule 26.05.2011    source источник
comment
позвольте мне убедиться, что я правильно вас понял, вы ищете алгоритм, который завершает компиляцию за минимально возможное время, с минимальной разницей ресурсов между каждыми двумя задачами?   -  person amit    schedule 26.05.2011
comment
Я не уверен, что вы подразумеваете под минимальной разницей ресурсов между каждыми двумя задачами? Алгоритм генерирует минимальное количество ресурсов, необходимых для предотвращения конфликтов. Это означает, что каждая инструкция может выполняться немедленно, когда она готова (когда все ее предшественники были выполнены). Если бы граф визуализировался этапами, соответствующими тактовым циклам, а тип ресурса был только один, то это соответствовало бы максимальной ширине графа на данном этапе. Я делаю это для нескольких типов ресурсов.   -  person user770901    schedule 26.05.2011
comment
Возможный дубликат Что это за алгоритм? Коробка/Рюкзак?   -  person Paul Sweatte    schedule 18.07.2016