5.6.1 Parallel Block Statements
Syntax
Dynamic Semantics
Examples
Example of a parallel
block used to walk a binary tree in parallel:
procedure Traverse (T : Expr_Ptr)
is --
see 3.9.1
begin
if T /=
null and then
T.
all in Binary_Operation'Class --
see 3.9.1
then --
recurse down the binary tree
parallel do
Traverse (T.Left);
and
Traverse (T.Right);
and
Ada.Text_IO.Put_Line
("Processing " & Ada.Tags.Expanded_Name (T'Tag));
end do;
end if;
end Traverse;
Example of a parallel
block used to search two halves of a string in parallel:
function Search (S : String; Char : Character) return Boolean is
begin
if S'Length <= 1000 then
-- Sequential scan
return (for some C of S => C = Char);
else
-- Parallel divide and conquer
declare
Mid : constant Positive := S'First + S'Length/2 - 1;
begin
parallel do
for C of S(S'First .. Mid) loop
if C = Char then
return True; -- Terminates enclosing do
end if;
end loop;
and
for C of S(Mid + 1 .. S'Last) loop
if C = Char then
return True; -- Terminates enclosing do
end if;
end loop;
end do;
-- Not found
return False;
end;
end if;
end Search;
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe