(return back to recipe list)









  1. System to model and assumptions
  2. Typical solution
  3. Possible analysis
  4. Case study



System to model and assumptions

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.

Typical solution

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;


Possible analysis



Case study








(return back to recipe list)