From 971d9de467287db4c60cf426b185f2066a07f892 Mon Sep 17 00:00:00 2001 From: Pietro Bonfa Date: Tue, 6 Mar 2018 11:42:00 +0100 Subject: [PATCH] Real random numbers used now, paranoid data reset before tests --- UtilXlib/tests/test_mp_alltoall_gpu.tmpl | 1 + UtilXlib/tests/test_mp_bcast_gpu.tmpl | 1 + .../test_mp_circular_shift_left_gpu.tmpl | 1 + UtilXlib/tests/test_mp_gather_gpu.tmpl | 1 + UtilXlib/tests/test_mp_gatherv_gpu.tmpl | 1 + UtilXlib/tests/test_mp_get_gpu.tmpl | 1 + UtilXlib/tests/test_mp_max_gpu.tmpl | 1 + UtilXlib/tests/test_mp_min_gpu.tmpl | 1 + UtilXlib/tests/test_mp_put_gpu.tmpl | 2 ++ UtilXlib/tests/test_mp_root_sum_gpu.tmpl | 1 + UtilXlib/tests/test_mp_sum_gpu.tmpl | 1 + UtilXlib/tests/utils.f90 | 22 +++++++++++++++---- 12 files changed, 30 insertions(+), 4 deletions(-) diff --git a/UtilXlib/tests/test_mp_alltoall_gpu.tmpl b/UtilXlib/tests/test_mp_alltoall_gpu.tmpl index 503f85bc5..dff89a1a5 100644 --- a/UtilXlib/tests/test_mp_alltoall_gpu.tmpl +++ b/UtilXlib/tests/test_mp_alltoall_gpu.tmpl @@ -65,6 +65,7 @@ PROGRAM test_mp_alltoall_{vname}_gpu CALL RANDOM_NUMBER(rnd) snd_{vname}_h = {typeconv} ( 10.0 * rnd ) snd_{vname}_d = snd_{vname}_h + aux_h = 0 CALL mp_alltoall(snd_{vname}_d, rcv_{vname}_d, world_comm) CALL mp_alltoall(snd_{vname}_h, rcv_{vname}_h, world_comm) aux_h = rcv_{vname}_d diff --git a/UtilXlib/tests/test_mp_bcast_gpu.tmpl b/UtilXlib/tests/test_mp_bcast_gpu.tmpl index 70a300ab3..7c1ebe7ca 100644 --- a/UtilXlib/tests/test_mp_bcast_gpu.tmpl +++ b/UtilXlib/tests/test_mp_bcast_gpu.tmpl @@ -57,6 +57,7 @@ PROGRAM test_mp_bcast_{vname}_gpu CALL RANDOM_NUMBER(rnd) {vname}_h = {typeconv} ( 10.0 * rnd ) {vname}_d = {vname}_h + aux_h = 0 CALL mp_bcast({vname}_d, i , world_comm) CALL mp_bcast({vname}_h, i , world_comm) aux_h = {vname}_d diff --git a/UtilXlib/tests/test_mp_circular_shift_left_gpu.tmpl b/UtilXlib/tests/test_mp_circular_shift_left_gpu.tmpl index 77dca75b7..f2e35865e 100644 --- a/UtilXlib/tests/test_mp_circular_shift_left_gpu.tmpl +++ b/UtilXlib/tests/test_mp_circular_shift_left_gpu.tmpl @@ -54,6 +54,7 @@ PROGRAM test_mp_circular_shift_left_{vname}_gpu CALL RANDOM_NUMBER(rnd) {vname}_h = {typeconv} ( 10.0 * rnd ) {vname}_d = {vname}_h + aux_h = 0 CALL mp_circular_shift_left({vname}_d, 0, world_comm) CALL mp_circular_shift_left({vname}_h, 0, world_comm) aux_h = {vname}_d diff --git a/UtilXlib/tests/test_mp_gather_gpu.tmpl b/UtilXlib/tests/test_mp_gather_gpu.tmpl index 037585cfe..956bb9bd5 100644 --- a/UtilXlib/tests/test_mp_gather_gpu.tmpl +++ b/UtilXlib/tests/test_mp_gather_gpu.tmpl @@ -75,6 +75,7 @@ PROGRAM test_mp_gather_{vname}_gpu CALL RANDOM_NUMBER(rnd) {vname}_h = {typeconv} ( 10.0 * rnd ) {vname}_d = {vname}_h + aux_h = 0 CALL mp_gather({vname}_d, all_{vname}_d, i , world_comm) CALL mp_gather({vname}_h, all_{vname}_h, i , world_comm) aux_h = all_{vname}_d diff --git a/UtilXlib/tests/test_mp_gatherv_gpu.tmpl b/UtilXlib/tests/test_mp_gatherv_gpu.tmpl index 9e6879f5a..3cf2f1b99 100644 --- a/UtilXlib/tests/test_mp_gatherv_gpu.tmpl +++ b/UtilXlib/tests/test_mp_gatherv_gpu.tmpl @@ -87,6 +87,7 @@ PROGRAM test_mp_gatherv_{vname}_gpu {vname}_d = {vname}_h all_{vname}_h = {typeconv} ( -1 ) all_{vname}_d = {typeconv} ( -1 ) + aux_h = 0 CALL mp_gather({vname}_d, all_{vname}_d, recvcount , displs, i , world_comm) CALL mp_gather({vname}_h, all_{vname}_h, recvcount , displs, i , world_comm) aux_h = all_{vname}_d diff --git a/UtilXlib/tests/test_mp_get_gpu.tmpl b/UtilXlib/tests/test_mp_get_gpu.tmpl index a995e4637..f9ec20d87 100644 --- a/UtilXlib/tests/test_mp_get_gpu.tmpl +++ b/UtilXlib/tests/test_mp_get_gpu.tmpl @@ -64,6 +64,7 @@ PROGRAM test_mp_get_{vname}_gpu CALL RANDOM_NUMBER(rnd) {vname}_h = {typeconv} ( 10.0 * rnd ) {vname}_d = {vname}_h + aux_h = 0 CALL mp_get({vname}_d, {vname}_d, mpime, i, 0, 0, world_comm) CALL mp_get({vname}_h, {vname}_h, mpime, i, 0, 0, world_comm) aux_h = {vname}_d diff --git a/UtilXlib/tests/test_mp_max_gpu.tmpl b/UtilXlib/tests/test_mp_max_gpu.tmpl index b8121b1ed..2fe023582 100644 --- a/UtilXlib/tests/test_mp_max_gpu.tmpl +++ b/UtilXlib/tests/test_mp_max_gpu.tmpl @@ -54,6 +54,7 @@ PROGRAM test_mp_max_{vname}_gpu CALL RANDOM_NUMBER(rnd) {vname}_h = {typeconv} ( 10.0 * rnd ) {vname}_d = {vname}_h + aux_h = 0 CALL mp_max({vname}_d, world_comm) CALL mp_max({vname}_h, world_comm) aux_h = {vname}_d diff --git a/UtilXlib/tests/test_mp_min_gpu.tmpl b/UtilXlib/tests/test_mp_min_gpu.tmpl index 1f03b7190..9a529cda2 100644 --- a/UtilXlib/tests/test_mp_min_gpu.tmpl +++ b/UtilXlib/tests/test_mp_min_gpu.tmpl @@ -54,6 +54,7 @@ PROGRAM test_mp_min_{vname}_gpu CALL RANDOM_NUMBER(rnd) {vname}_h = {typeconv} ( 10.0 * rnd ) {vname}_d = {vname}_h + aux_h = 0 CALL mp_min({vname}_d, world_comm) CALL mp_min({vname}_h, world_comm) aux_h = {vname}_d diff --git a/UtilXlib/tests/test_mp_put_gpu.tmpl b/UtilXlib/tests/test_mp_put_gpu.tmpl index 621a2968e..536c082d6 100644 --- a/UtilXlib/tests/test_mp_put_gpu.tmpl +++ b/UtilXlib/tests/test_mp_put_gpu.tmpl @@ -54,6 +54,7 @@ PROGRAM test_mp_put_{vname}_gpu CALL RANDOM_NUMBER(rnd) {vname}_h = {typeconv} ( 10.0 * rnd ) {vname}_d = {vname}_h + aux_h = 0 CALL mp_put({vname}_d, {vname}_d, mpime, 0, i, 0, world_comm) CALL mp_put({vname}_h, {vname}_h, mpime, 0, i, 0, world_comm) aux_h = {vname}_d @@ -64,6 +65,7 @@ PROGRAM test_mp_put_{vname}_gpu CALL RANDOM_NUMBER(rnd) {vname}_h = {typeconv} ( 10.0 * rnd ) {vname}_d = {vname}_h + aux_h = 0 CALL mp_put({vname}_d, {vname}_d, mpime, i, 0, 0, world_comm) CALL mp_put({vname}_h, {vname}_h, mpime, i, 0, 0, world_comm) aux_h = {vname}_d diff --git a/UtilXlib/tests/test_mp_root_sum_gpu.tmpl b/UtilXlib/tests/test_mp_root_sum_gpu.tmpl index 71fa4f4e6..963007e3a 100644 --- a/UtilXlib/tests/test_mp_root_sum_gpu.tmpl +++ b/UtilXlib/tests/test_mp_root_sum_gpu.tmpl @@ -56,6 +56,7 @@ PROGRAM test_mp_root_sum_{vname}_gpu CALL RANDOM_NUMBER(rnd) {vname}_h = {typeconv} ( 10.0 * rnd ) {vname}_d = {vname}_h + aux_h = 0 CALL mp_root_sum({vname}_d, root_{vname}_d, i , world_comm) CALL mp_root_sum({vname}_h, root_{vname}_h, i , world_comm) IF (mpime == i) THEN diff --git a/UtilXlib/tests/test_mp_sum_gpu.tmpl b/UtilXlib/tests/test_mp_sum_gpu.tmpl index 58a9181fa..af81954ba 100644 --- a/UtilXlib/tests/test_mp_sum_gpu.tmpl +++ b/UtilXlib/tests/test_mp_sum_gpu.tmpl @@ -57,6 +57,7 @@ PROGRAM test_mp_sum_{vname}_gpu CALL RANDOM_NUMBER(rnd) {vname}_h = {typeconv} ( 10.0 * rnd ) {vname}_d = {vname}_h + aux_h = 0 CALL mp_sum({vname}_d, world_comm) CALL mp_sum({vname}_h, world_comm) aux_h = {vname}_d diff --git a/UtilXlib/tests/utils.f90 b/UtilXlib/tests/utils.f90 index 483c005c2..990eb8158 100644 --- a/UtilXlib/tests/utils.f90 +++ b/UtilXlib/tests/utils.f90 @@ -37,14 +37,28 @@ SUBROUTINE save_random_seed(test_name, mpime) CHARACTER(len=*), INTENT(IN) :: test_name INTEGER, INTENT(IN) :: mpime ! - INTEGER, PARAMETER :: out_unit=20 - CHARACTER(len=60) :: fname - INTEGER :: n + INTEGER, PARAMETER :: in_unit=20, out_unit=21 + CHARACTER(len=80) :: fname + INTEGER :: n, istat INTEGER, ALLOCATABLE :: seed(:) ! CALL random_seed(size = n) ALLOCATE(seed(n)) - CALL random_seed(get=seed) + + ! First try if the OS provides a random number generator + OPEN(UNIT=in_unit, file="/dev/urandom", access="stream", & + form="unformatted", action="read", status="old", iostat=istat) + + IF (istat == 0) THEN + READ(in_unit) seed + CLOSE(in_unit) + ELSE + ! Fallback to stupid algorithm. Actually we do not really need + ! high-quality random numbers + CALL random_seed(get=seed) + seed = seed + mpime + CALL random_seed(put=seed) + END IF ! WRITE(fname, '("rnd_seed_",A,I4.4)') TRIM(test_name), mpime fname = TRIM(fname)