comp.lang.ada
 help / color / mirror / Atom feed
From: Lawrence D'Oliveiro <ldo@nz.invalid>
Subject: Re: Parallel Sieve Of Eratosthenes
Date: Mon, 1 Jul 2024 00:02:59 -0000 (UTC)	[thread overview]
Message-ID: <v5srnj$o2j1$1@dont-email.me> (raw)
In-Reply-To: v5s1it$jldp$1@dont-email.me

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.
----
with Ada.Text_IO;
use Ada;
procedure parasieve1b is

    task type child is

        entry next_int(i : integer);

    end child;

    subtype offspring is child;
      -- need another name because "child" within child refers to
      -- current task, not to the type

    task body child is

        my_prime : integer;

    begin
        accept next_int(i : integer) do
            my_prime := i;
            Text_IO.Put_line(integer'image(my_prime));
        end next_int;
        declare
            subchild : offspring;
            ii : integer;
        begin
            loop
                accept next_int(i : integer) do
                    if i mod my_prime /= 0 then
                        ii := i;
                    else
                        ii := 0;
                    end if;
                end next_int;
                if ii /= 0 then
                    subchild.next_int(ii);
                end if;
            end loop;
        end;
    end child;

    first_child : child;
    i : integer;

begin -- parasieve1b
    i := 1;
    loop
        i := i + 1;
        first_child.next_int(i);
    end loop;
end parasieve1b;

  reply	other threads:[~2024-07-01  0:02 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 [this message]
2024-07-01  9:17       ` J-P. Rosen
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