From: "J-P. Rosen" <rosen@adalog.fr>
Subject: Re: Parallel Sieve Of Eratosthenes
Date: Mon, 1 Jul 2024 11:17:09 +0200 [thread overview]
Message-ID: <v5ts6h$10f7e$1@dont-email.me> (raw)
In-Reply-To: <v5srnj$o2j1$1@dont-email.me>
Le 01/07/2024 à 02:02, Lawrence D'Oliveiro a écrit :
> On Sun, 30 Jun 2024 18:36:45 +0200, J-P. Rosen wrote:
>
>> That's because in your first version, you call the child within the
>> accept statement. Therefore you wait for the value to go to the end of
>> the pipeline before processing the next value.
>> Try to copy the number to a variable, and call the child after the end
>> of the accept. This will give you 100% CPU time usage.
>>
>> BTW, you don't need an access type. Just use a declare block to create
>> the child after the first accept.
>
> Thanks for the comments, how about this slight rework of the first
> version. It does seem faster, but I’m not sure it’s as fast as the second
> version.
That's better, but as a general principle, you should move as much as
you can out of the rendezvous (minimize critical sequences). For example:
accept next_int(i : integer) do
my_prime := i;
end next_int;
Text_IO.Put_line(integer'image(my_prime)); -- moved
declare
subchild : offspring;
ii : integer;
begin
loop
accept next_int(i : integer) do
ii := i;
end next_int;
if ii mod my_prime /= 0 then --moved
subchild.next_int(ii);
end if;
end loop;
--
J-P. Rosen
Adalog
2 rue du Docteur Lombard, 92441 Issy-les-Moulineaux CEDEX
https://www.adalog.fr https://www.adacontrol.fr
next prev parent reply other threads:[~2024-07-01 9:17 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-30 8:06 Parallel Sieve Of Eratosthenes Lawrence D'Oliveiro
2024-06-30 8:10 ` Lawrence D'Oliveiro
2024-06-30 16:36 ` J-P. Rosen
2024-07-01 0:02 ` Lawrence D'Oliveiro
2024-07-01 9:17 ` J-P. Rosen [this message]
2024-07-01 21:48 ` Lawrence D'Oliveiro
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox