D.16 Multiprocessor Implementation
1/3
{
AI05-0171-1}
This clause allows implementations on multiprocessor
platforms to be configured.
Static Semantics
2/3
{
AI05-0171-1}
The following language-defined library package
exists:
3/3
package System.Multiprocessors is
pragma Preelaborate(Multiprocessors);
4/3
type CPU_Range is range 0 .. implementation-defined;
Not_A_Specific_CPU : constant CPU_Range := 0;
subtype CPU is CPU_Range range 1 .. CPU_Range'Last;
4.a.1/3
Implementation defined:
The value of CPU_Range'Last in System.Multiprocessors.
5/3
function Number_Of_CPUs return CPU;
end System.Multiprocessors;
6/3
{
AI05-0171-1}
A call of Number_Of_CPUs returns the number of
processors available to the program. Within a given partition, each call
on Number_Of_CPUs will return the same value.
7/3
{
AI05-0229-1}
For a task type (including the anonymous type of
a single_task_declaration)
or subprogram, the following language-defined representation aspect may
be specified:
8/3
CPU
The aspect CPU is an expression,
which shall be of type System.Multiprocessors.CPU_Range.
8.a/3
Aspect Description
for CPU: Processor
on which a given task should run.
Legality Rules
9/3
10/3
{
AI05-0229-1}
The CPU aspect shall not be specified on a task
interface type.
Dynamic Semantics
11/3
{
AI05-0171-1}
{
AI05-0229-1}
The expression
specified for the CPU aspect of a task is evaluated for each task object
(see 9.1). The CPU value is then associated
with the task object whose task declaration specifies the aspect.
12/3
{
AI05-0171-1}
{
AI05-0229-1}
The CPU aspect has no effect if it is specified
for a subprogram other than the main subprogram; the CPU value is not
associated with any task.
13/3
{
AI05-0171-1}
{
AI05-0229-1}
The CPU value is associated with the environment
task if the CPU aspect is specified for the main subprogram. If the CPU
aspect is not specified for the main subprogram it is implementation
defined on which processor the environment task executes.
13.a.1/3
Implementation defined:
The processor on which the environment
task executes in the absence of a value for the aspect CPU.
14/3
{
AI05-0171-1}
{
AI05-0264-1}
The CPU value determines the processor on which
the task will activate and execute; the task is said to be assigned to
that processor. If the CPU value is Not_A_Specific_CPU, then the task
is not assigned to a processor. A task without a CPU aspect specified
will activate and execute on the same processor as its activating task
if the activating task is assigned a processor. If the CPU value is not
in the range of System.Multiprocessors.CPU_Range or is greater than Number_Of_CPUs
the task is defined to have failed, and it becomes a completed task (see
9.2).
Extensions to Ada 2005
14.a/3
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe