Skip to content

Commit

Permalink
trying...
Browse files Browse the repository at this point in the history
  • Loading branch information
Rojods committed Jul 2, 2024
1 parent 541ea78 commit d85d35c
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 40 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -50,25 +50,26 @@ array[Buffers] of var int: durationBufferMessage;
% array[Messages] of var opt Messages: orderNextMessages;
% set of int: FiringsWithMessages = 0..(card(Firings) + card(Messages) - 1);
% set of int: PathMessages = (card(Firings) - 1 )..(card(Firings) + card(Messages) - 1);
array[Firings, Firings] of var int: maxPath;
array[Firings, Tiles] of var int: maxPath;

array[Processes] of var int: invThroughput;
var 0..card(Tiles): nUsedPEs;

constraint forall(p in Processes) (duration[p] >= min([e | e in executionTime[p, ..] where e >= 0]));
constraint forall(p in Processes) (duration[p] <= max([e | e in executionTime[p, ..] where e >= 0]));
constraint forall(b in Buffers) (durationBufferMessage[b] >= 0);
constraint forall(b in Buffers) (durationBufferMessage[b] <= max(src in Processes, mSrc, mDst in Tiles where mSrc != mDst /\ hasInterconnectTo[mSrc, mDst] /\ processesWriteBuffer[src, b] > 0) (
constraint forall(b in Buffers) (durationBufferMessage[b] <= max([0] ++ [
let { set of int: path = interconnectTo[mSrc, mDst]; } in
sum(ce in path) (frameSize[ce]) + processesWriteBuffer[src, b] * min(ce in path) (invBandwidthPerChannel[ce])
));
| src in Processes, mSrc, mDst in Tiles where mSrc != mDst /\ hasInterconnectTo[mSrc, mDst] /\ processesWriteBuffer[src, b] > 0
]));
int: maxTh = sum(p in Processes) (max([e | e in executionTime[p, ..] where e >= 0]) + sum(b in Buffers, mSrc, mDst in Tiles where mSrc != mDst /\ hasInterconnectTo[mSrc, mDst] /\ processesWriteBuffer[p, b] > 0) (
let { set of int: path = interconnectTo[mSrc, mDst]; } in
sum(ce in path) (frameSize[ce]) + processesWriteBuffer[p, b] * min(ce in path) (invBandwidthPerChannel[ce])
));
constraint forall(p in Processes) (invThroughput[p] <= maxTh);
constraint forall(p in Processes) (invThroughput[p] >= min([e | e in executionTime[p, ..] where e >= 0]));
constraint forall(f, ff in Firings) (maxPath[f, ff] >= 0.0);
constraint forall(f in Firings, l in Tiles) (maxPath[f, l] >= 0);
% constraint forall(f, ff in Firings) (maxPathMessages[f, ff] >= 0.0);

constraint forall(p in Processes, pe in Tiles where executionTime[p, pe] < 0) (processMapping[p] != pe);
Expand Down Expand Up @@ -129,7 +130,7 @@ constraint nvalue(nUsedPEs, processMapping);
% constraint forall(m, mm in Messages where m != mm /\ processMapping[firingsActor[sender[m]]] = processMapping[firingsActor[sender[mm]]]) (messagesOrdering[m] + 1 = messagesOrdering[mm] <-> orderNextMessages[m] = mm);
% constraint forall(pe in Tiles, m in Messages) (buffersMapping[messageBuffer[m]] = pe -> count_lt([buffersMapping[messageBuffer[mm]] | mm in Messages], pe, messagesOrdering[m]));

% constraint forall(f in Firings, pe in Tiles where firingsOrdering[f] = 0 /\ processMapping[firingsActor[f]] = pe) (maxPath[f, pe] = duration[firingsActor[f]]);
constraint forall(f in Firings, pe in Tiles where firingsOrdering[f] = 0 /\ processMapping[firingsActor[f]] = pe) (maxPath[f, pe] >= 0.0);
% constraint forall(f in Firings, pe in Tiles where firingsOrdering[f] = 0 /\ processMapping[firingsActor[f]] = pe) (maxPathMessages[f, pe] = sum(m in Messages where sender[m] = f) (durationBufferMessage[messageBuffer[m]]));

% constraint forall(f in Firings, pe in Tiles where firingsOrdering[f] > 0 \/ processMapping[firingsActor[f]] != pe) (
Expand All @@ -139,12 +140,12 @@ constraint nvalue(nUsedPEs, processMapping);
% } in
% maxPath[f, pe] = max([incomingMessages, previousFirings])
% );
constraint forall(f in Firings) (
maxPath[f, f] >= duration[firingsActor[f]]
);
constraint forall(f in Firings) (
maxPath[f, f] >= sum(b in Buffers where processesWriteBuffer[firingsActor[f], b] > 0) (durationBufferMessage[b])
);
% constraint forall(f in Firings) (
% maxPath[f, f] >= duration[firingsActor[f]]
% );
% constraint forall(f in Firings) (
% maxPath[f, f] >= sum(b in Buffers where processesWriteBuffer[firingsActor[f], b] > 0) (durationBufferMessage[b])
% );
% constraint forall(m in Messages) (
% let {
% int: mp = m + card(Firings);
Expand All @@ -155,15 +156,15 @@ constraint forall(f in Firings) (
% maxPathMessages[f, f] = sum(b in Buffers where processesWriteBuffer[firingsActor[f], b] > 0) (durationBufferMessage[b])
% );

constraint forall(fi in Firings, j in Firings, k in Firings where fi != j /\ k in follows[fi] /\ processMapping[firingsActor[fi]] != processMapping[firingsActor[k]]) (
maxPath[fi, j] >= duration[firingsActor[fi]] + sum(b in Buffers where processesWriteBuffer[firingsActor[fi], b] > 0) (durationBufferMessage[b]) + maxPath[k, j]
constraint forall(l in Tiles, fi in Firings, k in Firings where k in follows[fi] /\ processMapping[firingsActor[fi]] != processMapping[firingsActor[k]] /\ (firingsOrdering[k] > 0 \/ l != processMapping[firingsActor[k]])) (
maxPath[k, l] >= duration[firingsActor[fi]] + sum(b in Buffers where processesWriteBuffer[firingsActor[fi], b] > 0) (durationBufferMessage[b]) + maxPath[fi, l]
);
constraint forall(fi, fj, fk in Firings where fi != fj /\ fi != fk /\ processMapping[firingsActor[fi]] = processMapping[firingsActor[fk]] /\ firingsOrdering[fk] > firingsOrdering[fi]) (
maxPath[fi, fj] >= duration[firingsActor[fi]] + maxPath[fk, fj]
);
constraint forall(fi, fj, fk in Firings where fi != fj /\ fi != fk /\ processMapping[firingsActor[fi]] = processMapping[firingsActor[fk]] /\ firingsOrdering[fk] > firingsOrdering[fi]) (
maxPath[fi, fj] >= sum(b in Buffers where processesWriteBuffer[firingsActor[fi], b] > 0) (durationBufferMessage[b]) + maxPath[fk, fj]
constraint forall(l in Tiles, fi, fj in Firings where fi != fj /\ processMapping[firingsActor[fi]] = processMapping[firingsActor[fj]] /\ firingsOrdering[fj] > firingsOrdering[fi]) (
maxPath[fj, l] >= duration[firingsActor[fi]] + maxPath[fi, l]
);
% constraint forall(fi, fj, fk in Firings where fi != fj /\ fi != fk /\ processMapping[firingsActor[fi]] = processMapping[firingsActor[fk]] /\ firingsOrdering[fk] > firingsOrdering[fi]) (
% maxPath[fi, fj] >= sum(b in Buffers where processesWriteBuffer[firingsActor[fi], b] > 0) (durationBufferMessage[b]) + maxPath[fk, fj]
% );
% constraint forall(i, j, k in Messages where i != j /\ i != k /\ buffersMapping[messageBuffer[i]] = buffersMapping[messageBuffer[k]] /\ firingsOrdering[sender[k]] > firingsOrdering[sender[i]]) (
% let {
% int: ip = i + card(Firings);
Expand All @@ -181,8 +182,8 @@ constraint forall(a in Processes) (
invThroughput[a] >= max([duration[a], sum(b in Buffers where processesWriteBuffer[a, b] > 0) (durationBufferMessage[b])])
);

constraint forall(f, ff in Firings where processMapping[firingsActor[f]] = processMapping[firingsActor[ff]] /\ f != ff) (
invThroughput[firingsActor[f]] >= maxPath[f, ff]
constraint forall(f in Firings) (
invThroughput[firingsActor[f]] >= maxPath[f, processMapping[f]] + duration[firingsActor[f]]
);
% constraint forall(m, mm in Messages where buffersMapping[messageBuffer[m]] = buffersMapping[messageBuffer[mm]] /\ m != mm) (
% let {
Expand Down
42 changes: 22 additions & 20 deletions rust-common/src/models.rs
Original file line number Diff line number Diff line change
Expand Up @@ -845,30 +845,32 @@ impl AperiodicAsynchronousDataflowToPartitionedTiledMulticore {
.zip(app.job_graph_dst_name.iter())
.zip(app.job_graph_dst_instance.iter())
{
let srcf = *jobs_to_idx.get(&(srca.as_str(), *srcq)).expect("Should have all jobs added. Impossible error.");
let dstf = *jobs_to_idx.get(&(dsta.as_str(), *dstq)).expect("Should have all jobs added. Impossible error.");
for b in &app.buffers {
if app
.process_put_in_buffer_in_bits
.get(srca)
.and_then(|x| x.get(b))
.is_some()
{
if self.processes_to_runtime_scheduling.get(srca).and_then(|xa| self.processes_to_runtime_scheduling.get(dsta).map(|ya| xa != ya)).unwrap_or(true) {
let srcf = *jobs_to_idx.get(&(srca.as_str(), *srcq)).expect("Should have all jobs added. Impossible error.");
let dstf = *jobs_to_idx.get(&(dsta.as_str(), *dstq)).expect("Should have all jobs added. Impossible error.");
for b in &app.buffers {
if app
.process_get_from_buffer_in_bits
.get(dsta)
.process_put_in_buffer_in_bits
.get(srca)
.and_then(|x| x.get(b))
.is_some()
{
let cur_idx = *messages_max_idx.get(b.as_str()).unwrap_or(&1);
let midx = full_graph.add_node((b.as_str(), cur_idx));
full_graph.add_edge(
srcf,
midx,
*actor_times.get(srca.as_str()).unwrap_or(&0.0),
);
full_graph.add_edge(midx, dstf, *buffer_times.get(b.as_str()).unwrap_or(&0.0));
messages_max_idx.insert(b.as_str(), cur_idx + 1);
if app
.process_get_from_buffer_in_bits
.get(dsta)
.and_then(|x| x.get(b))
.is_some()
{
let cur_idx = *messages_max_idx.get(b.as_str()).unwrap_or(&1);
let midx = full_graph.add_node((b.as_str(), cur_idx));
full_graph.add_edge(
srcf,
midx,
*actor_times.get(srca.as_str()).unwrap_or(&0.0),
);
full_graph.add_edge(midx, dstf, *buffer_times.get(b.as_str()).unwrap_or(&0.0));
messages_max_idx.insert(b.as_str(), cur_idx + 1);
}
}
}
}
Expand Down

0 comments on commit d85d35c

Please sign in to comment.