Skip to content

Commit 167d3ae

Browse files
committed
Optimize strided loop assignment for runtime-contiguous layout types with contiguous assignment
1 parent 2be98b4 commit 167d3ae

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

include/xtensor/core/xassign.hpp

+5-3
Original file line numberDiff line numberDiff line change
@@ -1135,6 +1135,8 @@ namespace xt
11351135
std::size_t simd_size = inner_loop_size / simd_type::size;
11361136
std::size_t simd_rest = inner_loop_size % simd_type::size;
11371137

1138+
bool e1_is_contiguous = E1::contiguous_layout || e1.is_contiguous();
1139+
11381140
auto fct_stepper = e2.stepper_begin(e1.shape());
11391141
auto res_stepper = e1.stepper_begin(e1.shape());
11401142

@@ -1185,7 +1187,7 @@ namespace xt
11851187
fct_stepper.to_begin();
11861188

11871189
// need to step E1 as well if not contigous assign (e.g. view)
1188-
if (!E1::contiguous_layout)
1190+
if (!E1::contiguous_layout && !e1_is_contiguous)
11891191
{
11901192
res_stepper.to_begin();
11911193
for (std::size_t i = 0; i < idx.size(); ++i)
@@ -1260,7 +1262,7 @@ namespace xt
12601262
fct_stepper.to_begin();
12611263

12621264
// need to step E1 as well if not contigous assign (e.g. view)
1263-
if (!E1::contiguous_layout)
1265+
if (!E1::contiguous_layout && !e1_is_contiguous)
12641266
{
12651267
res_stepper.to_begin();
12661268
for (std::size_t i = 0; i < idx.size(); ++i)
@@ -1305,7 +1307,7 @@ namespace xt
13051307
fct_stepper.to_begin();
13061308

13071309
// need to step E1 as well if not contigous assign (e.g. view)
1308-
if (!E1::contiguous_layout)
1310+
if (!E1::contiguous_layout && !e1_is_contiguous)
13091311
{
13101312
res_stepper.to_begin();
13111313
for (std::size_t i = 0; i < idx.size(); ++i)

0 commit comments

Comments
 (0)