mirror of
https://github.com/ziglang/zig.git
synced 2026-02-12 20:37:54 +00:00
InternPool: reduce max tid width by one bit
@mlugg keeps stealing my bits!
This commit is contained in:
parent
b0fe7eef54
commit
9d1820d206
@ -10,6 +10,8 @@ shards: []Shard = &.{},
|
||||
global_error_set: GlobalErrorSet = GlobalErrorSet.empty,
|
||||
/// Cached number of active bits in a `tid`.
|
||||
tid_width: if (single_threaded) u0 else std.math.Log2Int(u32) = 0,
|
||||
/// Cached shift amount to put a `tid` in the top bits of a 30-bit value.
|
||||
tid_shift_30: if (single_threaded) u0 else std.math.Log2Int(u32) = if (single_threaded) 0 else 31,
|
||||
/// Cached shift amount to put a `tid` in the top bits of a 31-bit value.
|
||||
tid_shift_31: if (single_threaded) u0 else std.math.Log2Int(u32) = if (single_threaded) 0 else 31,
|
||||
/// Cached shift amount to put a `tid` in the top bits of a 32-bit value.
|
||||
@ -4091,8 +4093,8 @@ pub const Index = enum(u32) {
|
||||
|
||||
fn wrap(unwrapped: Unwrapped, ip: *const InternPool) Index {
|
||||
assert(@intFromEnum(unwrapped.tid) <= ip.getTidMask());
|
||||
assert(unwrapped.index <= ip.getIndexMask(u31));
|
||||
return @enumFromInt(@as(u32, @intFromEnum(unwrapped.tid)) << ip.tid_shift_31 | unwrapped.index);
|
||||
assert(unwrapped.index <= ip.getIndexMask(u30));
|
||||
return @enumFromInt(@as(u32, @intFromEnum(unwrapped.tid)) << ip.tid_shift_30 | unwrapped.index);
|
||||
}
|
||||
|
||||
pub fn getExtra(unwrapped: Unwrapped, ip: *const InternPool) Local.Extra {
|
||||
@ -4131,8 +4133,8 @@ pub const Index = enum(u32) {
|
||||
.tid = .main,
|
||||
.index = @intFromEnum(index),
|
||||
} else .{
|
||||
.tid = @enumFromInt(@intFromEnum(index) >> ip.tid_shift_31 & ip.getTidMask()),
|
||||
.index = @intFromEnum(index) & ip.getIndexMask(u31),
|
||||
.tid = @enumFromInt(@intFromEnum(index) >> ip.tid_shift_30 & ip.getTidMask()),
|
||||
.index = @intFromEnum(index) & ip.getIndexMask(u30),
|
||||
};
|
||||
}
|
||||
|
||||
@ -5822,6 +5824,7 @@ pub fn init(ip: *InternPool, gpa: Allocator, available_threads: usize) !void {
|
||||
});
|
||||
|
||||
ip.tid_width = @intCast(std.math.log2_int_ceil(usize, used_threads));
|
||||
ip.tid_shift_30 = if (single_threaded) 0 else 30 - ip.tid_width;
|
||||
ip.tid_shift_31 = if (single_threaded) 0 else 31 - ip.tid_width;
|
||||
ip.tid_shift_32 = if (single_threaded) 0 else ip.tid_shift_31 +| 1;
|
||||
ip.shards = try gpa.alloc(Shard, @as(usize, 1) << ip.tid_width);
|
||||
|
||||
@ -3,7 +3,8 @@ zcu: *Zcu,
|
||||
/// Dense, per-thread unique index.
|
||||
tid: Id,
|
||||
|
||||
pub const Id = if (InternPool.single_threaded) enum { main } else enum(u8) { main, _ };
|
||||
pub const IdBacking = u7;
|
||||
pub const Id = if (InternPool.single_threaded) enum { main } else enum(IdBacking) { main, _ };
|
||||
|
||||
pub fn destroyDecl(pt: Zcu.PerThread, decl_index: Zcu.Decl.Index) void {
|
||||
const zcu = pt.zcu;
|
||||
|
||||
@ -3110,7 +3110,7 @@ fn buildOutputType(
|
||||
var thread_pool: ThreadPool = undefined;
|
||||
try thread_pool.init(.{
|
||||
.allocator = gpa,
|
||||
.n_jobs = @min(@max(n_jobs orelse std.Thread.getCpuCount() catch 1, 1), std.math.maxInt(u8)),
|
||||
.n_jobs = @min(@max(n_jobs orelse std.Thread.getCpuCount() catch 1, 1), std.math.maxInt(Zcu.PerThread.IdBacking)),
|
||||
.track_ids = true,
|
||||
});
|
||||
defer thread_pool.deinit();
|
||||
@ -4961,7 +4961,7 @@ fn cmdBuild(gpa: Allocator, arena: Allocator, args: []const []const u8) !void {
|
||||
var thread_pool: ThreadPool = undefined;
|
||||
try thread_pool.init(.{
|
||||
.allocator = gpa,
|
||||
.n_jobs = @min(@max(n_jobs orelse std.Thread.getCpuCount() catch 1, 1), std.math.maxInt(u8)),
|
||||
.n_jobs = @min(@max(n_jobs orelse std.Thread.getCpuCount() catch 1, 1), std.math.maxInt(Zcu.PerThread.IdBacking)),
|
||||
.track_ids = true,
|
||||
});
|
||||
defer thread_pool.deinit();
|
||||
@ -5399,7 +5399,7 @@ fn jitCmd(
|
||||
var thread_pool: ThreadPool = undefined;
|
||||
try thread_pool.init(.{
|
||||
.allocator = gpa,
|
||||
.n_jobs = @min(@max(std.Thread.getCpuCount() catch 1, 1), std.math.maxInt(u8)),
|
||||
.n_jobs = @min(@max(std.Thread.getCpuCount() catch 1, 1), std.math.maxInt(Zcu.PerThread.IdBacking)),
|
||||
.track_ids = true,
|
||||
});
|
||||
defer thread_pool.deinit();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user