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)