Overview
Comment: | parallelism: new package providing framework for simple parallelizations |
---|---|
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
a45910b245df224aeb053f1636e018fc |
User & Date: | nat on 2016-10-11 15:37:16 |
Other Links: | manifest | tags |
Context
2016-10-12
| ||
17:50 | tools/smaz: new command-line option to enable parallel dictionary eval check-in: adcca90a65 user: nat tags: trunk | |
2016-10-11
| ||
15:37 | parallelism: new package providing framework for simple parallelizations check-in: a45910b245 user: nat tags: trunk | |
2016-10-10
| ||
14:21 | smaz-tools: add Evaluate_Dictionary_Partial to work on a single string check-in: 17783bc63e user: nat tags: trunk | |
Changes
Added src/natools-parallelism.adb version [c6d04588a4].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | ------------------------------------------------------------------------------ -- Copyright (c) 2016, Natacha Porté -- -- -- -- Permission to use, copy, modify, and distribute this software for any -- -- purpose with or without fee is hereby granted, provided that the above -- -- copyright notice and this permission notice appear in all copies. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -- -- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -- -- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -- -- ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -- -- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -- -- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -- -- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -- ------------------------------------------------------------------------------ package body Natools.Parallelism is procedure Single_Accumulator_Run (Global : in out Global_State; Task_Count : in Positive) is protected State is procedure Initialize (Job : out Job_State; Continue : out Boolean); procedure Next (Job : in out Job_State; Continue : out Boolean); end State; task type Worker is end Worker; protected body State is procedure Initialize (Job : out Job_State; Continue : out Boolean) is begin Continue := not Is_Finished (Global); if Continue then Initialize_Job (Global, Job); end if; end Initialize; procedure Next (Job : in out Job_State; Continue : out Boolean) is begin Gather_Result (Global, Job); Initialize (Job, Continue); end Next; end State; task body Worker is Job : Job_State; Continue : Boolean; begin State.Initialize (Job, Continue); while Continue loop Do_Job (Job); State.Next (Job, Continue); end loop; end Worker; Workers : array (1 .. Task_Count) of Worker; pragma Unreferenced (Workers); begin null; end Single_Accumulator_Run; end Natools.Parallelism; |
Added src/natools-parallelism.ads version [35466a7f3f].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | ------------------------------------------------------------------------------ -- Copyright (c) 2016, Natacha Porté -- -- -- -- Permission to use, copy, modify, and distribute this software for any -- -- purpose with or without fee is hereby granted, provided that the above -- -- copyright notice and this permission notice appear in all copies. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -- -- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -- -- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -- -- ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -- -- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -- -- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -- -- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -- ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ -- Natools.Parallelism provides generic procedures to help with simple -- -- parallelisation needs. -- ------------------------------------------------------------------------------ package Natools.Parallelism is pragma Pure; generic type Global_State (<>) is limited private; -- State common to all jobs, only accessed from protected subprograms type Job_State is limited private; -- State of a single job, each worker task having its own with procedure Initialize_Job (Global : in out Global_State; Job : out Job_State) is <>; -- Initialize Job and update Global as needed with procedure Do_Job (Job : in out Job_State) is <>; -- Perform the job in parallel with procedure Gather_Result (Global : in out Global_State; Job : in Job_State) is <>; -- Update Global with results stored in Job with function Is_Finished (Global : in Global_State) return Boolean is <>; -- Check whether there is still a job to do procedure Single_Accumulator_Run (Global : in out Global_State; Task_Count : in Positive); end Natools.Parallelism; |