public inbox for fortran@gcc.gnu.org
 help / color / mirror / Atom feed
From: Jakub Jelinek <jakub@redhat.com>
To: Lipeng Zhu <lipeng.zhu@intel.com>
Cc: fortran@gcc.gnu.org, gcc-patches@gcc.gnu.org,
	hongjiu.lu@intel.com, pan.deng@intel.com, rep.dot.nop@gmail.com,
	tianyou.li@intel.com, tkoenig@netcologne.de,
	wangyang.guo@intel.com
Subject: Re: [PATCH v7] libgfortran: Replace mutex with rwlock
Date: Sat, 9 Dec 2023 16:23:25 +0100	[thread overview]
Message-ID: <ZXSGbQXoJibFMAW8@tucnak> (raw)
In-Reply-To: <20231209153944.3746165-1-lipeng.zhu@intel.com>

On Sat, Dec 09, 2023 at 10:39:45AM -0500, Lipeng Zhu 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 gain around 9x in our test
> server with 220 cores. The benchmark we used is
> https://github.com/rwesson/NEAT
> 
> libgcc/ChangeLog:
> 
> 	* gthr-posix.h (__GTHREAD_RWLOCK_INIT): New macro.
> 	(__gthrw): New function.
> 	(__gthread_rwlock_rdlock): New function.
> 	(__gthread_rwlock_tryrdlock): New function.
> 	(__gthread_rwlock_wrlock): New function.
> 	(__gthread_rwlock_trywrlock): New function.
> 	(__gthread_rwlock_unlock): New function.
> 
> libgfortran/ChangeLog:
> 
> 	* io/async.c (DEBUG_LINE): New macro.
> 	* io/async.h (RWLOCK_DEBUG_ADD): New macro.
> 	(CHECK_RDLOCK): New macro.
> 	(CHECK_WRLOCK): New macro.
> 	(TAIL_RWLOCK_DEBUG_QUEUE): New macro.
> 	(IN_RWLOCK_DEBUG_QUEUE): New macro.
> 	(RDLOCK): New macro.
> 	(WRLOCK): New macro.
> 	(RWUNLOCK): New macro.
> 	(RD_TO_WRLOCK): New macro.
> 	(INTERN_RDLOCK): New macro.
> 	(INTERN_WRLOCK): New macro.
> 	(INTERN_RWUNLOCK): New macro.
> 	* io/io.h (struct gfc_unit): Change UNIT_LOCK to UNIT_RWLOCK in
> 	a comment.
> 	(unit_lock): Remove including associated internal_proto.
> 	(unit_rwlock): New declarations including associated internal_proto.
> 	(dec_waiting_unlocked): Use WRLOCK and RWUNLOCK on unit_rwlock
> 	instead of __gthread_mutex_lock and __gthread_mutex_unlock on
> 	unit_lock.
> 	* io/transfer.c (st_read_done_worker): Use WRLOCK and RWUNLOCK on
> 	unit_rwlock instead of LOCK and UNLOCK on unit_lock.
> 	(st_write_done_worker): Likewise.
> 	* io/unit.c: Change UNIT_LOCK to UNIT_RWLOCK in 'IO locking rules'
> 	comment. Use unit_rwlock variable instead of unit_lock variable.
> 	(get_gfc_unit_from_unit_root): New function.
> 	(get_gfc_unit): Use RDLOCK, WRLOCK and RWUNLOCK on unit_rwlock
> 	instead of LOCK and UNLOCK on unit_lock.
> 	(close_unit_1): Use WRLOCK and RWUNLOCK on unit_rwlock instead of
> 	LOCK and UNLOCK on unit_lock.
> 	(close_units): Likewise.
> 	(newunit_alloc): Use RWUNLOCK on unit_rwlock instead of UNLOCK on
> 	unit_lock.
> 	* io/unix.c (find_file): Use RDLOCK and RWUNLOCK on unit_rwlock
> 	instead of LOCK and UNLOCK on unit_lock.
> 	(flush_all_units): Use WRLOCK and RWUNLOCK on unit_rwlock instead
> 	of LOCK and UNLOCK on unit_lock.

Ok for trunk, thanks.

	Jakub


  reply	other threads:[~2023-12-09 15:23 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-09  2:32 [PATCH v4] " Zhu, Lipeng
2023-05-16  7:08 ` Zhu, Lipeng
2023-05-23  2:53   ` Zhu, Lipeng
2023-05-24 19:18     ` Thomas Koenig
2023-08-18  3:06       ` Zhu, Lipeng
2023-09-14  8:33         ` Zhu, Lipeng
2023-10-23  1:21           ` Zhu, Lipeng
2023-10-23  5:52             ` Thomas Koenig
2023-10-23 23:59               ` Zhu, Lipeng
2023-11-01 10:14                 ` Zhu, Lipeng
2023-11-02  9:58                   ` Bernhard Reutner-Fischer
2023-11-23  9:36                     ` Zhu, Lipeng
2023-12-07  5:18                       ` Zhu, Lipeng
2023-08-18  3:18       ` [PATCH v6] " Zhu, Lipeng
2023-12-08 10:19         ` Jakub Jelinek
2023-12-09 15:13           ` Zhu, Lipeng
2023-12-09 15:39             ` [PATCH v7] " Lipeng Zhu
2023-12-09 15:23               ` Jakub Jelinek [this message]
2023-12-10  3:25                 ` Zhu, Lipeng
2023-12-11 17:45                   ` H.J. Lu
2023-12-12  2:05                     ` Zhu, Lipeng
2023-12-13 20:52                       ` Thomas Schwinge
2023-12-14  2:28                         ` Zhu, Lipeng
2023-12-14 12:29                           ` Thomas Schwinge
2023-12-14 12:39                             ` Jakub Jelinek
2023-12-15  5:43                               ` Zhu, Lipeng
2023-12-21 11:42                         ` Thomas Schwinge
2023-12-22  6:48                           ` Lipeng Zhu
2024-01-03  9:14                           ` Lipeng Zhu
2024-01-17 13:25                             ` Lipeng Zhu
2023-12-14 15:50               ` Richard Earnshaw (lists)
2023-12-15 11:31                 ` Lipeng Zhu
2023-12-15 19:23                   ` Richard Earnshaw
2024-01-02 11:57                     ` Vaseeharan Vinayagamoorthy
2024-01-03  1:02                       ` Lipeng Zhu

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

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

  git send-email \
    --in-reply-to=ZXSGbQXoJibFMAW8@tucnak \
    --to=jakub@redhat.com \
    --cc=fortran@gcc.gnu.org \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=hongjiu.lu@intel.com \
    --cc=lipeng.zhu@intel.com \
    --cc=pan.deng@intel.com \
    --cc=rep.dot.nop@gmail.com \
    --cc=tianyou.li@intel.com \
    --cc=tkoenig@netcologne.de \
    --cc=wangyang.guo@intel.com \
    /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).