From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!mx02.eternal-september.org!feeder.eternal-september.org!feeder.erje.net!eu.feeder.erje.net!news.glorb.com!peer01.iad.highwinds-media.com!news.highwinds-media.com!feed-me.highwinds-media.com!post01.iad.highwinds-media.com!fx18.iad.POSTED!not-for-mail From: Brad Moore User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 MIME-Version: 1.0 Newsgroups: comp.lang.ada Subject: Re: =?ISO-8859-1?Q?GNAT=A0and_Tasklets?= References: In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Message-ID: NNTP-Posting-Host: 68.145.219.148 X-Complaints-To: internet.abuse@sjrb.ca X-Trace: 1419202226 68.145.219.148 (Sun, 21 Dec 2014 22:50:26 UTC) NNTP-Posting-Date: Sun, 21 Dec 2014 22:50:26 UTC Date: Sun, 21 Dec 2014 15:50:26 -0700 X-Received-Bytes: 2777 X-Received-Body-CRC: 920845916 Xref: news.eternal-september.org comp.lang.ada:24188 Date: 2014-12-21T15:50:26-07:00 List-Id: On 2014-12-21 2:35 PM, tmoran@acm.org wrote: > Is it the intent that parallel blocks would be used, for instance, > for Quicksort? > > parallel > Sort(A(A'first .. Pivot-1)); > and > Sort(A(Pivot+1 .. A'last)); > end parallel; > Yes, exactly. A full version (adapted from the parallel blocks Paraffin example) might be procedure Quicksort (Container : in out Array_Type) is procedure Swap (L, R : Index_Type); pragma Inline (Swap); procedure Parallel_Quicksort (Left, Right : Index_Type) is I : Index_Type'Base := Left; J : Index_Type'Base := Right; Pivot : constant Element_Type := Container (Index_Type'Val (Index_Type'Pos (Container'First) + ((Index_Type'Pos (Left) + Index_Type'Pos (Right)) / 2) - 1)); use type Parallel.Local.CPU_Count; begin -- Parallel_Quicksort while I <= J loop while Container (I) < Pivot loop I := Index_Type'Succ (I); end loop; while Pivot < Container (J) loop J := Index_Type'Pred (J); end loop; if I <= J then Swap (I, J); I := Index_Type'Succ (I); J := Index_Type'Pred (J); end if; end loop; parallel if Left < J then Parallel_Quicksort (Left, J); end if; and if I < Right then Parallel_Quicksort (I, Right); end if; end parallel; end Parallel_Quicksort; procedure Swap (L, R : Index_Type) is Temp : constant Element_Type := Container (L); begin Container (L) := Container (R); Container (R) := Temp; end Swap; begin Parallel_Quicksort (Container'First, Container'Last); end Quicksort;