Skip to content

Commit

Permalink
Passing tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Rojods committed Jul 15, 2024
1 parent c748af6 commit 97143ef
Show file tree
Hide file tree
Showing 9 changed files with 388 additions and 372 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
Expand Down Expand Up @@ -107,6 +108,10 @@ public IdentificationResult apply(Set<? extends DesignModel> designModels,
jobGraphStrong,
jobGraphSrc,
jobGraphSrc.stream().map(x -> 1L).collect(Collectors.toList()),
List.of(),
List.of(),
List.of(),
List.of(),
mapsAndDelays.stream()
.collect(Collectors.toMap(
proc -> proc.getIdentifier(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ public record AperiodicAsynchronousDataflow(
@JsonProperty("job_graph_is_strong_precedence") List<Boolean> jobGraphIsStrongPrecedence,
@JsonProperty("job_graph_src_name") List<String> jobGraphSrcName,
@JsonProperty("job_graph_src_instance") List<Long> jobGraphSrcInstance,
@JsonProperty("job_graph_cycles_src_name") List<String> jobGraphCyclesSrcName,
@JsonProperty("job_graph_cycles_dst_name") List<String> jobGraphCyclesDstName,
@JsonProperty("job_graph_cycles_src_instance") List<Long> jobGraphCyclesSrcInstance,
@JsonProperty("job_graph_cycles_dst_instance") List<Long> jobGraphCyclesDstInstance,
@JsonProperty("process_get_from_buffer_in_bits") Map<String, Map<String, Long>> processGetFromBufferInBits,
@JsonProperty("process_minimum_throughput") Map<String, Double> processMinimumThroughput,
@JsonProperty("process_path_maximum_latency") Map<String, Map<String, Double>> processPathMaximumLatency,
Expand Down
10 changes: 5 additions & 5 deletions log.html

Large diffs are not rendered by default.

627 changes: 320 additions & 307 deletions output.xml

Large diffs are not rendered by default.

10 changes: 5 additions & 5 deletions report.html
Original file line number Diff line number Diff line change
Expand Up @@ -1629,22 +1629,22 @@
window.output = {};
</script>
<script type="text/javascript">
window.output["suite"] = [1,2,3,0,[],[0,0,122869],[],[[4,0,0,[],[1,88,4646],[]],[5,0,0,[],[1,4734,7154],[]],[6,0,0,[],[1,11889,7304],[]],[7,0,0,[],[1,19193,6571],[]],[8,0,0,[],[1,25765,7082],[]],[9,0,0,[],[1,32847,9911],[]],[10,0,0,[],[1,42758,9490],[]],[11,0,0,[],[0,52249,6276,12],[]],[13,0,0,[],[1,58526,6188],[]],[14,0,0,[],[1,64715,3814],[]],[15,0,0,[],[1,68529,3672],[]],[16,0,0,[],[1,72202,3604],[]],[17,0,0,[],[1,75807,4430],[]],[18,0,0,[],[1,80238,3485],[]],[19,0,0,[],[1,83723,3406],[]],[20,0,0,[],[1,87129,5475],[]],[21,0,0,[],[1,92604,6108],[]],[22,0,0,[],[1,98712,4982],[]],[23,0,0,[],[1,103695,4861],[]],[24,0,0,[],[1,108557,4725],[]],[25,0,0,[],[1,113283,4586],[]],[26,0,0,[],[0,117869,4995,27],[]]],[],[22,20,2,0]];
window.output["suite"] = [1,2,3,0,[],[1,0,129645],[],[[4,0,0,[],[1,24,5073],[]],[5,0,0,[],[1,5097,7048],[]],[6,0,0,[],[1,12145,9140],[]],[7,0,0,[],[1,21286,10329],[]],[8,0,0,[],[1,31615,10520],[]],[9,0,0,[],[1,42135,11180],[]],[10,0,0,[],[1,53316,10725],[]],[11,0,0,[],[1,64042,5919],[]],[12,0,0,[],[1,69961,4512],[]],[13,0,0,[],[1,74473,2978],[]],[14,0,0,[],[1,77452,3059],[]],[15,0,0,[],[1,80511,2948],[]],[16,0,0,[],[1,83460,3754],[]],[17,0,0,[],[1,87215,3135],[]],[18,0,0,[],[1,90350,3134],[]],[19,0,0,[],[1,93485,4402],[]],[20,0,0,[],[1,97887,5611],[]],[21,0,0,[],[1,103498,5423],[]],[22,0,0,[],[1,108921,5402],[]],[23,0,0,[],[1,114323,4635],[]],[24,0,0,[],[1,118958,5340],[]],[25,0,0,[],[1,124298,5345],[]]],[],[22,22,0,0]];
</script>
<script type="text/javascript">
window.output["strings"] = [];
</script>
<script type="text/javascript">
window.output["strings"] = window.output["strings"].concat(["*","*TestsBenchmark","*/home/rjordao/gits/IDeSyDe/TestsBenchmark.robot","*TestsBenchmark.robot","*Test for examples_and_benchmarks/CODES_ISSS_2023/a_sobel","*Test for examples_and_benchmarks/CODES_ISSS_2023/a_sobel_b_susan_c_rasta","*Test for examples_and_benchmarks/CODES_ISSS_2023/a_sobel_b_susan_c_rasta_d_jpegEnc1","*Test for examples_and_benchmarks/CODES_ISSS_2023/a_sobel_b_susan_d_jpegEnc1","*Test for examples_and_benchmarks/CODES_ISSS_2023/a_sobel_c_rasta_d_jpegEnc1","*Test for examples_and_benchmarks/CODES_ISSS_2023/b_susan_c_rasta_d_jpegEnc1","*Test for examples_and_benchmarks/CODES_ISSS_2023/c_rasta_d_jpegEnc1","*Test for examples_and_benchmarks/CODES_ISSS_2023/g10_3_cycl","*CalledProcessError: Command '['./idesyde', '--run-path', 'test_runs', '--x-max-solutions', '1', '--x-improvement-time-out', '60', '-p', '20', '-v', 'DEBUG', 'examples_and_benchmarks/CODES_ISSS_2023/g10_3_cycl/idesyde_input.fiodl']' died with &lt;Signals.SIGABRT: 6&gt;.","*Test for examples_and_benchmarks/DASC2023/flight-information-function-50","*Test for examples_and_benchmarks/DASC2023/radar-aesa-function-scenario1","*Test for examples_and_benchmarks/DASC2023/radar-aesa-function-scenario1-12_5","*Test for examples_and_benchmarks/DASC2023/radar-aesa-function-scenario1-25","*Test for examples_and_benchmarks/DASC2023/radar-aesa-function-scenario1-3_125","*Test for examples_and_benchmarks/DASC2023/radar-aesa-function-scenario1-50","*Test for examples_and_benchmarks/DASC2023/radar-aesa-function-scenario2","*Test for examples_and_benchmarks/PANORAMA/flight-information-function","*Test for examples_and_benchmarks/small_and_explainable/sobel_to_bus_multicore","*Test for examples_and_benchmarks/novel/programmable_logic_area/tc1","*Test for examples_and_benchmarks/novel/programmable_logic_area/tc2","*Test for examples_and_benchmarks/novel/programmable_logic_area/tc3","*Test for examples_and_benchmarks/novel/programmable_logic_area/tc3_feasible","*Test for examples_and_benchmarks/novel/programmable_logic_area/tc45","*0 == 0"]);
window.output["strings"] = window.output["strings"].concat(["*","*TestsBenchmark","*/home/rjordao/gits/IDeSyDe/TestsBenchmark.robot","*TestsBenchmark.robot","*Test for examples_and_benchmarks/CODES_ISSS_2023/a_sobel","*Test for examples_and_benchmarks/CODES_ISSS_2023/a_sobel_b_susan_c_rasta","*Test for examples_and_benchmarks/CODES_ISSS_2023/a_sobel_b_susan_c_rasta_d_jpegEnc1","*Test for examples_and_benchmarks/CODES_ISSS_2023/a_sobel_b_susan_d_jpegEnc1","*Test for examples_and_benchmarks/CODES_ISSS_2023/a_sobel_c_rasta_d_jpegEnc1","*Test for examples_and_benchmarks/CODES_ISSS_2023/b_susan_c_rasta_d_jpegEnc1","*Test for examples_and_benchmarks/CODES_ISSS_2023/c_rasta_d_jpegEnc1","*Test for examples_and_benchmarks/CODES_ISSS_2023/g10_3_cycl","*Test for examples_and_benchmarks/DASC2023/flight-information-function-50","*Test for examples_and_benchmarks/DASC2023/radar-aesa-function-scenario1","*Test for examples_and_benchmarks/DASC2023/radar-aesa-function-scenario1-12_5","*Test for examples_and_benchmarks/DASC2023/radar-aesa-function-scenario1-25","*Test for examples_and_benchmarks/DASC2023/radar-aesa-function-scenario1-3_125","*Test for examples_and_benchmarks/DASC2023/radar-aesa-function-scenario1-50","*Test for examples_and_benchmarks/DASC2023/radar-aesa-function-scenario2","*Test for examples_and_benchmarks/PANORAMA/flight-information-function","*Test for examples_and_benchmarks/small_and_explainable/sobel_to_bus_multicore","*Test for examples_and_benchmarks/novel/programmable_logic_area/tc1","*Test for examples_and_benchmarks/novel/programmable_logic_area/tc2","*Test for examples_and_benchmarks/novel/programmable_logic_area/tc3","*Test for examples_and_benchmarks/novel/programmable_logic_area/tc3_feasible","*Test for examples_and_benchmarks/novel/programmable_logic_area/tc45"]);
</script>
<script type="text/javascript">
window.output["stats"] = [[{"elapsed":"00:02:03","fail":2,"label":"All Tests","pass":20,"skip":0}],[],[{"elapsed":"00:02:03","fail":2,"id":"s1","label":"TestsBenchmark","name":"TestsBenchmark","pass":20,"skip":0}]];
window.output["stats"] = [[{"elapsed":"00:02:10","fail":0,"label":"All Tests","pass":22,"skip":0}],[],[{"elapsed":"00:02:10","fail":0,"id":"s1","label":"TestsBenchmark","name":"TestsBenchmark","pass":22,"skip":0}]];
</script>
<script type="text/javascript">
window.output["baseMillis"] = 1719319320888;
window.output["baseMillis"] = 1721049524872;
</script>
<script type="text/javascript">
window.output["generated"] = 122892;
window.output["generated"] = 129672;
</script>
<script type="text/javascript">
window.output["expand_keywords"] = null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ set of int: Tiles;
array[Firings] of int: firingsActor;
array[Firings] of int: firingsNumber;
array[Firings] of set of Firings: follows; % equivalent to f_i < f_j is precedes[i, j] = true
array[Firings] of set of Firings: cycles;
% array[Firings] of set of Messages: sends;
array[Messages] of Firings: receiver;
array[Messages] of Firings: sender;
Expand Down Expand Up @@ -148,9 +149,10 @@ constraint forall(a in Processes) (
let {
var int: selfCycle = max([duration[a], sum(b in Buffers where processesWriteBuffer[a, b] > 0) (durationBufferMessage[b])]);
var int: maxCycleConnected = max([maxPath[f, processMapping[firingsActor[f]]] | f in Firings where connected[firingsActor[f], a]]);
var int: maxCycleComapped = max([maxPath[f, processMapping[firingsActor[f]]] | f in Firings where processMapping[firingsActor[f]] = processMapping[a]])
var int: maxCycleDelays = max([maxPath[ff, processMapping[f]] | f, ff in Firings where firingsActor[f] = a /\ f in cycles[ff]]);
var int: maxCycleComapped = max([maxPath[f, processMapping[firingsActor[f]]] | f in Firings where processMapping[firingsActor[f]] = processMapping[a]]);
} in
invThroughput[a] = max([selfCycle, maxCycleConnected, maxCycleComapped])
invThroughput[a] = max([selfCycle, maxCycleConnected, maxCycleComapped, maxCycleDelays])
);

constraint forall(solNum in 1..nPareto) (
Expand Down
8 changes: 8 additions & 0 deletions rust-bridge-minizinc/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1265,6 +1265,8 @@ fn solve_aad2ptm<'a>(
.iter()
.map(|_| vec![false; all_processes.len()])
.collect();
let mut firings_cycles: Vec<HashSet<u64>> =
all_firings.iter().map(|_| HashSet::new()).collect();
let mut firings_follows: Vec<HashSet<u64>> =
all_firings.iter().map(|_| HashSet::new()).collect();
let memories = m.partitioned_tiled_multicore.hardware.memories.clone();
Expand Down Expand Up @@ -1293,6 +1295,11 @@ fn solve_aad2ptm<'a>(
);
}
}
for (((srca, srcq), dsta), dstq) in app.job_graph_cycles_src_name.iter().zip(app.job_graph_cycles_src_instance.iter()).zip(app.job_graph_cycles_dst_name.iter()).zip(app.job_graph_cycles_dst_instance.iter()) {
let firing_src_idx = all_firings.iter().position(|(f, i)| f == srca && i == srcq).unwrap();
let firings_dst_idx = all_firings.iter().position(|(f, i)| f == dsta && i == dstq).unwrap();
firings_cycles[firing_src_idx].insert(firings_dst_idx as u64);
}
}
let execution_times: Vec<Vec<i32>> = all_processes
.iter()
Expand Down Expand Up @@ -1420,6 +1427,7 @@ fn solve_aad2ptm<'a>(
MiniZincData::from(all_firings_instances.clone()),
);
input_data.insert("follows", MiniZincData::from(firings_follows));
input_data.insert("cycles", MiniZincData::from(firings_cycles));
input_data.insert("receiver", MiniZincData::from(messages_receiver));
input_data.insert("sender", MiniZincData::from(messages_sender));
input_data.insert(
Expand Down
86 changes: 33 additions & 53 deletions rust-common/src/irules.rs
Original file line number Diff line number Diff line change
Expand Up @@ -325,76 +325,49 @@ pub fn identify_asynchronous_aperiodic_dataflow_from_sdf(
.channels_identifiers
.len(),
);
let mut job_graph_cycle_edges: Vec<((&str, u64), (&str, u64))> =
Vec::with_capacity(
jobs_of_processes.len()
* analysed_sdf_application
.sdf_application
.channels_identifiers
.len(),
);
for (cidx, dst) in analysed_sdf_application
.sdf_application
.topology_dsts
.iter()
.enumerate()
.filter(|(_, x)| component_actors.contains(&x.as_str()))
{
let src = &analysed_sdf_application.sdf_application.topology_srcs[cidx];
let consumed = analysed_sdf_application
.sdf_application
.topology_consumption[cidx] as u64;
let produced =
analysed_sdf_application.sdf_application.topology_production[cidx] as u64;
let initial_tokens = analysed_sdf_application
.sdf_application
.topology_initial_tokens[cidx]
as u64;
let q_dst_max = *analysed_sdf_application.repetition_vector.get(dst).expect(
"Impossible empty entry for repetition vector during identification rule",
);
let q_src_max = *analysed_sdf_application.repetition_vector.get(src).expect(
"Impossible empty entry for repetition vector during identification rule",
);
for q_dst in 1..=q_dst_max {
let src = &analysed_sdf_application.sdf_application.topology_srcs[cidx];
// let q_src_max = *analysed_sdf_application
// .repetition_vector
// .get(src)
// .expect("Impossible empty entry for repetition vector during identification rule");
let consumed = analysed_sdf_application
.sdf_application
.topology_consumption[cidx]
as u64;
let produced = analysed_sdf_application.sdf_application.topology_production
[cidx] as u64;
let initial_tokens = analysed_sdf_application
.sdf_application
.topology_initial_tokens[cidx]
as u64;
let q_src_ub = (q_dst * consumed - initial_tokens).div_ceil(produced);
// let q_src_lb = ((q_dst - 1) * consumed - initial_tokens).div_ceil(produced);
job_graph_edges.push(((src, q_src_ub), (dst, q_dst), true));
// for q_src in q_src_lb.max(1)..=q_src_ub.min(q_src_max) {
// }
if q_src_ub > 0 {
job_graph_edges.push(((src, q_src_ub), (dst, q_dst), true));
} else {
job_graph_cycle_edges.push(((src, q_src_ub + q_src_max), (dst, q_dst)));
}
if q_dst > 1 {
job_graph_edges.push(((dst, q_dst - 1), (dst, q_dst), false));
}
}
// for (src, q_src) in &jobs_of_processes {
// if let Some((cidx, _)) = analysed_sdf_application
// .sdf_application
// .topology_srcs
// .iter()
// .zip(
// analysed_sdf_application
// .sdf_application
// .topology_dsts
// .iter(),
// )
// .enumerate()
// .find(|(_, (s, t))| s == src && t == dst)
// {
// // let q_src_max = analysed_sdf_application.repetition_vector.get(*src).expect("Impossible empty entry for repetition vector during identification rule");
// let consumed = analysed_sdf_application
// .sdf_application
// .topology_consumption[cidx];
// let produced =
// analysed_sdf_application.sdf_application.topology_production[cidx];
// let initial_tokens = analysed_sdf_application
// .sdf_application
// .topology_initial_tokens[cidx];
// let ratio = ((q_dst * consumed as u64 - initial_tokens as u64) as f64)
// / (produced as f64);
// // if the jobs are different and the ratio of tokens is satisfied, they
// // have a strong dependency, otherwise, they might only have a weak dependency
// // or nothing at all.
// if src != dst && *q_src == (ratio.ceil() as u64) {
// job_graph_edges.push(((src, *q_src), (dst, *q_dst), true))
// }
// } else if src == dst && *q_dst == (*q_src + 1) {
// job_graph_edges.push(((src, *q_src), (dst, *q_dst), false))
// }
// }
}
let channel_token_sizes = analysed_sdf_application
.sdf_application
Expand Down Expand Up @@ -477,6 +450,13 @@ pub fn identify_asynchronous_aperiodic_dataflow_from_sdf(
.collect(),
process_put_in_buffer_in_bits: data_sent,
process_get_from_buffer_in_bits: data_read,
job_graph_cycles_src_name: job_graph_cycle_edges
.iter()
.map(|((s, _), _)| s.to_string())
.collect(),
job_graph_cycles_dst_name: job_graph_cycle_edges.iter().map(|(_, (t, _))| t.to_string()).collect(),
job_graph_cycles_src_instance: job_graph_cycle_edges.iter().map(|((_, qs), _)| *qs).collect(),
job_graph_cycles_dst_instance: job_graph_cycle_edges.iter().map(|(_, (_, qt))| *qt).collect()
}) as Arc<dyn DecisionModel>)
}
// Graph::from_edges(edges.into_iter());
Expand Down
4 changes: 4 additions & 0 deletions rust-common/src/models.rs
Original file line number Diff line number Diff line change
Expand Up @@ -490,6 +490,10 @@ pub struct AperiodicAsynchronousDataflow {
pub job_graph_src_instance: Vec<u64>,
pub job_graph_dst_instance: Vec<u64>,
pub job_graph_is_strong_precedence: Vec<bool>,
pub job_graph_cycles_src_name: Vec<String>,
pub job_graph_cycles_dst_name: Vec<String>,
pub job_graph_cycles_src_instance: Vec<u64>,
pub job_graph_cycles_dst_instance: Vec<u64>,
pub process_minimum_throughput: HashMap<String, f64>,
pub process_path_maximum_latency: HashMap<String, HashMap<String, f64>>,
}
Expand Down

0 comments on commit 97143ef

Please sign in to comment.