Repository navigation
Still another array access performance issue (in debug) #15685
Copy link
Copy link
Closed
Labels
bugObserved behavior contradicts documented or intended behaviorObserved behavior contradicts documented or intended behavioroptimizationregressionIt worked in a previous version of Zig, but stopped working.It worked in a previous version of Zig, but stopped working.
Milestone
Description
Activity
- addedbugObserved behavior contradicts documented or intended behaviorObserved behavior contradicts documented or intended behavior
on May 13, 2023 IntegratedQuantum commented
on Jun 6, 2023 ContributorAuthorMore actionsI just updated my zig version and the problem got a lot worse.
EDIT: I updated again and it is now back to how it was originally.
Expand
This simplified example was not affected in the past:
const std = @import("std"); const len = 32*32*32; var blocks: [len]u16 = undefined; pub noinline fn regenerateMainMesh() u32 { var sum: u32 = 0; var i: u16 = 0; while(i < len) : (i += 1) { sum += blocks[i]; // ← workaround: (&blocks)[...] } return sum; } pub fn main() void { for(&blocks, 0..) |*block, i| { block.* = @intCast(u16, i); } const start = std.time.nanoTimestamp(); const sum = regenerateMainMesh(); const end = std.time.nanoTimestamp(); std.log.err("Time: {} Sum: {}", .{end - start, sum}); }
But now it is also slow:
$ zig version 0.11.0-dev.3380+7e0a02ee2 $ zig run test.zig error: Time: 98298061 Sum: 536854528 $ ~/Downloads/zig-old/zig version 0.11.0-dev.3132+465272921 $ ~/Downloads/zig-old/zig run test.zig error: Time: 632556 Sum: 536854528Reacted by Rafael Ristovski- addedregressionIt worked in a previous version of Zig, but stopped working.It worked in a previous version of Zig, but stopped working.
on Oct 24, 2023 Fix landed in 2ab7893.
- added a commit that references this issue
on Jan 24, 2024 Fix reverted in 9d5a133.
- added a commit that references this issue
on Jan 25, 2024 - added a commit that references this issue
on Jan 27, 2024 - added 2 commits that reference this issue
on Mar 18, 2024 - added a commit that references this issue
on Mar 22, 2024 IntegratedQuantum commented
on Sep 21, 2025 ContributorAuthorMore actionsfixed by #25154
Metadata
Metadata
Assignees
Labels
bugObserved behavior contradicts documented or intended behaviorObserved behavior contradicts documented or intended behavioroptimizationregressionIt worked in a previous version of Zig, but stopped working.It worked in a previous version of Zig, but stopped working.
Type
Projects
- StatusShow more project fieldsOptimize Machine Code
Zig Version
0.11.0-dev.3105+e46d7a369
Steps to Reproduce and Observed Behavior
This is a follow-up to #13938 which was only fixed in release mode(which means I still have to rely on the workaround to be able to run my code in debug mode). The reproduction code is basically identical:
Running this in debug mode is taking 93 ms for iterating over a 32768 element array:
Running this in a profiler, I can see that the bottleneck still is a


memcpythat is called once every iteration and appears to be copying the entire array:Expected Behavior
When applying the workaround
the performance is significantly better, taking only 0.4 ms instead of 93 ms: