!standard D.14.2(4/2) 09-10-22 AI05-0169-1/01 !reference AI05-0167-1 !class Amendment 09-10-22 !status work item 09-10-22 !status received 09-10-22 !priority Low !difficulty Easy !subject Defining group budgets for multiprocessor platforms !summary Group budgets are defined to be tied to a single processor. !problem Ada 2005 does not fully define how group budgets should be implemented on multiprocessor platforms. !proposal The definition of group budgets should be changed to include a processor. A task will only consume budget if it is executing on the processor defined for that budget. The use of a default processor will mean that single processor programs will be unchanged. In D.14.2(4/2) change: with System; package Ada.Execution_Time.Group_Budgets is type Group_Budget is tagged limited private; ... to with System; with Ada.System.Multiprocessors; package Ada.Execution_Time.Group_Budgets is type Group_Budget(P : Ada.System.Multiprocessors.CPU := Ada.System.Multiprocessors.Default_CPU) is tagged limited private Note that this definition depends on the definition of CPU from AI05-0167-1. Other parts of the package remain unchanged. A task will only consume the budget of a Group Budget if it is executing on the defined processor for that Group Budget. This applies to tasks assigned to specific processors, or those that are globally scheduling within an allocation domain. !wording ** TBD ** !discussion Whilst a task can only execute on one processor at a time, a group of tasks may execute in parallel. This makes it difficult for an implementation to support the execution of a handler at the point the group budget does to zero. It also makes it difficult for the programmer to construct useful multiprocessor 'execution-time servers'. Indeed the whole concept of such servers is single processor based. The workshop (IRTAW) therefore concluded that the existing definition of group budget be changed to make it explicitly a per-processor provision. Examples were discussed at the workshop that showed that a program could move tasks between processors and group budget is a way to exploit 'reserved' budgets on each processor of an allocation domain. !example ** TBD ** --!corrigendum D.14.2(4/2) !ACATS test Add an ACATS C-Test of this package. !appendix ****************************************************************