Skip to content

Commit 6cdf7bc

Browse files
Implement AXBPY
1 parent 2cbabee commit 6cdf7bc

File tree

8 files changed

+695
-14
lines changed

8 files changed

+695
-14
lines changed

BLAS/SRC/CMakeLists.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,18 +29,18 @@
2929
# Level 1 BLAS
3030
#---------------------------------------------------------
3131

32-
set(SBLAS1 isamax.f sasum.f saxpy.f scopy.f sdot.f snrm2.f90
32+
set(SBLAS1 isamax.f sasum.f saxpy.f saxpby.f scopy.f sdot.f snrm2.f90
3333
srot.f srotg.f90 sscal.f sswap.f sdsdot.f srotmg.f srotm.f)
3434

35-
set(CBLAS1 scabs1.f scasum.f scnrm2.f90 icamax.f caxpy.f ccopy.f
35+
set(CBLAS1 scabs1.f scasum.f scnrm2.f90 icamax.f caxpy.f caxpby.f ccopy.f
3636
cdotc.f cdotu.f csscal.f crotg.f90 cscal.f cswap.f csrot.f)
3737

38-
set(DBLAS1 idamax.f dasum.f daxpy.f dcopy.f ddot.f dnrm2.f90
38+
set(DBLAS1 idamax.f dasum.f daxpy.f daxpby.f dcopy.f ddot.f dnrm2.f90
3939
drot.f drotg.f90 dscal.f dsdot.f dswap.f drotmg.f drotm.f)
4040

4141
set(DB1AUX sscal.f isamax.f)
4242

43-
set(ZBLAS1 dcabs1.f dzasum.f dznrm2.f90 izamax.f zaxpy.f zcopy.f
43+
set(ZBLAS1 dcabs1.f dzasum.f dznrm2.f90 izamax.f zaxpy.f zaxpby.f zcopy.f
4444
zdotc.f zdotu.f zdscal.f zrotg.f90 zscal.f zswap.f zdrot.f)
4545

4646
set(CB1AUX

BLAS/SRC/Makefile

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,19 +69,19 @@ all: $(BLASLIB)
6969
# Comment out the next 6 definitions if you already have
7070
# the Level 1 BLAS.
7171
#---------------------------------------------------------
72-
SBLAS1 = isamax.o sasum.o saxpy.o scopy.o sdot.o snrm2.o \
72+
SBLAS1 = isamax.o sasum.o saxpy.o saxpby.o scopy.o sdot.o snrm2.o \
7373
srot.o srotg.o sscal.o sswap.o sdsdot.o srotmg.o srotm.o
7474
$(SBLAS1): $(FRC)
7575

76-
CBLAS1 = scabs1.o scasum.o scnrm2.o icamax.o caxpy.o ccopy.o \
76+
CBLAS1 = scabs1.o scasum.o scnrm2.o icamax.o caxpy.o caxpby.o ccopy.o \
7777
cdotc.o cdotu.o csscal.o crotg.o cscal.o cswap.o csrot.o
7878
$(CBLAS1): $(FRC)
7979

80-
DBLAS1 = idamax.o dasum.o daxpy.o dcopy.o ddot.o dnrm2.o \
80+
DBLAS1 = idamax.o dasum.o daxpy.o daxpby.o dcopy.o ddot.o dnrm2.o \
8181
drot.o drotg.o dscal.o dsdot.o dswap.o drotmg.o drotm.o
8282
$(DBLAS1): $(FRC)
8383

84-
ZBLAS1 = dcabs1.o dzasum.o dznrm2.o izamax.o zaxpy.o zcopy.o \
84+
ZBLAS1 = dcabs1.o dzasum.o dznrm2.o izamax.o zaxpy.o zaxpby.o zcopy.o \
8585
zdotc.o zdotu.o zdscal.o zrotg.o zscal.o zswap.o zdrot.o
8686
$(ZBLAS1): $(FRC)
8787

BLAS/SRC/caxpby.f

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
*> \brief \b CAXPBY
2+
*
3+
* =========== DOCUMENTATION ===========
4+
*
5+
* Online html documentation available at
6+
* http://www.netlib.org/lapack/explore-html/
7+
*
8+
* Definition:
9+
* ===========
10+
*
11+
* SUBROUTINE CAXPBY(N,CA,CX,INCX,CB,CY,INCY)
12+
*
13+
* .. Scalar Arguments ..
14+
* COMPLEX CA,CB
15+
* INTEGER INCX,INCY,N
16+
* ..
17+
* .. Array Arguments ..
18+
* COMPLEX CX(*),CY(*)
19+
* ..
20+
*
21+
*
22+
*> \par Purpose:
23+
* =============
24+
*>
25+
*> \verbatim
26+
*>
27+
*> CAXPBY constant times a vector plus constanttimes a vector.
28+
*>
29+
*> Y = ALPHA * X + BETA * Y
30+
*>
31+
*> \endverbatim
32+
*
33+
* Arguments:
34+
* ==========
35+
*
36+
*> \param[in] N
37+
*> \verbatim
38+
*> N is INTEGER
39+
*> number of elements in input vector(s)
40+
*> \endverbatim
41+
*>
42+
*> \param[in] CA
43+
*> \verbatim
44+
*> CA is COMPLEX
45+
*> On entry, CA specifies the scalar alpha.
46+
*> \endverbatim
47+
*>
48+
*> \param[in] CX
49+
*> \verbatim
50+
*> CX is COMPLEX array, dimension ( 1 + ( N - 1 )*abs( INCX ) )
51+
*> \endverbatim
52+
*>
53+
*> \param[in] INCX
54+
*> \verbatim
55+
*> INCX is INTEGER
56+
*> storage spacing between elements of CX
57+
*> \endverbatim
58+
*>
59+
*> \param[in] CB
60+
*> \verbatim
61+
*> CB is COMPLEX
62+
*> On entry, CB specifies the scalar beta.
63+
*> \endverbatim
64+
*>
65+
*> \param[in,out] CY
66+
*> \verbatim
67+
*> CY is COMPLEX array, dimension ( 1 + ( N - 1 )*abs( INCY ) )
68+
*> \endverbatim
69+
*>
70+
*> \param[in] INCY
71+
*> \verbatim
72+
*> INCY is INTEGER
73+
*> storage spacing between elements of CY
74+
*> \endverbatim
75+
*
76+
* Authors:
77+
* ========
78+
*
79+
*> \author Univ. of Tennessee
80+
*> \author Univ. of California Berkeley
81+
*> \author Univ. of Colorado Denver
82+
*> \author NAG Ltd.
83+
*> \author Martin Koehler, MPI Magdeburg
84+
*
85+
*> \ingroup axpby
86+
*
87+
*> \par Further Details:
88+
* =====================
89+
*>
90+
*> \verbatim
91+
*>
92+
*> jack dongarra, linpack, 3/11/78.
93+
*> modified 12/3/93, array(1) declarations changed to array(*)
94+
*> modfied 8/23/24, implement the axpby case
95+
*> \endverbatim
96+
*>
97+
* =====================================================================
98+
SUBROUTINE CAXPBY(N,CA,CX,INCX,CB,CY,INCY)
99+
*
100+
* -- Reference BLAS level1 routine --
101+
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
102+
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
103+
*
104+
* .. Scalar Arguments ..
105+
COMPLEX CA, CB
106+
INTEGER INCX,INCY,N
107+
* ..
108+
* .. Array Arguments ..
109+
COMPLEX CX(*),CY(*)
110+
* ..
111+
*
112+
* =====================================================================
113+
*
114+
* .. Local Scalars ..
115+
INTEGER I,IX,IY
116+
* ..
117+
* .. External Functions ..
118+
REAL SCABS1
119+
EXTERNAL SCABS1
120+
* ..
121+
IF (N.LE.0) RETURN
122+
IF (SCABS1(CA).EQ.0.0E+0) RETURN
123+
IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN
124+
*
125+
* code for both increments equal to 1
126+
*
127+
DO I = 1,N
128+
CY(I) = CB*CY(I) + CA*CX(I)
129+
END DO
130+
ELSE
131+
*
132+
* code for unequal increments or equal increments
133+
* not equal to 1
134+
*
135+
IX = 1
136+
IY = 1
137+
IF (INCX.LT.0) IX = (-N+1)*INCX + 1
138+
IF (INCY.LT.0) IY = (-N+1)*INCY + 1
139+
DO I = 1,N
140+
CY(IY) = CB*CY(IY) + CA*CX(IX)
141+
IX = IX + INCX
142+
IY = IY + INCY
143+
END DO
144+
END IF
145+
*
146+
RETURN
147+
*
148+
* End of CAXBPY
149+
*
150+
END

BLAS/SRC/daxpby.f

Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
*> \brief \b DAXPBY
2+
*
3+
* =========== DOCUMENTATION ===========
4+
*
5+
* Online html documentation available at
6+
* http://www.netlib.org/lapack/explore-html/
7+
*
8+
* Definition:
9+
* ===========
10+
*
11+
* SUBROUTINE DAXPBY(N,DA,DX,INCX,DB,DY,INCY)
12+
*
13+
* .. Scalar Arguments ..
14+
* DOUBLE PRECISION DA,DB
15+
* INTEGER INCX,INCY,N
16+
* ..
17+
* .. Array Arguments ..
18+
* DOUBLE PRECISION DX(*),DY(*)
19+
* ..
20+
*
21+
*
22+
*> \par Purpose:
23+
* =============
24+
*>
25+
*> \verbatim
26+
*>
27+
*> DAXPBY constant times a vector plus constanttimes a vector.
28+
*>
29+
*> Y = ALPHA * X + BETA * Y
30+
*>
31+
*> uses unrolled loops for increments equal to one.
32+
*> \endverbatim
33+
*
34+
* Arguments:
35+
* ==========
36+
*
37+
*> \param[in] N
38+
*> \verbatim
39+
*> N is INTEGER
40+
*> number of elements in input vector(s)
41+
*> \endverbatim
42+
*>
43+
*> \param[in] DA
44+
*> \verbatim
45+
*> DA is DOUBLE PRECISION
46+
*> On entry, DA specifies the scalar alpha.
47+
*> \endverbatim
48+
*>
49+
*> \param[in] DX
50+
*> \verbatim
51+
*> DX is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCX ) )
52+
*> \endverbatim
53+
*>
54+
*> \param[in] INCX
55+
*> \verbatim
56+
*> INCX is INTEGER
57+
*> storage spacing between elements of DX
58+
*> \endverbatim
59+
*>
60+
*> \param[in] DB
61+
*> \verbatim
62+
*> DB is DOUBLE PRECISION
63+
*> On entry, DB specifies the scalar beta.
64+
*> \endverbatim
65+
*>
66+
*> \param[in,out] DY
67+
*> \verbatim
68+
*> DY is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCY ) )
69+
*> \endverbatim
70+
*>
71+
*> \param[in] INCY
72+
*> \verbatim
73+
*> INCY is INTEGER
74+
*> storage spacing between elements of DY
75+
*> \endverbatim
76+
*
77+
* Authors:
78+
* ========
79+
*
80+
*> \author Univ. of Tennessee
81+
*> \author Univ. of California Berkeley
82+
*> \author Univ. of Colorado Denver
83+
*> \author NAG Ltd.
84+
*> \author Martin Koehler, MPI Magdeburg
85+
*
86+
*> \ingroup axpby
87+
*
88+
*> \par Further Details:
89+
* =====================
90+
*>
91+
*> \verbatim
92+
*>
93+
*> jack dongarra, linpack, 3/11/78.
94+
*> modified 12/3/93, array(1) declarations changed to array(*)
95+
*> modfied 8/23/24, implement the axpby case
96+
*> \endverbatim
97+
*>
98+
* =====================================================================
99+
SUBROUTINE DAXPBY(N,DA,DX,INCX,DB,DY,INCY)
100+
*
101+
* -- Reference BLAS level1 routine --
102+
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
103+
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
104+
*
105+
* .. Scalar Arguments ..
106+
DOUBLE PRECISION DA,DB
107+
INTEGER INCX,INCY,N
108+
* ..
109+
* .. Array Arguments ..
110+
DOUBLE PRECISION DX(*),DY(*)
111+
* ..
112+
*
113+
* =====================================================================
114+
*
115+
* .. Local Scalars ..
116+
INTEGER I,IX,IY,M,MP1
117+
* ..
118+
* .. Intrinsic Functions ..
119+
INTRINSIC MOD
120+
* ..
121+
IF (N.LE.0) RETURN
122+
IF (DA.EQ.0.0d0) RETURN
123+
IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN
124+
*
125+
* code for both increments equal to 1
126+
*
127+
*
128+
* clean-up loop
129+
*
130+
M = MOD(N,4)
131+
IF (M.NE.0) THEN
132+
DO I = 1,M
133+
DY(I) = DB*DY(I) + DA*DX(I)
134+
END DO
135+
END IF
136+
IF (N.LT.4) RETURN
137+
MP1 = M + 1
138+
DO I = MP1,N,4
139+
DY(I) = DB*DY(I) + DA*DX(I)
140+
DY(I+1) = DB*DY(I+1) + DA*DX(I+1)
141+
DY(I+2) = DB*DY(I+2) + DA*DX(I+2)
142+
DY(I+3) = DB*DY(I+3) + DA*DX(I+3)
143+
END DO
144+
ELSE
145+
*
146+
* code for unequal increments or equal increments
147+
* not equal to 1
148+
*
149+
IX = 1
150+
IY = 1
151+
IF (INCX.LT.0) IX = (-N+1)*INCX + 1
152+
IF (INCY.LT.0) IY = (-N+1)*INCY + 1
153+
DO I = 1,N
154+
DY(IY) = DB*DY(IY) + DA*DX(IX)
155+
IX = IX + INCX
156+
IY = IY + INCY
157+
END DO
158+
END IF
159+
RETURN
160+
*
161+
* End of DAXPBY
162+
*
163+
END

0 commit comments

Comments
 (0)