From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-oi1-x22c.google.com (mail-oi1-x22c.google.com [IPv6:2607:f8b0:4864:20::22c]) by sourceware.org (Postfix) with ESMTPS id 1D44B3858D35; Tue, 27 Dec 2022 16:34:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 1D44B3858D35 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-oi1-x22c.google.com with SMTP id n8so6043334oih.0; Tue, 27 Dec 2022 08:34:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=vfyssHhSQ0eRzddP11Gz4rVrLwwOX93hKMCcVdNi0S4=; b=BAS/n2C+O2g+OHIKw62BPhV4y+EPU+LExWbto8TIuzeYYHFy9Ax0bQfSBj44aElNuO AXqbIuO0FDfsVVqKgM669ubpwkWDFAc1Ae4IoKZEA7y/Cg36DHQHMMC8Ahlrx5p53zM9 yjzdnOGc9MLUPAmV60SCq0raUKG0Y84oKCDpt6iKn3cEfLHlg9A06TDtq1slf+mAo/uV A6Z4FX+Zq31X963zriGWU8ARWjq2nl2DPv5JATXxk28TNpyVHwK2gWxSwZh8/J/oFm1x liWVsb4kCpHlOs+DRQP569txbF/EvMbepgbd1CnSDIeJKekO/DSd11eGansoQS/N/YYq BRKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding: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=vfyssHhSQ0eRzddP11Gz4rVrLwwOX93hKMCcVdNi0S4=; b=nIdPTs3LqPWMEDeg5NB0cIrkAAGzGZbFmYBDMu3fbpoIUCNgAs6/eDCxGV2A8IMv4W v57H00kO232cExrD8NyQY9tiPLOO/WZxfO8J5f+msnjeV/Q7ER4fnDYboIt99egSA/Pd DCsAmLmio+OEVABDHQG+q7spkf9y1GUsTLXHdi5VtlGs5fENqY4WmsOmc7DzorMEulkH sO/lK4p2RSKTfzORT20XAECQrGJYjNs2wxv5oLseENvfPXll/aLFOcO9NzMf1aiusoDF +36BxhEogrEA1/Q+evEM5MdKPMhTd92k+50sjZkitRkrLJDUgSR6beB0cxRIvvnXDHgL beEA== X-Gm-Message-State: AFqh2kqbDpGClIKAMLUkFfkry8kBIXlGYjY6Sa4DBboUTAkb9OZGWqZE pE49C5U6NqQ2CYzc8tn1JPWxqHSJ/Z/3KRyk40o= X-Google-Smtp-Source: AMrXdXvngcDAuWpOANOCoUNnXl9xJAnZkcYnch3SDBKQ1rETChoOaJ3u3rmrkiT38pN3TuZHM2JqNyI05bfOR5YM30M= X-Received: by 2002:a05:6808:697:b0:35b:c6c4:7a33 with SMTP id k23-20020a056808069700b0035bc6c47a33mr1347151oig.266.1672158874338; Tue, 27 Dec 2022 08:34:34 -0800 (PST) MIME-Version: 1.0 References: <20221222002711.116962-1-lipeng.zhu@intel.com> In-Reply-To: From: "H.J. Lu" Date: Tue, 27 Dec 2022 08:33:58 -0800 Message-ID: Subject: Re: [PATCH] libgfortran: Replace mutex with rwlock To: sgk@troutmask.apl.washington.edu Cc: Lipeng Zhu via Fortran , gcc-patches@gcc.gnu.org, tianyou.li@intel.com, pan.deng@intel.com, lipeng.zhu@intel.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-3017.3 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On Sun, Dec 25, 2022 at 4:58 PM Steve Kargl via Gcc-patches wrote: > > On Wed, Dec 21, 2022 at 07:27:11PM -0500, Lipeng Zhu via Fortran wrote: > > This patch try to introduce the rwlock and split the read/write to > > unit_root tree and unit_cache with rwlock instead of the mutex to > > increase CPU efficiency. In the get_gfc_unit function, the percentage > > to step into the insert_unit function is around 30%, in most instances, > > we can get the unit in the phase of reading the unit_cache or unit_root > > tree. So split the read/write phase by rwlock would be an approach to > > make it more parallel. > > > > BTW, the IPC metrics can increase from 0.25 to 2.2 in the Intel > > SRP server with 220 cores. The benchmark we used is > > https://github.com/rwesson/NEAT > > > > The patch fails bootstrap on x86_64-*-freebsd. > > gmake[6]: Entering directory '/home/kargl/gcc/obj/x86_64-unknown-freebsd1= 4.0/libstdc++-v3/src/c++17' > /bin/sh ../../libtool --tag CXX --tag disable-shared --mode=3Dcompile /= home/kargl/gcc/obj/./gcc/xgcc -shared-libgcc -B/home/kargl/gcc/obj/./gcc -n= ostdinc++ -L/home/kargl/gcc/obj/x86_64-unknown-freebsd14.0/libstdc++-v3/src= -L/home/kargl/gcc/obj/x86_64-unknown-freebsd14.0/libstdc++-v3/src/.libs -L= /home/kargl/gcc/obj/x86_64-unknown-freebsd14.0/libstdc++-v3/libsupc++/.libs= -B/home/kargl/work/x86_64-unknown-freebsd14.0/bin/ -B/home/kargl/work/x86_= 64-unknown-freebsd14.0/lib/ -isystem /home/kargl/work/x86_64-unknown-freebs= d14.0/include -isystem /home/kargl/work/x86_64-unknown-freebsd14.0/sys-incl= ude -fno-checking -I/home/kargl/gcc/gcc/libstdc++-v3/../libgcc -I/home/ka= rgl/gcc/obj/x86_64-unknown-freebsd14.0/libstdc++-v3/include/x86_64-unknown-= freebsd14.0 -I/home/kargl/gcc/obj/x86_64-unknown-freebsd14.0/libstdc++-v3/i= nclude -I/home/kargl/gcc/gcc/libstdc++-v3/libsupc++ -std=3Dgnu++17 -nostd= inc++ -prefer-pic -D_GLIBCXX_SHARED -fno-implicit-templates -Wall -Wextra = -Wwrite-strings -Wcast-qual -Wabi=3D2 -fdiagnostics-show-location=3Donce = -ffunction-sections -fdata-sections -frandom-seed=3Dfloating_from_chars.l= o -fimplicit-templates -g -O2 -c -o floating_from_chars.lo ../../../../..= /gcc/libstdc++-v3/src/c++17/floating_from_chars.cc > libtool: compile: /home/kargl/gcc/obj/./gcc/xgcc -shared-libgcc -B/home/= kargl/gcc/obj/./gcc -nostdinc++ -L/home/kargl/gcc/obj/x86_64-unknown-freebs= d14.0/libstdc++-v3/src -L/home/kargl/gcc/obj/x86_64-unknown-freebsd14.0/lib= stdc++-v3/src/.libs -L/home/kargl/gcc/obj/x86_64-unknown-freebsd14.0/libstd= c++-v3/libsupc++/.libs -B/home/kargl/work/x86_64-unknown-freebsd14.0/bin/ -= B/home/kargl/work/x86_64-unknown-freebsd14.0/lib/ -isystem /home/kargl/work= /x86_64-unknown-freebsd14.0/include -isystem /home/kargl/work/x86_64-unknow= n-freebsd14.0/sys-include -fno-checking -I/home/kargl/gcc/gcc/libstdc++-v3/= ../libgcc -I/home/kargl/gcc/obj/x86_64-unknown-freebsd14.0/libstdc++-v3/inc= lude/x86_64-unknown-freebsd14.0 -I/home/kargl/gcc/obj/x86_64-unknown-freebs= d14.0/libstdc++-v3/include -I/home/kargl/gcc/gcc/libstdc++-v3/libsupc++ -st= d=3Dgnu++17 -nostdinc++ -D_GLIBCXX_SHARED -fno-implicit-templates -Wall -We= xtra -Wwrite-strings -Wcast-qual -Wabi=3D2 -fdiagnostics-show-location=3Don= ce -ffunction-sections -fdata-sections -frandom-seed=3Dfloating_from_chars.= lo -fimplicit-templates -g -O2 -c ../../../../../gcc/libstdc++-v3/src/c++17= /floating_from_chars.cc -fPIC -DPIC -D_GLIBCXX_SHARED -o floating_from_cha= rs.o > In file included from /home/kargl/gcc/obj/x86_64-unknown-freebsd14.0/libs= tdc++-v3/include/memory_resource:40, > from ../../../../../gcc/libstdc++-v3/src/c++17/floating_= from_chars.cc:37: > /home/kargl/gcc/obj/x86_64-unknown-freebsd14.0/libstdc++-v3/include/share= d_mutex: In function 'int std::__glibcxx_rwlock_rdlock(pthread_rwlock**)': > /home/kargl/gcc/obj/x86_64-unknown-freebsd14.0/libstdc++-v3/include/share= d_mutex:80:3: error: call of overloaded '__gthrw_pthread_rwlock_rdlock(pthr= ead_rwlock**&)' is ambiguous > 80 | _GLIBCXX_GTHRW(rwlock_rdlock) > | ^ > In file included from /home/kargl/gcc/obj/x86_64-unknown-freebsd14.0/libs= tdc++-v3/include/x86_64-unknown-freebsd14.0/bits/gthr.h:148, > from /home/kargl/gcc/obj/x86_64-unknown-freebsd14.0/libs= tdc++-v3/include/bits/std_mutex.h:41, > from /home/kargl/gcc/obj/x86_64-unknown-freebsd14.0/libs= tdc++-v3/include/shared_mutex:41: > /home/kargl/gcc/obj/x86_64-unknown-freebsd14.0/libstdc++-v3/include/share= d_mutex:80:3: note: candidate: 'int std::__gthrw_pthread_rwlock_rdlock(pthr= ead_rwlock**)' > 80 | _GLIBCXX_GTHRW(rwlock_rdlock) > | ^~~~~~~~~~~~~~ > /home/kargl/gcc/obj/x86_64-unknown-freebsd14.0/libstdc++-v3/include/x86_6= 4-unknown-freebsd14.0/bits/gthr-default.h:140:1: note: candidate: 'int __gt= hrw_pthread_rwlock_rdlock(pthread_rwlock**)' > 140 | __gthrw(pthread_rwlock_rdlock) > | ^~~~~~~ > /home/kargl/gcc/obj/x86_64-unknown-freebsd14.0/libstdc++-v3/include/share= d_mutex: In function 'int std::__glibcxx_rwlock_tryrdlock(pthread_rwlock**)= ': > /home/kargl/gcc/obj/x86_64-unknown-freebsd14.0/libstdc++-v3/include/share= d_mutex:81:3: error: call of overloaded '__gthrw_pthread_rwlock_tryrdlock(p= thread_rwlock**&)' is ambiguous > 81 | _GLIBCXX_GTHRW(rwlock_tryrdlock) > | ^ > /home/kargl/gcc/obj/x86_64-unknown-freebsd14.0/libstdc++-v3/include/share= d_mutex:81:3: note: candidate: 'int std::__gthrw_pthread_rwlock_tryrdlock(p= thread_rwlock**)' > 81 | _GLIBCXX_GTHRW(rwlock_tryrdlock) > | ^~~~~~~~~~~~~~ > /home/kargl/gcc/obj/x86_64-unknown-freebsd14.0/libstdc++-v3/include/x86_6= 4-unknown-freebsd14.0/bits/gthr-default.h:141:1: note: candidate: 'int __gt= hrw_pthread_rwlock_tryrdlock(pthread_rwlock**)' > 141 | __gthrw(pthread_rwlock_tryrdlock) > | ^~~~~~~ > /home/kargl/gcc/obj/x86_64-unknown-freebsd14.0/libstdc++-v3/include/share= d_mutex: In function 'int std::__glibcxx_rwlock_wrlock(pthread_rwlock**)': > /home/kargl/gcc/obj/x86_64-unknown-freebsd14.0/libstdc++-v3/include/share= d_mutex:82:3: error: call of overloaded '__gthrw_pthread_rwlock_wrlock(pthr= ead_rwlock**&)' is ambiguous > 82 | _GLIBCXX_GTHRW(rwlock_wrlock) > | ^ > /home/kargl/gcc/obj/x86_64-unknown-freebsd14.0/libstdc++-v3/include/share= d_mutex:82:3: note: candidate: 'int std::__gthrw_pthread_rwlock_wrlock(pthr= ead_rwlock**)' > 82 | _GLIBCXX_GTHRW(rwlock_wrlock) > | ^~~~~~~~~~~~~~ > /home/kargl/gcc/obj/x86_64-unknown-freebsd14.0/libstdc++-v3/include/x86_6= 4-unknown-freebsd14.0/bits/gthr-default.h:142:1: note: candidate: 'int __gt= hrw_pthread_rwlock_wrlock(pthread_rwlock**)' > 142 | __gthrw(pthread_rwlock_wrlock) > | ^~~~~~~ > /home/kargl/gcc/obj/x86_64-unknown-freebsd14.0/libstdc++-v3/include/share= d_mutex: In function 'int std::__glibcxx_rwlock_trywrlock(pthread_rwlock**)= ': > /home/kargl/gcc/obj/x86_64-unknown-freebsd14.0/libstdc++-v3/include/share= d_mutex:83:3: error: call of overloaded '__gthrw_pthread_rwlock_trywrlock(p= thread_rwlock**&)' is ambiguous > 83 | _GLIBCXX_GTHRW(rwlock_trywrlock) > | ^ > /home/kargl/gcc/obj/x86_64-unknown-freebsd14.0/libstdc++-v3/include/share= d_mutex:83:3: note: candidate: 'int std::__gthrw_pthread_rwlock_trywrlock(p= thread_rwlock**)' > 83 | _GLIBCXX_GTHRW(rwlock_trywrlock) > | ^~~~~~~~~~~~~~ > /home/kargl/gcc/obj/x86_64-unknown-freebsd14.0/libstdc++-v3/include/x86_6= 4-unknown-freebsd14.0/bits/gthr-default.h:143:1: note: candidate: 'int __gt= hrw_pthread_rwlock_trywrlock(pthread_rwlock**)' > 143 | __gthrw(pthread_rwlock_trywrlock) > | ^~~~~~~ > /home/kargl/gcc/obj/x86_64-unknown-freebsd14.0/libstdc++-v3/include/share= d_mutex: In function 'int std::__glibcxx_rwlock_unlock(pthread_rwlock**)': > /home/kargl/gcc/obj/x86_64-unknown-freebsd14.0/libstdc++-v3/include/share= d_mutex:84:3: error: call of overloaded '__gthrw_pthread_rwlock_unlock(pthr= ead_rwlock**&)' is ambiguous > 84 | _GLIBCXX_GTHRW(rwlock_unlock) > | ^ > /home/kargl/gcc/obj/x86_64-unknown-freebsd14.0/libstdc++-v3/include/share= d_mutex:84:3: note: candidate: 'int std::__gthrw_pthread_rwlock_unlock(pthr= ead_rwlock**)' > 84 | _GLIBCXX_GTHRW(rwlock_unlock) > | ^~~~~~~~~~~~~~ > /home/kargl/gcc/obj/x86_64-unknown-freebsd14.0/libstdc++-v3/include/x86_6= 4-unknown-freebsd14.0/bits/gthr-default.h:144:1: note: candidate: 'int __gt= hrw_pthread_rwlock_unlock(pthread_rwlock**)' > 144 | __gthrw(pthread_rwlock_unlock) > | ^~~~~~~ > gmake[6]: *** [Makefile:585: floating_from_chars.lo] Error 1 > gmake[6]: Leaving directory '/home/kargl/gcc/obj/x86_64-unknown-freebsd14= .0/libstdc++-v3/src/c++17' > gmake[5]: *** [Makefile:784: all-recursive] Error 1 > gmake[5]: Leaving directory '/home/kargl/gcc/obj/x86_64-unknown-freebsd14= .0/libstdc++-v3/src' > gmake[4]: *** [Makefile:576: all-recursive] Error 1 > gmake[4]: Leaving directory '/home/kargl/gcc/obj/x86_64-unknown-freebsd14= .0/libstdc++-v3' > gmake[3]: *** [Makefile:501: all] Error 2 > gmake[3]: Leaving directory '/home/kargl/gcc/obj/x86_64-unknown-freebsd14= .0/libstdc++-v3' > gmake[2]: *** [Makefile:18284: all-stage1-target-libstdc++-v3] Error 2 > gmake[2]: Leaving directory '/home/kargl/gcc/obj' > gmake[1]: *** [Makefile:26171: stage1-bubble] Error 2 > gmake[1]: Leaving directory '/home/kargl/gcc/obj' > gmake: *** [Makefile:26524: bootstrap] Error 2 > > -- > steve libstdc++ implements shared mutex with pthread_rwlock, which can conflict with the pthread_rwlock usage in libgcc. Lipeng, please limit the pthread_rwlock usage in libgcc only when __cplusplus isn't defined. --=20 H.J.