On 2023/12/21 19:42, Thomas Schwinge wrote:
Hi!
On 2023-12-13T21:52:29+0100, I wrote:
On 2023-12-12T02:05:26+0000, "Zhu, Lipeng" <lipeng....@intel.com> wrote:
On 2023/12/12 1:45, H.J. Lu wrote:
On Sat, Dec 9, 2023 at 7:25 PM Zhu, Lipeng <lipeng....@intel.com> wrote:
On 2023/12/9 23:23, Jakub Jelinek wrote:
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
Ok for trunk, thanks.
Thanks! Looking forward to landing to trunk.
Pushed for you.
I've just filed <https://gcc.gnu.org/PR113005>
"'libgomp.fortran/rwlock_1.f90', 'libgomp.fortran/rwlock_3.f90' execution test
timeouts".
Would you be able to look into that?
See my update in there.
Grüße
Thomas
-----------------
Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634
München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas
Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht
München, HRB 106955
Updated in https://gcc.gnu.org/PR113005. Could you help to verify if the
draft patch would fix the execution test timeout issue on your side?
diff --git a/libgomp/testsuite/libgomp.fortran/rwlock_1.f90
b/libgomp/testsuite/libgomp.fortran/rwlock_1.f90
index f90ecbeb00f..1c271ae031d 100644
--- a/libgomp/testsuite/libgomp.fortran/rwlock_1.f90
+++ b/libgomp/testsuite/libgomp.fortran/rwlock_1.f90
@@ -7,13 +7,12 @@ program main
use omp_lib
implicit none
integer:: unit_number, v1, v2, i
- character(11) :: file_name
+ character(16) :: file_name
character(3) :: async = "no"
!$omp parallel private (unit_number, v1, v2, file_name, async, i)
do i = 0, 100
unit_number = 10 + omp_get_thread_num ()
- write (file_name, "(I3, A)") unit_number, "_tst.dat"
- file_name = adjustl(file_name)
+ write (file_name, "(I5.5, A)") unit_number, "_tst.dat"
open (unit_number, file=file_name, asynchronous="yes")
! call inquire with file parameter to test find_file in unix.c
inquire (file=file_name, asynchronous=async)
Lipeng Zhu