diff options
| author | Ubuntu <ubuntu@ip-172-31-17-195.eu-west-3.compute.internal> | 2022-03-05 17:49:26 +0000 |
|---|---|---|
| committer | Ubuntu <ubuntu@ip-172-31-17-195.eu-west-3.compute.internal> | 2022-03-05 17:49:26 +0000 |
| commit | a45f0a9d6bacee372161a007f2f1a0b2ffe05f81 (patch) | |
| tree | 60d665e51772e9d632493a93ff0d55ae1adb64e4 | |
| parent | dd33ee3926fb8294c5ad810e7f63043888ae7170 (diff) | |
| download | numpy-a45f0a9d6bacee372161a007f2f1a0b2ffe05f81.tar.gz | |
ENH: even faster numpy.where using loop unrolling (better ILP)
| -rw-r--r-- | numpy/core/src/multiarray/item_selection.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/numpy/core/src/multiarray/item_selection.c b/numpy/core/src/multiarray/item_selection.c index 1074eb2bd..a0fd0a574 100644 --- a/numpy/core/src/multiarray/item_selection.c +++ b/numpy/core/src/multiarray/item_selection.c @@ -2649,6 +2649,19 @@ PyArray_Nonzero(PyArrayObject *self) npy_intp * multi_index_end = multi_index + nonzero_count; npy_intp j = 0; + while (multi_index + 4 < multi_index_end) { + *multi_index = j; + multi_index += data[0] != 0; + *multi_index = j + 1; + multi_index += data[stride] != 0; + *multi_index = j + 2; + multi_index += data[stride * 2] != 0; + *multi_index = j + 3; + multi_index += data[stride * 3] != 0; + data += stride * 4; + j += 4; + } + while (multi_index < multi_index_end) { *multi_index = j; multi_index += *data != 0; |
