Skip to content

Commit f4e1707

Browse files
committed
Avoid calling CDOTC, ZDOTC, CDOTU, ZDOTU
These BLAS functions return a complex number and this may produce ABI conflict if using a BLAS compiled with a Fortran compiler with different calling convention (e.g. macOS Accelerate framework). Use an equivalent subroutine instead.
1 parent 681a6cf commit f4e1707

File tree

19 files changed

+227
-102
lines changed

19 files changed

+227
-102
lines changed

PBLAS/SRC/PTZBLAS/cvvdotc.f

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,16 @@ SUBROUTINE CVVDOTC( N, DOT, X, INCX, Y, INCY )
5454
*
5555
* =====================================================================
5656
*
57-
* .. External Functions ..
58-
COMPLEX CDOTC
59-
EXTERNAL CDOTC
57+
* .. Local Scalars ..
58+
COMPLEX DOTC
59+
* ..
60+
* .. External Subroutines ..
61+
EXTERNAL CCDOTC
6062
* ..
6163
* .. Executable Statements ..
6264
*
63-
DOT = DOT + CDOTC( N, X, INCX, Y, INCY )
65+
CALL CCDOTC( N, DOTC, X, INCX, Y, INCY )
66+
DOT = DOT + DOTC
6467
*
6568
RETURN
6669
*

PBLAS/SRC/PTZBLAS/cvvdotu.f

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,16 @@ SUBROUTINE CVVDOTU( N, DOT, X, INCX, Y, INCY )
5454
*
5555
* =====================================================================
5656
*
57-
* .. External Functions ..
58-
COMPLEX CDOTU
59-
EXTERNAL CDOTU
57+
* .. Local Scalars ..
58+
COMPLEX DOTU
59+
* ..
60+
* .. External Subroutines ..
61+
EXTERNAL CCDOTU
6062
* ..
6163
* .. Executable Statements ..
6264
*
63-
DOT = DOT + CDOTU( N, X, INCX, Y, INCY )
65+
CALL CCDOTU( N, DOTU, X, INCX, Y, INCY )
66+
DOT = DOT + DOTU
6467
*
6568
RETURN
6669
*

PBLAS/SRC/PTZBLAS/zvvdotc.f

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,16 @@ SUBROUTINE ZVVDOTC( N, DOT, X, INCX, Y, INCY )
5454
*
5555
* =====================================================================
5656
*
57-
* .. External Functions ..
58-
COMPLEX*16 ZDOTC
59-
EXTERNAL ZDOTC
57+
* .. Local Scalars ..
58+
COMPLEX*16 DOTC
59+
* ..
60+
* .. External Subroutines ..
61+
EXTERNAL ZZDOTC
6062
* ..
6163
* .. Executable Statements ..
6264
*
63-
DOT = DOT + ZDOTC( N, X, INCX, Y, INCY )
65+
CALL ZZDOTC( N, DOTC, X, INCX, Y, INCY )
66+
DOT = DOT + DOTC
6467
*
6568
RETURN
6669
*

PBLAS/SRC/PTZBLAS/zvvdotu.f

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,16 @@ SUBROUTINE ZVVDOTU( N, DOT, X, INCX, Y, INCY )
5454
*
5555
* =====================================================================
5656
*
57-
* .. External Functions ..
58-
COMPLEX*16 ZDOTU
59-
EXTERNAL ZDOTU
57+
* .. Local Scalars ..
58+
COMPLEX*16 DOTU
59+
* ..
60+
* .. External Subroutines ..
61+
EXTERNAL ZZDOTU
6062
* ..
6163
* .. Executable Statements ..
6264
*
63-
DOT = DOT + ZDOTU( N, X, INCX, Y, INCY )
65+
CALL ZZDOTU( N, DOTU, X, INCX, Y, INCY )
66+
DOT = DOT + DOTU
6467
*
6568
RETURN
6669
*

