| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
The CPU JIT evaluation loop counted elements in int, so an array of more than 2^31 elements was left unevaluated and every reduction over it returned 0; the linear index is now dim_t through Node::calc. The all-elements add reduction also lost the low-order bits in one pass (1e9 float ones summed to 2^24), so it now carries a Kahan correction, as #3687 does for the dimension-wise sum. Both halves of #3571 on the CPU backend.
| Back | FazBrowse Home | New Git URL |
Two CPU-backend halves of #3571. The JIT evaluation loop counted elements in int, so an array of more than 2^31 elements was never evaluated and every reduction over it returned 0; the linear index is now dim_t through Node::calc and the loop. Separately, the all-elements add reduction accumulated in one pass, so 1e9 float ones summed to 16777216 (2^24) and norm came out as 4096; it now carries a Kahan correction, the same thing #3687 does for the dimension-wise sum, which still plateaus at 2^24 until that PR lands.
Verified here with 1e9 and 2.2e9-element arrays (sum, count, max, norm, f32/f64/u8 all exact after the change), and the reduce and jit suites pass on CPU and on OpenCL (Intel Arc B580). Adds a 1e8-element exact-sum test; the 2^31 case is not in the suite because it needs 9 GB. The OpenCL and CUDA JIT kernels index with int too and are not touched here.