Skip to content

Commit c0e0fd1

Browse files
committed
Optimize strided loop assignment for runtime-contiguous layout types with contiguous assignment
1 parent 8c0a484 commit c0e0fd1

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

include/xtensor/xassign.hpp

+5-3
Original file line numberDiff line numberDiff line change
@@ -1141,6 +1141,8 @@ namespace xt
11411141
std::size_t simd_size = inner_loop_size / simd_type::size;
11421142
std::size_t simd_rest = inner_loop_size % simd_type::size;
11431143

1144+
bool e1_is_contiguous = E1::contiguous_layout || e1.is_contiguous();
1145+
11441146
auto fct_stepper = e2.stepper_begin(e1.shape());
11451147
auto res_stepper = e1.stepper_begin(e1.shape());
11461148

@@ -1191,7 +1193,7 @@ namespace xt
11911193
fct_stepper.to_begin();
11921194

11931195
// need to step E1 as well if not contigous assign (e.g. view)
1194-
if (!E1::contiguous_layout)
1196+
if (!E1::contiguous_layout && !e1_is_contiguous)
11951197
{
11961198
res_stepper.to_begin();
11971199
for (std::size_t i = 0; i < idx.size(); ++i)
@@ -1266,7 +1268,7 @@ namespace xt
12661268
fct_stepper.to_begin();
12671269

12681270
// need to step E1 as well if not contigous assign (e.g. view)
1269-
if (!E1::contiguous_layout)
1271+
if (!E1::contiguous_layout && !e1_is_contiguous)
12701272
{
12711273
res_stepper.to_begin();
12721274
for (std::size_t i = 0; i < idx.size(); ++i)
@@ -1311,7 +1313,7 @@ namespace xt
13111313
fct_stepper.to_begin();
13121314

13131315
// need to step E1 as well if not contigous assign (e.g. view)
1314-
if (!E1::contiguous_layout)
1316+
if (!E1::contiguous_layout && !e1_is_contiguous)
13151317
{
13161318
res_stepper.to_begin();
13171319
for (std::size_t i = 0; i < idx.size(); ++i)

0 commit comments

Comments
 (0)