これが単純な解決策なのか、「名前付き」アルゴリズムなのかわからないので、ここで質問したいと思いました。
コンパイラからのデータフローグラフ(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++;
次に、resources配列には、競合が発生しないようにするために必要な最小限のリソースが含まれ、最終的なクロック値がクリティカルパスになります(これは、これが宿題の問題ではないことを証明するためだけのものです=])
これに「名前」があるのか、それとも他にかわいい方法があるのか、疑問に思っています。ありがとう!