Skip to content

Commit c5cd266

Browse files
authored
Reduce workspace demand for tiny M,N,K sizes (Reference-LAPACK PR 1292)
1 parent a36e22c commit c5cd266

16 files changed

Lines changed: 175 additions & 130 deletions

File tree

lapack-netlib/SRC/cunmlq.f

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ SUBROUTINE CUNMLQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
246246
NB = MIN( NBMAX, ILAENV( 1, 'CUNMLQ', SIDE // TRANS, M, N,
247247
$ K,
248248
$ -1 ) )
249-
LWKOPT = NW*NB + TSIZE
249+
LWKOPT = NW*NB + LDT*NB
250250
WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
251251
END IF
252252
*
@@ -270,7 +270,7 @@ SUBROUTINE CUNMLQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
270270
LDWORK = NW
271271
IF( NB.GT.1 .AND. NB.LT.K ) THEN
272272
IF( LWORK.LT.LWKOPT ) THEN
273-
NB = (LWORK-TSIZE) / LDWORK
273+
NB = LWORK / (LDWORK + LDT)
274274
NBMIN = MAX( 2, ILAENV( 2, 'CUNMLQ', SIDE // TRANS, M, N,
275275
$ K,
276276
$ -1 ) )

lapack-netlib/SRC/cunmql.f

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,13 @@
55
* Online html documentation available at
66
* http://www.netlib.org/lapack/explore-html/
77
*
8-
*> \htmlonly
98
*> Download CUNMQL + dependencies
109
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/cunmql.f">
1110
*> [TGZ]</a>
1211
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/cunmql.f">
1312
*> [ZIP]</a>
1413
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cunmql.f">
1514
*> [TXT]</a>
16-
*> \endhtmlonly
1715
*
1816
* Definition:
1917
* ===========
@@ -165,6 +163,7 @@
165163
* =====================================================================
166164
SUBROUTINE CUNMQL( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
167165
$ WORK, LWORK, INFO )
166+
IMPLICIT NONE
168167
*
169168
* -- LAPACK computational routine --
170169
* -- LAPACK is a software package provided by Univ. of Tennessee, --
@@ -246,9 +245,10 @@ SUBROUTINE CUNMQL( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
246245
IF( M.EQ.0 .OR. N.EQ.0 ) THEN
247246
LWKOPT = 1
248247
ELSE
249-
NB = MIN( NBMAX, ILAENV( 1, 'CUNMQL', SIDE // TRANS, M, N,
248+
NB = MIN( NBMAX, ILAENV( 1, 'CUNMQL', SIDE // TRANS, M,
249+
$ N,
250250
$ K, -1 ) )
251-
LWKOPT = NW*NB + TSIZE
251+
LWKOPT = NW*NB + LDT*NB
252252
END IF
253253
WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
254254
END IF
@@ -272,8 +272,9 @@ SUBROUTINE CUNMQL( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
272272
LDWORK = NW
273273
IF( NB.GT.1 .AND. NB.LT.K ) THEN
274274
IF( LWORK.LT.LWKOPT ) THEN
275-
NB = (LWORK-TSIZE) / LDWORK
276-
NBMIN = MAX( 2, ILAENV( 2, 'CUNMQL', SIDE // TRANS, M, N, K,
275+
NB = LWORK / (LDWORK + LDT)
276+
NBMIN = MAX( 2, ILAENV( 2, 'CUNMQL', SIDE // TRANS, M, N,
277+
$ K,
277278
$ -1 ) )
278279
END IF
279280
END IF
@@ -282,7 +283,8 @@ SUBROUTINE CUNMQL( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
282283
*
283284
* Use unblocked code
284285
*
285-
CALL CUNM2L( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK,
286+
CALL CUNM2L( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
287+
$ WORK,
286288
$ IINFO )
287289
ELSE
288290
*
@@ -328,7 +330,8 @@ SUBROUTINE CUNMQL( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
328330
*
329331
* Apply H or H**H
330332
*
331-
CALL CLARFB( SIDE, TRANS, 'Backward', 'Columnwise', MI, NI,
333+
CALL CLARFB( SIDE, TRANS, 'Backward', 'Columnwise', MI,
334+
$ NI,
332335
$ IB, A( 1, I ), LDA, WORK( IWT ), LDT, C, LDC,
333336
$ WORK, LDWORK )
334337
10 CONTINUE

lapack-netlib/SRC/cunmqr.f

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,13 @@
55
* Online html documentation available at
66
* http://www.netlib.org/lapack/explore-html/
77
*
8-
*> \htmlonly
98
*> Download CUNMQR + dependencies
109
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/cunmqr.f">
1110
*> [TGZ]</a>
1211
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/cunmqr.f">
1312
*> [ZIP]</a>
1413
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cunmqr.f">
1514
*> [TXT]</a>
16-
*> \endhtmlonly
1715
*
1816
* Definition:
1917
* ===========
@@ -165,6 +163,7 @@
165163
* =====================================================================
166164
SUBROUTINE CUNMQR( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
167165
$ WORK, LWORK, INFO )
166+
IMPLICIT NONE
168167
*
169168
* -- LAPACK computational routine --
170169
* -- LAPACK is a software package provided by Univ. of Tennessee, --
@@ -243,9 +242,10 @@ SUBROUTINE CUNMQR( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
243242
*
244243
* Compute the workspace requirements
245244
*
246-
NB = MIN( NBMAX, ILAENV( 1, 'CUNMQR', SIDE // TRANS, M, N, K,
245+
NB = MIN( NBMAX, ILAENV( 1, 'CUNMQR', SIDE // TRANS, M, N,
246+
$ K,
247247
$ -1 ) )
248-
LWKOPT = NW*NB + TSIZE
248+
LWKOPT = NW*NB + LDT*NB
249249
WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
250250
END IF
251251
*
@@ -267,8 +267,9 @@ SUBROUTINE CUNMQR( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
267267
LDWORK = NW
268268
IF( NB.GT.1 .AND. NB.LT.K ) THEN
269269
IF( LWORK.LT.LWKOPT ) THEN
270-
NB = (LWORK-TSIZE) / LDWORK
271-
NBMIN = MAX( 2, ILAENV( 2, 'CUNMQR', SIDE // TRANS, M, N, K,
270+
NB = LWORK / (LDWORK + LDT)
271+
NBMIN = MAX( 2, ILAENV( 2, 'CUNMQR', SIDE // TRANS, M, N,
272+
$ K,
272273
$ -1 ) )
273274
END IF
274275
END IF
@@ -277,7 +278,8 @@ SUBROUTINE CUNMQR( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
277278
*
278279
* Use unblocked code
279280
*
280-
CALL CUNM2R( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK,
281+
CALL CUNM2R( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
282+
$ WORK,
281283
$ IINFO )
282284
ELSE
283285
*
@@ -309,7 +311,8 @@ SUBROUTINE CUNMQR( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
309311
* Form the triangular factor of the block reflector
310312
* H = H(i) H(i+1) . . . H(i+ib-1)
311313
*
312-
CALL CLARFT( 'Forward', 'Columnwise', NQ-I+1, IB, A( I, I ),
314+
CALL CLARFT( 'Forward', 'Columnwise', NQ-I+1, IB, A( I,
315+
$ I ),
313316
$ LDA, TAU( I ), WORK( IWT ), LDT )
314317
IF( LEFT ) THEN
315318
*
@@ -327,7 +330,8 @@ SUBROUTINE CUNMQR( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
327330
*
328331
* Apply H or H**H
329332
*
330-
CALL CLARFB( SIDE, TRANS, 'Forward', 'Columnwise', MI, NI,
333+
CALL CLARFB( SIDE, TRANS, 'Forward', 'Columnwise', MI,
334+
$ NI,
331335
$ IB, A( I, I ), LDA, WORK( IWT ), LDT,
332336
$ C( IC, JC ), LDC, WORK, LDWORK )
333337
10 CONTINUE

lapack-netlib/SRC/cunmrq.f

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,13 @@
55
* Online html documentation available at
66
* http://www.netlib.org/lapack/explore-html/
77
*
8-
*> \htmlonly
98
*> Download CUNMRQ + dependencies
109
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/cunmrq.f">
1110
*> [TGZ]</a>
1211
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/cunmrq.f">
1312
*> [ZIP]</a>
1413
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cunmrq.f">
1514
*> [TXT]</a>
16-
*> \endhtmlonly
1715
*
1816
* Definition:
1917
* ===========
@@ -165,6 +163,7 @@
165163
* =====================================================================
166164
SUBROUTINE CUNMRQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
167165
$ WORK, LWORK, INFO )
166+
IMPLICIT NONE
168167
*
169168
* -- LAPACK computational routine --
170169
* -- LAPACK is a software package provided by Univ. of Tennessee, --
@@ -247,9 +246,10 @@ SUBROUTINE CUNMRQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
247246
IF( M.EQ.0 .OR. N.EQ.0 ) THEN
248247
LWKOPT = 1
249248
ELSE
250-
NB = MIN( NBMAX, ILAENV( 1, 'CUNMRQ', SIDE // TRANS, M, N,
249+
NB = MIN( NBMAX, ILAENV( 1, 'CUNMRQ', SIDE // TRANS, M,
250+
$ N,
251251
$ K, -1 ) )
252-
LWKOPT = NW*NB + TSIZE
252+
LWKOPT = NW*NB + LDT*NB
253253
END IF
254254
WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
255255
END IF
@@ -271,8 +271,9 @@ SUBROUTINE CUNMRQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
271271
LDWORK = NW
272272
IF( NB.GT.1 .AND. NB.LT.K ) THEN
273273
IF( LWORK.LT.LWKOPT ) THEN
274-
NB = (LWORK-TSIZE) / LDWORK
275-
NBMIN = MAX( 2, ILAENV( 2, 'CUNMRQ', SIDE // TRANS, M, N, K,
274+
NB = LWORK / (LDWORK + LDT)
275+
NBMIN = MAX( 2, ILAENV( 2, 'CUNMRQ', SIDE // TRANS, M, N,
276+
$ K,
276277
$ -1 ) )
277278
END IF
278279
END IF
@@ -281,7 +282,8 @@ SUBROUTINE CUNMRQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
281282
*
282283
* Use unblocked code
283284
*
284-
CALL CUNMR2( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK,
285+
CALL CUNMR2( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
286+
$ WORK,
285287
$ IINFO )
286288
ELSE
287289
*

lapack-netlib/SRC/dormlq.f

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,13 @@
55
* Online html documentation available at
66
* http://www.netlib.org/lapack/explore-html/
77
*
8-
*> \htmlonly
98
*> Download DORMLQ + dependencies
109
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dormlq.f">
1110
*> [TGZ]</a>
1211
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dormlq.f">
1312
*> [ZIP]</a>
1413
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dormlq.f">
1514
*> [TXT]</a>
16-
*> \endhtmlonly
1715
*
1816
* Definition:
1917
* ===========
@@ -159,11 +157,12 @@
159157
*> \author Univ. of Colorado Denver
160158
*> \author NAG Ltd.
161159
*
162-
*> \ingroup doubleOTHERcomputational
160+
*> \ingroup unmlq
163161
*
164162
* =====================================================================
165163
SUBROUTINE DORMLQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
166164
$ WORK, LWORK, INFO )
165+
IMPLICIT NONE
167166
*
168167
* -- LAPACK computational routine --
169168
* -- LAPACK is a software package provided by Univ. of Tennessee, --
@@ -241,9 +240,10 @@ SUBROUTINE DORMLQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
241240
*
242241
* Compute the workspace requirements
243242
*
244-
NB = MIN( NBMAX, ILAENV( 1, 'DORMLQ', SIDE // TRANS, M, N, K,
243+
NB = MIN( NBMAX, ILAENV( 1, 'DORMLQ', SIDE // TRANS, M, N,
244+
$ K,
245245
$ -1 ) )
246-
LWKOPT = NW*NB + TSIZE
246+
LWKOPT = NW*NB + LDT*NB
247247
WORK( 1 ) = LWKOPT
248248
END IF
249249
*
@@ -265,8 +265,9 @@ SUBROUTINE DORMLQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
265265
LDWORK = NW
266266
IF( NB.GT.1 .AND. NB.LT.K ) THEN
267267
IF( LWORK.LT.LWKOPT ) THEN
268-
NB = (LWORK-TSIZE) / LDWORK
269-
NBMIN = MAX( 2, ILAENV( 2, 'DORMLQ', SIDE // TRANS, M, N, K,
268+
NB = LWORK / (LDWORK + LDT)
269+
NBMIN = MAX( 2, ILAENV( 2, 'DORMLQ', SIDE // TRANS, M, N,
270+
$ K,
270271
$ -1 ) )
271272
END IF
272273
END IF
@@ -275,7 +276,8 @@ SUBROUTINE DORMLQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
275276
*
276277
* Use unblocked code
277278
*
278-
CALL DORML2( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK,
279+
CALL DORML2( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
280+
$ WORK,
279281
$ IINFO )
280282
ELSE
281283
*
@@ -331,7 +333,8 @@ SUBROUTINE DORMLQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
331333
*
332334
* Apply H or H**T
333335
*
334-
CALL DLARFB( SIDE, TRANST, 'Forward', 'Rowwise', MI, NI, IB,
336+
CALL DLARFB( SIDE, TRANST, 'Forward', 'Rowwise', MI, NI,
337+
$ IB,
335338
$ A( I, I ), LDA, WORK( IWT ), LDT,
336339
$ C( IC, JC ), LDC, WORK, LDWORK )
337340
10 CONTINUE

lapack-netlib/SRC/dormql.f

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,13 @@
55
* Online html documentation available at
66
* http://www.netlib.org/lapack/explore-html/
77
*
8-
*> \htmlonly
98
*> Download DORMQL + dependencies
109
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dormql.f">
1110
*> [TGZ]</a>
1211
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dormql.f">
1312
*> [ZIP]</a>
1413
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dormql.f">
1514
*> [TXT]</a>
16-
*> \endhtmlonly
1715
*
1816
* Definition:
1917
* ===========
@@ -159,11 +157,12 @@
159157
*> \author Univ. of Colorado Denver
160158
*> \author NAG Ltd.
161159
*
162-
*> \ingroup doubleOTHERcomputational
160+
*> \ingroup unmql
163161
*
164162
* =====================================================================
165163
SUBROUTINE DORMQL( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
166164
$ WORK, LWORK, INFO )
165+
IMPLICIT NONE
167166
*
168167
* -- LAPACK computational routine --
169168
* -- LAPACK is a software package provided by Univ. of Tennessee, --
@@ -243,9 +242,10 @@ SUBROUTINE DORMQL( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
243242
IF( M.EQ.0 .OR. N.EQ.0 ) THEN
244243
LWKOPT = 1
245244
ELSE
246-
NB = MIN( NBMAX, ILAENV( 1, 'DORMQL', SIDE // TRANS, M, N,
245+
NB = MIN( NBMAX, ILAENV( 1, 'DORMQL', SIDE // TRANS, M,
246+
$ N,
247247
$ K, -1 ) )
248-
LWKOPT = NW*NB + TSIZE
248+
LWKOPT = NW*NB + LDT*NB
249249
END IF
250250
WORK( 1 ) = LWKOPT
251251
END IF
@@ -267,8 +267,9 @@ SUBROUTINE DORMQL( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
267267
LDWORK = NW
268268
IF( NB.GT.1 .AND. NB.LT.K ) THEN
269269
IF( LWORK.LT.LWKOPT ) THEN
270-
NB = (LWORK-TSIZE) / LDWORK
271-
NBMIN = MAX( 2, ILAENV( 2, 'DORMQL', SIDE // TRANS, M, N, K,
270+
NB = LWORK / (LDWORK + LDT)
271+
NBMIN = MAX( 2, ILAENV( 2, 'DORMQL', SIDE // TRANS, M, N,
272+
$ K,
272273
$ -1 ) )
273274
END IF
274275
END IF
@@ -277,7 +278,8 @@ SUBROUTINE DORMQL( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
277278
*
278279
* Use unblocked code
279280
*
280-
CALL DORM2L( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK,
281+
CALL DORM2L( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
282+
$ WORK,
281283
$ IINFO )
282284
ELSE
283285
*
@@ -323,7 +325,8 @@ SUBROUTINE DORMQL( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
323325
*
324326
* Apply H or H**T
325327
*
326-
CALL DLARFB( SIDE, TRANS, 'Backward', 'Columnwise', MI, NI,
328+
CALL DLARFB( SIDE, TRANS, 'Backward', 'Columnwise', MI,
329+
$ NI,
327330
$ IB, A( 1, I ), LDA, WORK( IWT ), LDT, C, LDC,
328331
$ WORK, LDWORK )
329332
10 CONTINUE

0 commit comments

Comments
 (0)