Справочник Ada 2012
D.16 Реализация для многопроцессорных платформ
Этот подпункт позволяет настраивать реализации на многопроцессорных платформах.
Статическая семантика
Существует следующая определенная языком библиотечная пакет:
package System.Multiprocessors is
pragma Preelaborate(Multiprocessors);
pragma Preelaborate(Multiprocessors);
type CPU_Range is range 0 .. определяется реализацией;
Not_A_Specific_CPU : constant CPU_Range := 0;
subtype CPU is CPU_Range range 1 .. CPU_Range'Last;
Not_A_Specific_CPU : constant CPU_Range := 0;
subtype CPU is CPU_Range range 1 .. CPU_Range'Last;
function Number_Of_CPUs return CPU;
end System.Multiprocessors;
end System.Multiprocessors;
Вызов Number_Of_CPUs возвращает количество процессоров, доступных программе. В рамках заданного раздела каждый вызов Number_Of_CPUs вернет одно и то же значение.
Для типа задачи (включая анонимный тип single_task_declaration) или подпрограммы можно указать следующий определяемый языком аспект представления:
CPU
Аспект CPU — это выражение, которое должно иметь тип System.Multiprocessors.CPU_Range.
Правила легальности
Если аспект CPU указан для подпрограммы, то выражение должно быть статическим.
Аспект CPU не должен быть указан для типа интерфейса задачи.
Динамическая семантика
Выражение, указанное для аспекта CPU типа задачи, вычисляется каждый раз, когда создается объект типа задачи (см. 9.1). Значение CPU затем связывается с объектом задачи.
Аспект CPU не оказывает никакого влияния, если он указан для подпрограммы, отличной от основной подпрограммы; значение CPU не связывается ни с какой задачей.
Значение CPU связывается с задачей окружения, если аспект CPU указан для основной подпрограммы. Если аспект CPU не указан для основной подпрограммы, то на каком процессоре будет выполняться задача окружения, определяется реализацией.
Значение CPU определяет процессор, на котором задача будет активирована и выполнена; говорят, что задача назначена этому процессору. Если значение CPU равно Not_A_Specific_CPU, то задача не назначена ни одному процессору. Задача без указанного аспекта CPU будет активирована и выполнена на том же процессоре, что и её активирующая задача, если активирующая задача назначена процессору. Если значение CPU не входит в диапазон System.Multiprocessors.CPU_Range или больше, чем Number_Of_CPUs, то задача считается завершившейся ошибкой, и она становится завершённой задачей (см. 9.2).