In this recipe 3.2, we describe
an architecture where computing units (i.e. cores) hosts tasks that
may share component such as data
components.
This kind of multiprocessor architecture is sometimes called core (or processor) affinities.
We both give an example of partitionned system and global
system.
Here is a simplified example of this recipe
(which can be downloaded here):
package core_affinity_with_shared_data
public
with multicore_crossbar_units;
thread ordo_bus
features
fe : requires data access black.Impl;
properties
Dispatch_Protocol => Periodic;
Period => 125 ms;
Deadline => 125 ms;
Compute_Execution_Time => 1 ms .. 25 ms;
Priority => 10 ;
end ordo_bus;
thread implementation ordo_bus.Impl
end ordo_bus.Impl;
thread pilotage
features
fe : requires data access black.Impl;
properties
Dispatch_Protocol => Periodic;
Period => 250 ms;
Deadline => 250 ms;
Compute_Execution_Time => 25 ms .. 25 ms;
Priority => 8 ;
end pilotage;
thread implementation pilotage.Impl
end pilotage.Impl;
data black
end black;
data implementation black.Impl
properties
Concurrency_Control_Protocol => Priority_Ceiling;
end black.Impl;
process Application
end Application;
process implementation Application.Impl
subcomponents
t1 : thread pilotage.Impl;
t2 : thread ordo_bus.Impl;
d1 : data black.impl;
connections
c1: data access d1 -> t1.fe;
c2: data access d1 -> t2.fe;
end Application.Impl;
system core_affinity_with_shared_data
end core_affinity_with_shared_data;
system implementation core_affinity_with_shared_data.Impl
subcomponents
a_process : process application.Impl;
cpu : system multicore_crossbar_units::dual_core.impl;
properties
Actual_Processor_Binding
=> (reference(cpu.core1))
applies to a_process.t1;
Actual_Processor_Binding
=> (reference(cpu.core2))
applies to a_process.t2;
end core_affinity_with_shared_data.Impl;
end core_affinity_with_shared_data;