@@ -77,7 +77,7 @@ void apply(std::shared_ptr<const ReferenceExecutor> exec,
77
77
} else {
78
78
for (size_type row = 0 ; row < c->get_size ()[0 ]; ++row) {
79
79
for (size_type col = 0 ; col < c->get_size ()[1 ]; ++col) {
80
- c->at (row, col) * = zero<ValueType>();
80
+ c->at (row, col) = zero<ValueType>();
81
81
}
82
82
}
83
83
}
@@ -133,7 +133,11 @@ void scale(std::shared_ptr<const ReferenceExecutor> exec,
133
133
if (alpha->get_size ()[1 ] == 1 ) {
134
134
for (size_type i = 0 ; i < x->get_size ()[0 ]; ++i) {
135
135
for (size_type j = 0 ; j < x->get_size ()[1 ]; ++j) {
136
- x->at (i, j) *= alpha->at (0 , 0 );
136
+ if (is_zero (alpha->at (0 , 0 ))) {
137
+ x->at (i, j) = zero<ValueType>();
138
+ } else {
139
+ x->at (i, j) *= alpha->at (0 , 0 );
140
+ }
137
141
}
138
142
}
139
143
} else {
@@ -178,9 +182,11 @@ void add_scaled(std::shared_ptr<const ReferenceExecutor> exec,
178
182
const matrix::Dense<ValueType>* x, matrix::Dense<ValueType>* y)
179
183
{
180
184
if (alpha->get_size ()[1 ] == 1 ) {
181
- for (size_type i = 0 ; i < x->get_size ()[0 ]; ++i) {
182
- for (size_type j = 0 ; j < x->get_size ()[1 ]; ++j) {
183
- y->at (i, j) += alpha->at (0 , 0 ) * x->at (i, j);
185
+ if (is_nonzero (alpha->at (0 , 0 ))) {
186
+ for (size_type i = 0 ; i < x->get_size ()[0 ]; ++i) {
187
+ for (size_type j = 0 ; j < x->get_size ()[1 ]; ++j) {
188
+ y->at (i, j) += alpha->at (0 , 0 ) * x->at (i, j);
189
+ }
184
190
}
185
191
}
186
192
} else {
@@ -202,9 +208,11 @@ void sub_scaled(std::shared_ptr<const ReferenceExecutor> exec,
202
208
const matrix::Dense<ValueType>* x, matrix::Dense<ValueType>* y)
203
209
{
204
210
if (alpha->get_size ()[1 ] == 1 ) {
205
- for (size_type i = 0 ; i < x->get_size ()[0 ]; ++i) {
206
- for (size_type j = 0 ; j < x->get_size ()[1 ]; ++j) {
207
- y->at (i, j) -= alpha->at (0 , 0 ) * x->at (i, j);
211
+ if (is_nonzero (alpha->at (0 , 0 ))) {
212
+ for (size_type i = 0 ; i < x->get_size ()[0 ]; ++i) {
213
+ for (size_type j = 0 ; j < x->get_size ()[1 ]; ++j) {
214
+ y->at (i, j) -= alpha->at (0 , 0 ) * x->at (i, j);
215
+ }
208
216
}
209
217
}
210
218
} else {
@@ -227,8 +235,10 @@ void add_scaled_diag(std::shared_ptr<const ReferenceExecutor> exec,
227
235
matrix::Dense<ValueType>* y)
228
236
{
229
237
const auto diag_values = x->get_const_values ();
230
- for (size_type i = 0 ; i < x->get_size ()[0 ]; i++) {
231
- y->at (i, i) += alpha->at (0 , 0 ) * diag_values[i];
238
+ if (is_nonzero (alpha->at (0 , 0 ))) {
239
+ for (size_type i = 0 ; i < x->get_size ()[0 ]; i++) {
240
+ y->at (i, i) += alpha->at (0 , 0 ) * diag_values[i];
241
+ }
232
242
}
233
243
}
234
244
@@ -242,8 +252,10 @@ void sub_scaled_diag(std::shared_ptr<const ReferenceExecutor> exec,
242
252
matrix::Dense<ValueType>* y)
243
253
{
244
254
const auto diag_values = x->get_const_values ();
245
- for (size_type i = 0 ; i < x->get_size ()[0 ]; i++) {
246
- y->at (i, i) -= alpha->at (0 , 0 ) * diag_values[i];
255
+ if (is_nonzero (alpha->at (0 , 0 ))) {
256
+ for (size_type i = 0 ; i < x->get_size ()[0 ]; i++) {
257
+ y->at (i, i) -= alpha->at (0 , 0 ) * diag_values[i];
258
+ }
247
259
}
248
260
}
249
261
0 commit comments