diff options
| author | Tom Smeding <tom@tomsmeding.com> | 2026-01-16 19:14:20 +0100 |
|---|---|---|
| committer | Tom Smeding <tom@tomsmeding.com> | 2026-01-16 19:14:20 +0100 |
| commit | 96795853db5a3ee85d7c838a508b4153988e6042 (patch) | |
| tree | 4a68cb28a90372dac463f873f7744760f7ef5151 | |
| parent | 411d563023c65270aca746f12c4d597b49122b45 (diff) | |
C: Fix REDUCEFULL
Only the last inner vector was kept...
| -rw-r--r-- | cbits/arith.c | 4 | ||||
| -rw-r--r-- | ops/Data/Array/Strided/Arith/Internal.hs | 1 |
2 files changed, 4 insertions, 1 deletions
diff --git a/cbits/arith.c b/cbits/arith.c index 1066463..ee248a4 100644 --- a/cbits/arith.c +++ b/cbits/arith.c @@ -494,7 +494,9 @@ static void print_shape(FILE *stream, i64 rank, const i64 *shape) { if (rank == 0) return arr[0]; \ typ result = 0; \ TARRAY_WALK_NOINNER(again, rank, shape, strides, { \ - REDUCE_BODY_CODE(op, typ, shape[rank - 1], strides[rank - 1], arr, arrlinidx, result); \ + typ dest = 0; \ + REDUCE_BODY_CODE(op, typ, shape[rank - 1], strides[rank - 1], arr, arrlinidx, dest); \ + result = result op dest; \ }); \ return result; \ } diff --git a/ops/Data/Array/Strided/Arith/Internal.hs b/ops/Data/Array/Strided/Arith/Internal.hs index d94fc65..7578dd8 100644 --- a/ops/Data/Array/Strided/Arith/Internal.hs +++ b/ops/Data/Array/Strided/Arith/Internal.hs @@ -396,6 +396,7 @@ vectorRedInnerOp sn@SNat valconv ptrconv fscale fred array@(Array sh strides off Nothing -> error "impossible" -- TODO: test handling of negative strides +-- TODO: simplify away normalised dimensions -- | Reduce full array {-# NOINLINE vectorRedFullOp #-} vectorRedFullOp :: forall a b n. (Num a, Storable a) |