SRC/pcdttrf.f

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -376,22 +376,22 @@ SUBROUTINE PCDTTRF( N, DL, D, DU, JA, DESCA, AF, LAF, WORK, LWORK,
376376
$ NB, NP, NPCOL, NPROW, NP_SAVE, ODD_SIZE,
377377
$ PART_OFFSET, PART_SIZE, RETURN_CODE, STORE_N_A,
378378
$ TEMP, WORK_SIZE_MIN, WORK_U
379+
COMPLEX DOTC
379380
* ..
380381
* .. Local Arrays ..
381382
INTEGER DESCA_1XP( 7 ), PARAM_CHECK( 7, 3 )
382383
* ..
383384
* .. External Subroutines ..
384385
EXTERNAL BLACS_GET, BLACS_GRIDEXIT, BLACS_GRIDINFO,
385-
$ CAXPY, CGEMM, CGERV2D, CGESD2D, CLAMOV,
386+
$ CAXPY, CCDOTC, CGEMM, CGERV2D, CGESD2D, CLAMOV,
386387
$ CLATCPY, CPBTRF, CPOTRF, CSYRK, CTBTRS, CTRMM,
387388
$ CTRRV2D, CTRSD2D, CTRSM, CTRTRS, DESC_CONVERT,
388389
$ GLOBCHK, PXERBLA, RESHAPE
389390
* ..
390391
* .. External Functions ..
391392
LOGICAL LSAME
392393
INTEGER NUMROC
393-
COMPLEX CDOTC
394-
EXTERNAL CDOTC, LSAME, NUMROC
394+
EXTERNAL LSAME, NUMROC
395395
* ..
396396
* .. Intrinsic Functions ..
397397
INTRINSIC ICHAR, MIN, MOD
@@ -741,8 +741,8 @@ SUBROUTINE PCDTTRF( N, DL, D, DU, JA, DESCA, AF, LAF, WORK, LWORK,
741741
*
742742
* Calculate the update block for previous proc, E_i = GL_i{GU_i}
743743
*
744-
AF( ODD_SIZE+3 ) = -CONE *
745-
$ CDOTC( ODD_SIZE, AF( 1 ), 1, AF( WORK_U+1 ), 1 )
744+
CALL CCDOTC( ODD_SIZE, DOTC, AF( 1 ), 1, AF( WORK_U+1 ), 1 )
745+
AF( ODD_SIZE+3 ) = -CONE * DOTC
746746
*
747747
*
748748
* Initiate send of E_i to previous processor to overlap

SRC/pchetd2.f

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -228,17 +228,16 @@ SUBROUTINE PCHETD2( UPLO, N, A, IA, JA, DESCA, D, E, TAU, WORK,
228228
INTEGER IACOL, IAROW, ICOFFA, ICTXT, II, IK, IROFFA, J,
229229
$ JJ, JK, JN, LDA, LWMIN, MYCOL, MYROW, NPCOL,
230230
$ NPROW
231-
COMPLEX ALPHA, TAUI
231+
COMPLEX ALPHA, TAUI, DOTC
232232
* ..
233233
* .. External Subroutines ..
234-
EXTERNAL BLACS_ABORT, BLACS_GRIDINFO, CAXPY, CGEBR2D,
235-
$ CGEBS2D, CHK1MAT, CHEMV,
234+
EXTERNAL BLACS_ABORT, BLACS_GRIDINFO, CAXPY, CCDOTC,
235+
$ CGEBR2D, CGEBS2D, CHK1MAT, CHEMV,
236236
$ CHER2, CLARFG, INFOG2L, PXERBLA
237237
* ..
238238
* .. External Functions ..
239239
LOGICAL LSAME
240-
COMPLEX CDOTC
241-
EXTERNAL LSAME, CDOTC
240+
EXTERNAL LSAME
242241
* ..
243242
* .. Intrinsic Functions ..
244243
INTRINSIC CMPLX, REAL
@@ -333,8 +332,9 @@ SUBROUTINE PCHETD2( UPLO, N, A, IA, JA, DESCA, D, E, TAU, WORK,
333332
*
334333
* Compute w := x - 1/2 * tau * (x'*v) * v
335334
*
336-
ALPHA = -HALF*TAUI*CDOTC( J, TAU( JJ ), 1,
337-
$ A( II+JK*LDA ), 1 )
335+
CALL CCDOTC( J, DOTC, TAU( JJ ), 1, A( II+JK*LDA ),
336+
$ 1 )
337+
ALPHA = -HALF*TAUI*DOTC
338338
CALL CAXPY( J, ALPHA, A( II+JK*LDA ), 1,
339339
$ TAU( JJ ), 1 )
340340
*
@@ -413,8 +413,9 @@ SUBROUTINE PCHETD2( UPLO, N, A, IA, JA, DESCA, D, E, TAU, WORK,
413413
*
414414
* Compute w := x - 1/2 * tau * (x'*v) * v
415415
*
416-
ALPHA = -HALF*TAUI*CDOTC( N-J, TAU( JK ), 1,
417-
$ A( IK+1+(JK-1)*LDA ), 1 )
416+
CALL CCDOTC( N-J, DOTC, TAU( JK ), 1,
417+
$ A( IK+1+(JK-1)*LDA ), 1 )
418+
ALPHA = -HALF*TAUI*DOTC
418419
CALL CAXPY( N-J, ALPHA, A( IK+1+(JK-1)*LDA ),
419420
$ 1, TAU( JK ), 1 )
420421
*

SRC/pclauu2.f

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -131,15 +131,15 @@ SUBROUTINE PCLAUU2( UPLO, N, A, IA, JA, DESCA )
131131
INTEGER IACOL, IAROW, ICURR, IDIAG, IIA, IOFFA, JJA,
132132
$ LDA, MYCOL, MYROW, NA, NPCOL, NPROW
133133
REAL AII
134+
COMPLEX DOTC
134135
* ..
135136
* .. External Subroutines ..
136-
EXTERNAL BLACS_GRIDINFO, CGEMV, CLACGV,
137+
EXTERNAL BLACS_GRIDINFO, CCDOTC, CGEMV, CLACGV,
137138
$ CSSCAL, INFOG2L
138139
* ..
139140
* .. External Functions ..
140141
LOGICAL LSAME
141-
COMPLEX CDOTC
142-
EXTERNAL CDOTC, LSAME
142+
EXTERNAL LSAME
143143
* ..
144144
* .. Intrinsic Functions ..
145145
INTRINSIC CMPLX, REAL
@@ -170,8 +170,8 @@ SUBROUTINE PCLAUU2( UPLO, N, A, IA, JA, DESCA )
170170
DO 10 NA = N-1, 1, -1
171171
AII = A( IDIAG )
172172
ICURR = IDIAG + LDA
173-
A( IDIAG ) = AII*AII + REAL( CDOTC( NA, A( ICURR ), LDA,
174-
$ A( ICURR ), LDA ) )
173+
CALL CCDOTC( NA, DOTC, A( ICURR ), LDA, A( ICURR ), LDA )
174+
A( IDIAG ) = AII*AII + REAL( DOTC )
175175
CALL CLACGV( NA, A( ICURR ), LDA )
176176
CALL CGEMV( 'No transpose', N-NA-1, NA, ONE,
177177
$ A( IOFFA+LDA ), LDA, A( ICURR ), LDA,

SRC/pzdttrf.f

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,7 @@ SUBROUTINE PZDTTRF( N, DL, D, DU, JA, DESCA, AF, LAF, WORK, LWORK,
376376
$ NB, NP, NPCOL, NPROW, NP_SAVE, ODD_SIZE,
377377
$ PART_OFFSET, PART_SIZE, RETURN_CODE, STORE_N_A,
378378
$ TEMP, WORK_SIZE_MIN, WORK_U
379+
COMPLEX*16 DOTC
379380
* ..
380381
* .. Local Arrays ..
381382
INTEGER DESCA_1XP( 7 ), PARAM_CHECK( 7, 3 )
@@ -385,13 +386,12 @@ SUBROUTINE PZDTTRF( N, DL, D, DU, JA, DESCA, AF, LAF, WORK, LWORK,
385386
$ DESC_CONVERT, GLOBCHK, PXERBLA, RESHAPE, ZAXPY,
386387
$ ZGEMM, ZGERV2D, ZGESD2D, ZLAMOV, ZLATCPY,
387388
$ ZPBTRF, ZPOTRF, ZSYRK, ZTBTRS, ZTRMM, ZTRRV2D,
388-
$ ZTRSD2D, ZTRSM, ZTRTRS
389+
$ ZTRSD2D, ZTRSM, ZTRTRS, ZZDOTC
389390
* ..
390391
* .. External Functions ..
391392
LOGICAL LSAME
392393
INTEGER NUMROC
393-
COMPLEX*16 ZDOTC
394-
EXTERNAL LSAME, NUMROC, ZDOTC
394+
EXTERNAL LSAME, NUMROC
395395
* ..
396396
* .. Intrinsic Functions ..
397397
INTRINSIC ICHAR, MIN, MOD
@@ -741,8 +741,8 @@ SUBROUTINE PZDTTRF( N, DL, D, DU, JA, DESCA, AF, LAF, WORK, LWORK,
741741
*
742742
* Calculate the update block for previous proc, E_i = GL_i{GU_i}
743743
*
744-
AF( ODD_SIZE+3 ) = -CONE *
745-
$ ZDOTC( ODD_SIZE, AF( 1 ), 1, AF( WORK_U+1 ), 1 )
744+
CALL ZZDOTC( ODD_SIZE, DOTC, AF( 1 ), 1, AF( WORK_U+1 ), 1 )
745+
AF( ODD_SIZE+3 ) = -CONE * DOTC
746746
*
747747
*
748748
* Initiate send of E_i to previous processor to overlap

SRC/pzhetd2.f

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -228,17 +228,16 @@ SUBROUTINE PZHETD2( UPLO, N, A, IA, JA, DESCA, D, E, TAU, WORK,
228228
INTEGER IACOL, IAROW, ICOFFA, ICTXT, II, IK, IROFFA, J,
229229
$ JJ, JK, JN, LDA, LWMIN, MYCOL, MYROW, NPCOL,
230230
$ NPROW
231-
COMPLEX*16 ALPHA, TAUI
231+
COMPLEX*16 ALPHA, TAUI, DOTC
232232
* ..
233233
* .. External Subroutines ..
234234
EXTERNAL BLACS_ABORT, BLACS_GRIDINFO, CHK1MAT, INFOG2L,
235235
$ PXERBLA, ZAXPY, ZGEBR2D, ZGEBS2D,
236-
$ ZHEMV, ZHER2, ZLARFG
236+
$ ZHEMV, ZHER2, ZLARFG, ZZDOTC
237237
* ..
238238
* .. External Functions ..
239239
LOGICAL LSAME
240-
COMPLEX*16 ZDOTC
241-
EXTERNAL LSAME, ZDOTC
240+
EXTERNAL LSAME
242241
* ..
243242
* .. Intrinsic Functions ..
244243
INTRINSIC DBLE, DCMPLX
@@ -333,8 +332,9 @@ SUBROUTINE PZHETD2( UPLO, N, A, IA, JA, DESCA, D, E, TAU, WORK,
333332
*
334333
* Compute w := x - 1/2 * tau * (x'*v) * v
335334
*
336-
ALPHA = -HALF*TAUI*ZDOTC( J, TAU( JJ ), 1,
337-
$ A( II+JK*LDA ), 1 )
335+
CALL ZZDOTC( J, DOTC, TAU( JJ ), 1, A( II+JK*LDA ),
336+
$ 1 )
337+
ALPHA = -HALF*TAUI*DOTC
338338
CALL ZAXPY( J, ALPHA, A( II+JK*LDA ), 1,
339339
$ TAU( JJ ), 1 )
340340
*
@@ -413,8 +413,9 @@ SUBROUTINE PZHETD2( UPLO, N, A, IA, JA, DESCA, D, E, TAU, WORK,
413413
*
414414
* Compute w := x - 1/2 * tau * (x'*v) * v
415415
*
416-
ALPHA = -HALF*TAUI*ZDOTC( N-J, TAU( JK ), 1,
417-
$ A( IK+1+(JK-1)*LDA ), 1 )
416+
CALL ZZDOTC( N-J, DOTC, TAU( JK ), 1,
417+
$ A( IK+1+(JK-1)*LDA ), 1 )
418+
ALPHA = -HALF*TAUI*DOTC
418419
CALL ZAXPY( N-J, ALPHA, A( IK+1+(JK-1)*LDA ),
419420
$ 1, TAU( JK ), 1 )
420421
*

SRC/pzlauu2.f

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -131,15 +131,15 @@ SUBROUTINE PZLAUU2( UPLO, N, A, IA, JA, DESCA )
131131
INTEGER IACOL, IAROW, ICURR, IDIAG, IIA, IOFFA, JJA,
132132
$ LDA, MYCOL, MYROW, NA, NPCOL, NPROW
133133
DOUBLE PRECISION AII
134+
COMPLEX*16 DOTC
134135
* ..
135136
* .. External Subroutines ..
136137
EXTERNAL BLACS_GRIDINFO, INFOG2L, ZDSCAL, ZGEMV,
137-
$ ZLACGV
138+
$ ZLACGV, ZZDOTC
138139
* ..
139140
* .. External Functions ..
140141
LOGICAL LSAME
141-
COMPLEX*16 ZDOTC
142-
EXTERNAL LSAME, ZDOTC
142+
EXTERNAL LSAME
143143
* ..
144144
* .. Intrinsic Functions ..
145145
INTRINSIC DCMPLX, DBLE
@@ -170,8 +170,8 @@ SUBROUTINE PZLAUU2( UPLO, N, A, IA, JA, DESCA )
170170
DO 10 NA = N-1, 1, -1
171171
AII = A( IDIAG )
172172
ICURR = IDIAG + LDA
173-
A( IDIAG ) = AII*AII + DBLE( ZDOTC( NA, A( ICURR ), LDA,
174-
$ A( ICURR ), LDA ) )
173+
CALL ZZDOTC( NA, DOTC, A( ICURR ), LDA, A( ICURR ), LDA )
174+
A( IDIAG ) = AII*AII + DBLE( DOTC )
175175
CALL ZLACGV( NA, A( ICURR ), LDA )
176176
CALL ZGEMV( 'No transpose', N-NA-1, NA, ONE,
177177
$ A( IOFFA+LDA ), LDA, A( ICURR ), LDA,

0 commit comments

Comments
 (0)