Skip to content

Commit 31ba57b

Browse files
srinidhsgitSrinidhi S
authored and
Srinidhi S
committed
Test Suite Enhancements for PxLAHQR
Extreme value test cases for PxLAHRQ Signed-off-by: Srinidhi S <[email protected]> AMD-Internal: [CPUPL-6271] Change-Id: I5dd80a9cfac53af5b23ebd5deaa68357954fd547
1 parent cb09e5e commit 31ba57b

File tree

4 files changed

+484
-24
lines changed

4 files changed

+484
-24
lines changed

TESTING/EIG/pcnepdriver.f

Lines changed: 121 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ PROGRAM PCNEPDRIVER
44
* University of Tennessee, Knoxville, Oak Ridge National Laboratory,
55
* and University of California, Berkeley.
66
* March, 2000
7-
* Modifications Copyright (c) 2024 Advanced Micro Devices, Inc. All rights reserved.
7+
* Modifications Copyright (c) 2024-2025 Advanced Micro Devices, Inc. All rights reserved.
88
*
99
* Purpose
1010
* =======
@@ -61,6 +61,7 @@ PROGRAM PCNEPDRIVER
6161
*
6262
* =====================================================================
6363
*
64+
use,intrinsic :: ieee_arithmetic
6465
* .. Parameters ..
6566
INTEGER BLOCK_CYCLIC_2D, CSRC_, CTXT_, DLEN_, DT_,
6667
$ LLD_, MB_, M_, NB_, N_, RSRC_
@@ -122,6 +123,14 @@ PROGRAM PCNEPDRIVER
122123
* ..
123124
* .. Data statements ..
124125
DATA KFAIL, KPASS, KSKIP, KTESTS / 4*0 /
126+
* Take command-line arguments if requested
127+
CHARACTER*80 arg
128+
INTEGER numArgs, count
129+
LOGICAL :: help_flag = .FALSE.
130+
LOGICAL :: EX_FLAG = .FALSE., RES_FLAG = .FALSE.
131+
INTEGER :: INF_PERCENT = 0
132+
INTEGER :: NAN_PERCENT = 0
133+
DOUBLE PRECISION :: X
125134
* ..
126135
* .. Executable Statements ..
127136
*
@@ -136,6 +145,33 @@ PROGRAM PCNEPDRIVER
136145
$ NTESTS, NGRIDS, PVAL, NTESTS, QVAL, NTESTS,
137146
$ THRESH, MEM, IAM, NPROCS )
138147
CHECK = ( THRESH.GE.0.0E+0 )
148+
*
149+
numArgs = command_argument_count()
150+
* Process command-line arguments
151+
do count = 1, numArgs, 2
152+
call get_command_argument(count, arg)
153+
select case (arg)
154+
case ("-h", "--help")
155+
help_flag = .true.
156+
exit
157+
case ("-inf")
158+
call get_command_argument(count + 1, arg)
159+
read(arg, *) INF_PERCENT
160+
IF (INF_PERCENT .GT. 0) THEN
161+
EX_FLAG = .TRUE.
162+
END IF
163+
case ("-nan")
164+
call get_command_argument(count + 1, arg)
165+
read(arg, *) NAN_PERCENT
166+
IF (NAN_PERCENT .GT. 0) THEN
167+
EX_FLAG = .TRUE.
168+
END IF
169+
case default
170+
print *, "Invalid option: ", arg
171+
help_flag = .true.
172+
exit
173+
end select
174+
end do
139175
*
140176
* Print headings
141177
*
@@ -155,6 +191,7 @@ PROGRAM PCNEPDRIVER
155191
*
156192
* Make sure grid information is correct
157193
*
194+
#ifdef ENABLE_DRIVER_CHECK
158195
IERR( 1 ) = 0
159196
IF( NPROW.LT.1 ) THEN
160197
IF( IAM.EQ.0 )
@@ -176,6 +213,7 @@ PROGRAM PCNEPDRIVER
176213
KSKIP = KSKIP + 1
177214
GO TO 30
178215
END IF
216+
#endif
179217
*
180218
* Define process grid
181219
*
@@ -206,6 +244,7 @@ PROGRAM PCNEPDRIVER
206244
*
207245
* Check all processes for an error
208246
*
247+
#ifdef ENABLE_DRIVER_CHECK
209248
CALL IGSUM2D( ICTXT, 'All', ' ', 1, 1, IERR, 1, -1, 0 )
210249
*
211250
IF( IERR( 1 ).GT.0 ) THEN
@@ -214,6 +253,7 @@ PROGRAM PCNEPDRIVER
214253
KSKIP = KSKIP + 1
215254
GO TO 20
216255
END IF
256+
#endif
217257
*
218258
DO 10 K = 1, NNB
219259
*
@@ -230,6 +270,7 @@ PROGRAM PCNEPDRIVER
230270
*
231271
* Check all processes for an error
232272
*
273+
#ifdef ENABLE_DRIVER_CHECK
233274
CALL IGSUM2D( ICTXT, 'All', ' ', 1, 1, IERR, 1, -1, 0 )
234275
*
235276
IF( IERR( 1 ).GT.0 ) THEN
@@ -238,6 +279,7 @@ PROGRAM PCNEPDRIVER
238279
KSKIP = KSKIP + 1
239280
GO TO 10
240281
END IF
282+
#endif
241283
*
242284
* Padding constants
243285
*
@@ -292,6 +334,21 @@ PROGRAM PCNEPDRIVER
292334
$ IERR( 2 ).EQ.-2 .OR.
293335
$ IERR( 2 ).EQ. -8 .OR.
294336
$ IERR( 2 ).EQ. -4) ) THEN
337+
* If DESCINIT is returning correct error code we need to pass
338+
* and it will be ScaLAPACK API
339+
WRITE( NOUT, FMT = 9983 ) 'N'
340+
* disable extreme value case when N < 0
341+
EX_FLAG = .FALSE.
342+
ELSE IF(N .EQ. 0 .AND. (IERR(1) .EQ. 0 .OR.
343+
$ IERR(1) .EQ. -5 .OR. IERR(1) .EQ. -10 .OR.
344+
$ IERR(1) .EQ. -15 .OR. IERR(1) .EQ. -20 )) THEN
345+
* DESCINIT returns the correct error code,
346+
* When N = 0,
347+
* -5, -10 or -20 incase of incorrect grid info
348+
* MAIN API can be validated.
349+
* Do NOTHING
350+
* disable extreme value case when N = 0
351+
EX_FLAG = .FALSE.
295352
WRITE ( NOUT, FMT = 9984 ) 'PCLAHQR'
296353
ELSE IF( IERR( 1 ).LT.0 .OR. IERR( 2 ).LT.0 ) THEN
297354
IF( IAM.EQ.0 )
@@ -410,15 +467,16 @@ PROGRAM PCNEPDRIVER
410467
CALL SLTIMER( 1 )
411468
*
412469
IF( INFO.NE.0 ) THEN
413-
IF( IAM.EQ.0 )
470+
IF( IAM.EQ.0 .AND. .NOT.(EX_FLAG) )
414471
$ WRITE( NOUT, FMT = * )'PCLAHQR INFO=', INFO
415472
* If N < 0 in NEP.dat file then PCLAHQR API
416473
* sets INFO = -5
417474
IF (N.LT.0 .AND. INFO.EQ.-5) THEN
418475
* If PCLAHQR is returning correct error
419476
* code we need to pass this case
420477
WRITE( NOUT, FMT = 9983 ) 'PCLAHQR'
421-
ELSE IF ( N.GT.1 .AND. INFO.NE.0 ) THEN
478+
ELSE IF ( N.GT.1 .AND. INFO.NE.0
479+
$ .AND. .NOT.EX_FLAG ) THEN
422480
KFAIL = KFAIL + 1
423481
GO TO 10
424482
END IF
@@ -428,7 +486,7 @@ PROGRAM PCNEPDRIVER
428486
WRITE( NOUT, FMT = 9982 ) 'PCLAHQR'
429487
END IF
430488
*
431-
IF( CHECK .AND. INFO.EQ.0 ) THEN
489+
IF( CHECK .AND. INFO.EQ.0 .AND. .NOT.(EX_FLAG) ) THEN
432490
*
433491
* Check for memory overwrite in NEP factorization
434492
*
@@ -480,7 +538,33 @@ PROGRAM PCNEPDRIVER
480538
*
481539
* Test residual and detect NaN result
482540
*
483-
IF( ( FRESID.LE.THRESH ) .AND.
541+
IF( N .EQ. 0 .AND. (INFO .EQ. -4 .OR.
542+
$ INFO .EQ. 0)) THEN
543+
* If N =0 this is the case of
544+
* early return from ScaLAPACK API.
545+
* If there is safe exit from API; pass this case
546+
KPASS = KPASS + 1
547+
WRITE( NOUT, FMT = 9984 ) 'PCLAHQR'
548+
PASSED = 'PASSED'
549+
* Re-enable EX_FLAG
550+
IF(NAN_PERCENT .GT. 0 .OR.
551+
$ INF_PERCENT .GT. 0) THEN
552+
EX_FLAG = .TRUE.
553+
END IF
554+
ELSE IF(N .LT. 0 .AND. (INFO .EQ. -2 .OR.
555+
$ INFO .EQ. -804 )) THEN
556+
* When N < 0/Invalid, PCLAHQR INFO = -1
557+
* Expected Error code for N < 0
558+
* Hence this case can be passed
559+
KPASS = KPASS + 1
560+
WRITE( NOUT, FMT = 9982 ) 'PCLAHQR'
561+
PASSED = 'PASSED'
562+
* Re-enable EX_FLAG
563+
IF(NAN_PERCENT .GT. 0 .OR.
564+
$ INF_PERCENT .GT. 0) THEN
565+
EX_FLAG = .TRUE.
566+
END IF
567+
ELSE IF( ( FRESID.LE.THRESH ).AND.
484568
$ ( ( FRESID-FRESID ).EQ.0.0E+0 ) .AND.
485569
$ ( QRESID.LE.THRESH ) .AND.
486570
$ ( ( QRESID-QRESID ).EQ.0.0E+0 ) ) THEN
@@ -499,8 +583,39 @@ PROGRAM PCNEPDRIVER
499583
END IF
500584
END IF
501585
*
502-
ELSE
586+
* Extreme-value validation block
587+
ELSE IF(EX_FLAG) THEN
588+
* Check presence of INF/NAN in output
589+
* Pass the case if present
590+
DO IK = 0, N-1
591+
DO JK = 1, N
592+
X = (MEM(IK*N + JK))
593+
IF (isnan(X)) THEN
594+
* NAN DETECTED
595+
RES_FLAG = .TRUE.
596+
EXIT
597+
ELSE IF (.NOT.ieee_is_finite(
598+
$ X)) THEN
599+
* INFINITY DETECTED
600+
RES_FLAG = .TRUE.
601+
EXIT
602+
END IF
603+
END DO
604+
IF(RES_FLAG) THEN
605+
EXIT
606+
END IF
607+
END DO
608+
IF (.NOT.(RES_FLAG)) THEN
609+
KFAIL = KFAIL + 1
610+
PASSED = 'FAILED'
611+
ELSE
612+
KPASS = KPASS + 1
613+
PASSED = 'PASSED'
614+
* RESET RESIDUAL FLAG
615+
RES_FLAG = .FALSE.
616+
END IF
503617
*
618+
ELSE
504619
* Don't perform the checking, only timing
505620
*
506621
KPASS = KPASS + 1

0 commit comments

Comments
 (0)