unofficial mirror of guile-user@gnu.org 
 help / color / mirror / Atom feed
From: Damien Mattei <damien.mattei@gmail.com>
To: Maxime Devos <maximedevos@telenet.be>
Cc: guile-user <guile-user@gnu.org>
Subject: Re: fibers,questions about thread id and mutation of vectors
Date: Fri, 6 Jan 2023 16:06:27 +0100	[thread overview]
Message-ID: <CADEOadfJMG4rM1c=UcK+2+HJFx0WthZM1cXE3qX4P-+v_nOkgQ@mail.gmail.com> (raw)
In-Reply-To: <a21ee4b1-20ce-4229-882a-d7cde6d060fd@telenet.be>

yes sorry i misunderstand the fiber doc about mutation:
https://github.com/wingo/fibers/wiki/Manual#Mutation
set! and vector-set! are not wrapped.(i imaginate it ...)

reply continue below:

On Fri, Jan 6, 2023 at 3:12 PM Maxime Devos <maximedevos@telenet.be> wrote:

>
>
> On 06-01-2023 11:20, Damien Mattei wrote:
> > Hi,
> > is fibers having a way to know the thread number the code is running?
> > i, mean the equivalent of omp_get_thread_num(); in openMP.
>
> There's (current-thread), but that's just Guile; it's not
> Fibers-specific.  It's also not a number.  I don't know if it's
> equivalent to omp_get_thread_num.
>

no it returns something based on address:
scheme@(guile-user)> (current-thread)
$1 = #<thread 8814535936 (102a61d80)>
the good thing it is that it is different for each address, the bad is that
i do not know how to extract it from the result and anyway i need a number
: 0,1,2,3... ordered and  being a partition to make scheduling that each
thread deal with a part of the array (vector) the way it is in OpenMP like
in the FOR example i posted a week ago

>
>
> > let many thread access a vector
> > without time penalty if the index access are differents? (because if
> index
> > are different there is no real concurrency)
>
> I've heard there is some kind of CPU cache migration penalty when
> mutating and reading nearby regions of memory from different CPUs, but
> that's CPU stuff, not fibers-specific or even Guile-specific stuff.
>

yes it is true

>
> Going by your previous question 'does fibers have a way to determine the
> thread is running on', I'm assuming your vector has entries per-thread
> and the fibers modify the per-thread entry (maybe some kind of
> accumulator?).
>
> Regardless of the time penalty, it's probably unsafe, because due to
> scheduling, the thread on which a fiber runs can change over time --
> between determining the index and writing to the vector, the thread can
> have changed.


! if the code change of thread the organisation of computation is
completely broken
in OpenMP (and GPUs too) a thread keep it jobs until it is finished , data
are sliced between threads at beginning, each thread use its number id  to
retrieve and compute the data of the array (array defined in shared memory)
there is no concurrency (unless in cpu cache as you mentioned it but i do
not know how openMP deal with that) as each thread use separate regions of
the array (vector)

> So you'd have to do 'atomic-box-compare-and-swap!' stuff,
> but then you have a time penalty.  Or use 'call-with-blocked-asyncs'
> appropriately to temporarily block preemption.
>
> Anyway, this reads as an 'XY problem'
> (
> https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem/66378#66378);
>
> instead of asking about your attempted solution, could you say what
> problem you are trying to solve?
>

just do a 'for like in openMP (mentioned above)
i undertand fibers is better for scheduling web server request but not for
parallelizing like openMP - it is two differents world.

Regards,
Damien

note: a little question again:
i try to use

int omp_get_max_threads(void);

https://www.openmp.org/spec-html/5.0/openmpsu112.html

from guile with:
(define libomp (dynamic-link "libomp"))

(define omp-get-max-threads
  (pointer->procedure int
                      (dynamic-func "omp_get_max_threads" libomp)
                      (list void)))

but i get this error:
ice-9/boot-9.scm:1685:16: In procedure raise-exception:
In procedure pointer->procedure: Wrong type argument in position 3: 0

i do not understand why.


> Greetings,
> Maxime.
>


  reply	other threads:[~2023-01-06 15:06 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-06 10:20 fibers,questions about thread id and mutation of vectors Damien Mattei
2023-01-06 14:12 ` Maxime Devos
2023-01-06 15:06   ` Damien Mattei [this message]
2023-01-06 17:06     ` Damien Mattei
2023-01-06 17:06     ` Maxime Devos
2023-01-13 11:10       ` Damien Mattei
2023-01-13 12:23         ` Maxime Devos
2023-01-17  9:42           ` Damien Mattei

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/guile/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CADEOadfJMG4rM1c=UcK+2+HJFx0WthZM1cXE3qX4P-+v_nOkgQ@mail.gmail.com' \
    --to=damien.mattei@gmail.com \
    --cc=guile-user@gnu.org \
    --cc=maximedevos@telenet.be \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).