Skip to content

Commit 18deecf

Browse files
committed
refactor: reduce code duplication by calling "ndarray" API
1 parent 33bda21 commit 18deecf

File tree

2 files changed

+19
-55
lines changed

2 files changed

+19
-55
lines changed

lib/node_modules/@stdlib/blas/base/daxpy/manifest.json

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,8 @@
6565
"libraries": [],
6666
"libpath": [],
6767
"dependencies": [
68-
"@stdlib/blas/base/shared"
68+
"@stdlib/blas/base/shared",
69+
"@stdlib/strided/base/stride2offset"
6970
]
7071
},
7172
{
@@ -82,7 +83,8 @@
8283
"libraries": [],
8384
"libpath": [],
8485
"dependencies": [
85-
"@stdlib/blas/base/shared"
86+
"@stdlib/blas/base/shared",
87+
"@stdlib/strided/base/stride2offset"
8688
]
8789
},
8890

@@ -185,7 +187,8 @@
185187
"libraries": [],
186188
"libpath": [],
187189
"dependencies": [
188-
"@stdlib/blas/base/shared"
190+
"@stdlib/blas/base/shared",
191+
"@stdlib/strided/base/stride2offset"
189192
]
190193
},
191194
{
@@ -202,7 +205,8 @@
202205
"libraries": [],
203206
"libpath": [],
204207
"dependencies": [
205-
"@stdlib/blas/base/shared"
208+
"@stdlib/blas/base/shared",
209+
"@stdlib/strided/base/stride2offset"
206210
]
207211
},
208212

@@ -342,6 +346,7 @@
342346
"libpath": [],
343347
"dependencies": [
344348
"@stdlib/blas/base/shared",
349+
"@stdlib/strided/base/stride2offset",
345350
"@stdlib/napi/export",
346351
"@stdlib/napi/argv",
347352
"@stdlib/napi/argv-double",
@@ -363,7 +368,8 @@
363368
"libraries": [],
364369
"libpath": [],
365370
"dependencies": [
366-
"@stdlib/blas/base/shared"
371+
"@stdlib/blas/base/shared",
372+
"@stdlib/strided/base/stride2offset"
367373
]
368374
},
369375
{
@@ -380,7 +386,8 @@
380386
"libraries": [],
381387
"libpath": [],
382388
"dependencies": [
383-
"@stdlib/blas/base/shared"
389+
"@stdlib/blas/base/shared",
390+
"@stdlib/strided/base/stride2offset"
384391
]
385392
},
386393

@@ -398,7 +405,8 @@
398405
"libraries": [],
399406
"libpath": [],
400407
"dependencies": [
401-
"@stdlib/blas/base/shared"
408+
"@stdlib/blas/base/shared",
409+
"@stdlib/strided/base/stride2offset"
402410
]
403411
}
404412
]

lib/node_modules/@stdlib/blas/base/daxpy/src/daxpy.c

Lines changed: 4 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
#include "stdlib/blas/base/daxpy.h"
2020
#include "stdlib/blas/base/shared.h"
21+
#include "stdlib/strided/base/stride2offset.h"
2122

2223
/**
2324
* Multiplies a vector `X` by a constant and adds the result to `Y`.
@@ -30,54 +31,9 @@
3031
* @param strideY Y stride length
3132
*/
3233
void API_SUFFIX(c_daxpy)( const CBLAS_INT N, const double alpha, const double *X, const CBLAS_INT strideX, double *Y, const CBLAS_INT strideY ) {
33-
CBLAS_INT ix;
34-
CBLAS_INT iy;
35-
CBLAS_INT i;
36-
CBLAS_INT m;
37-
38-
if ( N <= 0 ) {
39-
return;
40-
}
41-
// If `alpha` is `0`, then `y` is unchanged...
42-
if ( alpha == 0.0 ) {
43-
return;
44-
}
45-
// If both strides are equal to `1`, use unrolled loops...
46-
if ( strideX == 1 && strideY == 1 ) {
47-
m = N % 4;
48-
49-
// If we have a remainder, do a clean-up loop...
50-
if ( m > 0 ) {
51-
for ( i = 0; i < m; i++ ) {
52-
Y[ i ] += alpha * X[ i ];
53-
}
54-
if ( N < 4 ) {
55-
return;
56-
}
57-
}
58-
for ( i = m; i < N; i += 4 ) {
59-
Y[ i ] += alpha * X[ i ];
60-
Y[ i+1 ] += alpha * X[ i+1 ];
61-
Y[ i+2 ] += alpha * X[ i+2 ];
62-
Y[ i+3 ] += alpha * X[ i+3 ];
63-
}
64-
return;
65-
}
66-
if ( strideX < 0 ) {
67-
ix = (1-N) * strideX;
68-
} else {
69-
ix = 0;
70-
}
71-
if ( strideY < 0 ) {
72-
iy = (1-N) * strideY;
73-
} else {
74-
iy = 0;
75-
}
76-
for ( i = 0; i < N; i++ ) {
77-
Y[ iy ] += alpha * X[ ix ];
78-
ix += strideX;
79-
iy += strideY;
80-
}
34+
CBLAS_INT ox = stdlib_strided_stride2offset( N, strideX );
35+
CBLAS_INT oy = stdlib_strided_stride2offset( N, strideY );
36+
API_SUFFIX(c_daxpy_ndarray)( N, alpha, X, strideX, ox, Y, strideY, oy );
8137
return;
8238
}
8339

0 commit comments

Comments
 (0)