1
1
module EvaluateEquationModule
2
2
3
+ import LoopVectorization: @turbo , indices
3
4
import .. EquationModule: Node, string_tree
4
5
import .. OperatorEnumModule: OperatorEnum, GenericOperatorEnum
5
6
import .. UtilsModule: @return_on_false , is_bad_array, vals
@@ -132,8 +133,8 @@ function deg2_eval(
132
133
op = operators. binops[op_idx]
133
134
134
135
# We check inputs (and intermediates), not outputs.
135
- @inbounds @simd for j in 1 : n
136
- x = op (cumulator[j], array2[j]):: T
136
+ @turbo for j in indices (cumulator)
137
+ x = op (cumulator[j], array2[j])
137
138
cumulator[j] = x
138
139
end
139
140
# return (cumulator, finished_loop) #
@@ -148,8 +149,8 @@ function deg1_eval(
148
149
@return_on_false complete cumulator
149
150
@return_on_nonfinite_array cumulator T n
150
151
op = operators. unaops[op_idx]
151
- @inbounds @simd for j in 1 : n
152
- x = op (cumulator[j]):: T
152
+ @turbo for j in indices (cumulator)
153
+ x = op (cumulator[j])
153
154
cumulator[j] = x
154
155
end
155
156
return (cumulator, true ) #
@@ -191,9 +192,9 @@ function deg1_l2_ll0_lr0_eval(
191
192
@return_on_check val_ll T n
192
193
feature_lr = tree. l. r. feature
193
194
cumulator = Array {T,1} (undef, n)
194
- @inbounds @simd for j in 1 : n
195
- x_l = op_l (val_ll, cX[feature_lr, j]):: T
196
- x = isfinite (x_l) ? op (x_l):: T : T (Inf ) # These will get discovered by _eval_tree_array at end.
195
+ @turbo for j in indices ((cX, cumulator), ( 2 , 1 ))
196
+ x_l = op_l (val_ll, cX[feature_lr, j])
197
+ x = isfinite (x_l) ? op (x_l) : T (Inf ) # These will get discovered by _eval_tree_array at end.
197
198
cumulator[j] = x
198
199
end
199
200
return (cumulator, true )
@@ -202,19 +203,19 @@ function deg1_l2_ll0_lr0_eval(
202
203
val_lr = tree. l. r. val:: T
203
204
@return_on_check val_lr T n
204
205
cumulator = Array {T,1} (undef, n)
205
- @inbounds @simd for j in 1 : n
206
- x_l = op_l (cX[feature_ll, j], val_lr):: T
207
- x = isfinite (x_l) ? op (x_l):: T : T (Inf )
206
+ @turbo for j in indices ((cX, cumulator), ( 2 , 1 ))
207
+ x_l = op_l (cX[feature_ll, j], val_lr)
208
+ x = isfinite (x_l) ? op (x_l) : T (Inf )
208
209
cumulator[j] = x
209
210
end
210
211
return (cumulator, true )
211
212
else
212
213
feature_ll = tree. l. l. feature
213
214
feature_lr = tree. l. r. feature
214
215
cumulator = Array {T,1} (undef, n)
215
- @inbounds @simd for j in 1 : n
216
- x_l = op_l (cX[feature_ll, j], cX[feature_lr, j]):: T
217
- x = isfinite (x_l) ? op (x_l):: T : T (Inf )
216
+ @turbo for j in indices ((cX, cumulator), ( 2 , 1 ))
217
+ x_l = op_l (cX[feature_ll, j], cX[feature_lr, j])
218
+ x = isfinite (x_l) ? op (x_l) : T (Inf )
218
219
cumulator[j] = x
219
220
end
220
221
return (cumulator, true )
@@ -243,9 +244,9 @@ function deg1_l1_ll0_eval(
243
244
else
244
245
feature_ll = tree. l. l. feature
245
246
cumulator = Array {T,1} (undef, n)
246
- @inbounds @simd for j in 1 : n
247
- x_l = op_l (cX[feature_ll, j]):: T
248
- x = isfinite (x_l) ? op (x_l):: T : T (Inf )
247
+ @turbo for j in indices ((cX, cumulator), ( 2 , 1 ))
248
+ x_l = op_l (cX[feature_ll, j])
249
+ x = isfinite (x_l) ? op (x_l) : T (Inf )
249
250
cumulator[j] = x
250
251
end
251
252
return (cumulator, true )
@@ -270,25 +271,25 @@ function deg2_l0_r0_eval(
270
271
val_l = tree. l. val:: T
271
272
@return_on_check val_l T n
272
273
feature_r = tree. r. feature
273
- @inbounds @simd for j in 1 : n
274
- x = op (val_l, cX[feature_r, j]):: T
274
+ @turbo for j in indices ((cX, cumulator), ( 2 , 1 ))
275
+ x = op (val_l, cX[feature_r, j])
275
276
cumulator[j] = x
276
277
end
277
278
elseif tree. r. constant
278
279
cumulator = Array {T,1} (undef, n)
279
280
feature_l = tree. l. feature
280
281
val_r = tree. r. val:: T
281
282
@return_on_check val_r T n
282
- @inbounds @simd for j in 1 : n
283
- x = op (cX[feature_l, j], val_r):: T
283
+ @turbo for j in indices ((cX, cumulator), ( 2 , 1 ))
284
+ x = op (cX[feature_l, j], val_r)
284
285
cumulator[j] = x
285
286
end
286
287
else
287
288
cumulator = Array {T,1} (undef, n)
288
289
feature_l = tree. l. feature
289
290
feature_r = tree. r. feature
290
- @inbounds @simd for j in 1 : n
291
- x = op (cX[feature_l, j], cX[feature_r, j]):: T
291
+ @turbo for j in indices ((cX, cumulator), ( 2 , 1 ))
292
+ x = op (cX[feature_l, j], cX[feature_r, j])
292
293
cumulator[j] = x
293
294
end
294
295
end
@@ -306,14 +307,14 @@ function deg2_l0_eval(
306
307
if tree. l. constant
307
308
val = tree. l. val:: T
308
309
@return_on_check val T n
309
- @inbounds @simd for j in 1 : n
310
- x = op (val, cumulator[j]):: T
310
+ @turbo for j in indices (cumulator)
311
+ x = op (val, cumulator[j])
311
312
cumulator[j] = x
312
313
end
313
314
else
314
315
feature = tree. l. feature
315
- @inbounds @simd for j in 1 : n
316
- x = op (cX[feature, j], cumulator[j]):: T
316
+ @turbo for j in indices ((cX, cumulator), ( 2 , 1 ))
317
+ x = op (cX[feature, j], cumulator[j])
317
318
cumulator[j] = x
318
319
end
319
320
end
@@ -331,14 +332,14 @@ function deg2_r0_eval(
331
332
if tree. r. constant
332
333
val = tree. r. val:: T
333
334
@return_on_check val T n
334
- @inbounds @simd for j in 1 : n
335
- x = op (cumulator[j], val):: T
335
+ @turbo for j in indices (cumulator)
336
+ x = op (cumulator[j], val)
336
337
cumulator[j] = x
337
338
end
338
339
else
339
340
feature = tree. r. feature
340
- @inbounds @simd for j in 1 : n
341
- x = op (cumulator[j], cX[feature, j]):: T
341
+ @turbo for j in indices ((cX, cumulator), ( 2 , 1 ))
342
+ x = op (cumulator[j], cX[feature, j])
342
343
cumulator[j] = x
343
344
end
344
345
end
0 commit comments