|
18 | 18 |
|
19 | 19 | 'use strict'; |
20 | 20 |
|
21 | | -// MODULES // |
22 | | - |
23 | | -var isRowMajor = require( '@stdlib/ndarray/base/assert/is-row-major' ); |
24 | | - |
25 | | - |
26 | 21 | // MAIN // |
27 | 22 |
|
28 | 23 | /** |
@@ -55,56 +50,25 @@ var isRowMajor = require( '@stdlib/ndarray/base/assert/is-row-major' ); |
55 | 50 | * // A => <Float64Array>[ 2.0, 3.0, 4.0, 5.0, 6.0, 7.0 ] |
56 | 51 | */ |
57 | 52 | function dger( M, N, alpha, x, strideX, offsetX, y, strideY, offsetY, A, strideA1, strideA2, offsetA ) { // eslint-disable-line max-params, max-len |
58 | | - var isrm; |
59 | 53 | var tmp; |
60 | | - var ix1; |
61 | | - var iy1; |
62 | | - var sa0; |
63 | | - var sa1; |
64 | | - var i0; |
65 | | - var i1; |
66 | | - var oa; |
67 | | - |
68 | | - // Note on variable naming convention: sa#, ix#, i# where # corresponds to the loop number, with `0` being the innermost loop... |
| 54 | + var idx; |
| 55 | + var jy; |
| 56 | + var ix; |
| 57 | + var i; |
| 58 | + var j; |
69 | 59 |
|
70 | | - isrm = isRowMajor( [ strideA1, strideA2 ] ); |
71 | | - if ( isrm ) { |
72 | | - // For row-major matrices, the last dimension has the fastest changing index... |
73 | | - sa0 = strideA2; // stride for innermost loop |
74 | | - sa1 = strideA1; // stride for outermost loop |
75 | | - } else { // isColMajor |
76 | | - // For column-major matrices, the first dimension has the fastest changing index... |
77 | | - sa0 = strideA1; // stride for innermost loop |
78 | | - sa1 = strideA2; // stride for outermost loop |
79 | | - } |
80 | | - if ( !isrm ) { |
81 | | - iy1 = offsetY; |
82 | | - for ( i1 = 0; i1 < N; i1++ ) { |
83 | | - if ( y[ iy1 ] !== 0.0 ) { |
84 | | - tmp = alpha * y[ iy1 ]; |
85 | | - ix1 = offsetX; |
86 | | - oa = offsetA + ( sa1 * i1 ); |
87 | | - for ( i0 = 0; i0 < M; i0++ ) { |
88 | | - A[ oa + ( sa0 * i0 ) ] += x[ ix1 ] * tmp; |
89 | | - ix1 += strideX; |
90 | | - } |
91 | | - } |
92 | | - iy1 += strideY; |
93 | | - } |
94 | | - return A; |
95 | | - } |
96 | | - ix1 = offsetX; |
97 | | - for ( i1 = 0; i1 < M; i1++ ) { |
98 | | - if ( x[ ix1 ] !== 0.0 ) { |
99 | | - tmp = alpha * x[ ix1 ]; |
100 | | - iy1 = offsetY; |
101 | | - oa = offsetA + (sa1*i1); |
102 | | - for ( i0 = 0; i0 < N; i0++ ) { |
103 | | - A[ oa + ( sa0 * i0 ) ] += y[ iy1 ] * tmp; |
104 | | - iy1 += strideY; |
| 60 | + jy = offsetY; |
| 61 | + for ( j = 0; j < N; j++ ) { |
| 62 | + if ( y[ jy ] !== 0.0 ) { |
| 63 | + tmp = alpha * y[ jy ]; |
| 64 | + ix = offsetX; |
| 65 | + for ( i = 0; i < M; i++ ) { |
| 66 | + idx = offsetA + ( i * strideA1 ) + ( j * strideA2 ); |
| 67 | + A[ idx ] += x[ ix ] * tmp; |
| 68 | + ix += strideX; |
105 | 69 | } |
106 | 70 | } |
107 | | - ix1 += strideX; |
| 71 | + jy += strideY; |
108 | 72 | } |
109 | 73 | return A; |
110 | 74 | } |
|
0 commit comments