From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Damien Mattei Newsgroups: gmane.lisp.guile.user Subject: Re: fibers,questions about thread id and mutation of vectors Date: Fri, 6 Jan 2023 16:06:27 +0100 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="24687"; mail-complaints-to="usenet@ciao.gmane.io" Cc: guile-user To: Maxime Devos Original-X-From: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Fri Jan 06 16:07:07 2023 Return-path: Envelope-to: guile-user@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pDoJG-0006C7-E1 for guile-user@m.gmane-mx.org; Fri, 06 Jan 2023 16:07:06 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pDoIu-0001dq-BM; Fri, 06 Jan 2023 10:06:44 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pDoIs-0001dU-Ov for guile-user@gnu.org; Fri, 06 Jan 2023 10:06:42 -0500 Original-Received: from mail-ej1-x629.google.com ([2a00:1450:4864:20::629]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pDoIq-0000mL-Fw for guile-user@gnu.org; Fri, 06 Jan 2023 10:06:42 -0500 Original-Received: by mail-ej1-x629.google.com with SMTP id vm8so4075485ejc.2 for ; Fri, 06 Jan 2023 07:06:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=5Oq3zThT03xTe0i44FK87CpYaagt46vNkpG2R156p/4=; b=VEw6ftCbGwhB8r2dRbyyc9Fvn0v7WLUuaNvgUbyKeVM9Zb0w9hGvi6LFMysgcF+zpU RVWZtUwF0ffl4+QKAgWurY/y4mgctIHd2F3KdkehcDV77ml2FjGj58wVQZCgOCxziS99 1tRRcqktbpWyh7NQqdwSTt24VLIfhwJbtMT8Rw1KZsV2vMm+zUb3KyvJNkgiUbItiz7t Zsr7VO31o4Icws6tr1OzcA6z2wYX/PwjyN2pbYI4hBcrCo3TxSLbEjAwpybevfIVy3au N6zTsy81Vghjl+jHW6GB1GS5T9F4PmxX0OWpzp+gK2Ommf0zqvz+WNLGdBiae43iG3Jb pG3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=5Oq3zThT03xTe0i44FK87CpYaagt46vNkpG2R156p/4=; b=4PYj7kSERr7TMFLsZJwLGf5XR/E3EJQii4pyoFKCeE+nfQdDJyPNMrB4uXcP9Dp7Di IIgLyLz7cYUqRIJOFyGEFrjdpr3tc7+P6cuaKbxfXvJ/A/xGnixjvOoamtHI1WfTGkOK vd2gE5jb2ush2r0AOm6D0lR262lCdvHT9edJzEBh7Diva8ZA2zIxaebIJ83SzIPHmZKU wIZclK0jNnj191OQRcUmDLkFYIWGTNrRS1OBUXBMhcStIV+843ASohl5zjJnbBqYl6MB 7ilesNIeoXduSosLVrCumULtdHZAkWwVUjWkNG+4mIcDZ9AXyydgpIbC8sc0C3aug7mA djFA== X-Gm-Message-State: AFqh2kpoUD5A+tgTR1gzMVKMqnNWEpbr4fhf5TQ3LaCUDR1shGtmLinj HsTH0A0fhAa5xovi6/qgoZm5nySM5CfZcHkRQd/EKkPPpnc= X-Google-Smtp-Source: AMrXdXuT8sUZDOW/wUi23RGMVMKCwQwmlsr5hx2z0fdfbJKCdNW+WCSA09Pnt2p5tl9W33vRVt6pfnfQPdIYzNQ1I3A= X-Received: by 2002:a17:906:f857:b0:835:57c9:6424 with SMTP id ks23-20020a170906f85700b0083557c96424mr7088043ejb.529.1673017598707; Fri, 06 Jan 2023 07:06:38 -0800 (PST) In-Reply-To: Received-SPF: pass client-ip=2a00:1450:4864:20::629; envelope-from=damien.mattei@gmail.com; helo=mail-ej1-x629.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: guile-user@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: General Guile related discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Original-Sender: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.lisp.guile.user:18840 Archived-At: 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 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 = # 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. >