queuing and job node allocs
This commit is contained in:
parent
6a6da59a79
commit
98aaa390be
2 changed files with 52 additions and 1 deletions
|
@ -1,23 +1,52 @@
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
|
|
||||||
|
const util = @import("util.zig");
|
||||||
|
|
||||||
|
const QueueWrap = struct {
|
||||||
|
alloc: std.mem.Allocator,
|
||||||
|
queue: *util.JobQueue,
|
||||||
|
job_pool: util.JobPool,
|
||||||
|
|
||||||
|
const Self = @This();
|
||||||
|
|
||||||
|
fn init(alloc: std.mem.Allocator, job_pool: util.JobPool) !Self {
|
||||||
|
var q = try alloc.create(util.JobQueue);
|
||||||
|
q.* = util.JobQueue.init(job_pool);
|
||||||
|
return Self {
|
||||||
|
.alloc = alloc,
|
||||||
|
.queue = q,
|
||||||
|
.job_pool = job_pool,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
fn deinit(self: *Self) void {
|
||||||
|
self.job_pool.deinit();
|
||||||
|
self.alloc.destroy(self.queue);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
pub const ThreadManager = struct {
|
pub const ThreadManager = struct {
|
||||||
threads: std.ArrayList(std.Thread),
|
threads: std.ArrayList(std.Thread),
|
||||||
arena: std.heap.ArenaAllocator,
|
arena: std.heap.ArenaAllocator,
|
||||||
|
queue: QueueWrap,
|
||||||
|
|
||||||
const Self = @This();
|
const Self = @This();
|
||||||
|
|
||||||
pub fn init(alloc: std.mem.Allocator, n_quant_jobs: usize) !Self {
|
pub fn init(alloc: std.mem.Allocator, n_quant_jobs: usize) !Self {
|
||||||
_ = n_quant_jobs;
|
_ = n_quant_jobs;
|
||||||
var arena = std.heap.ArenaAllocator.init(alloc);
|
var arena = std.heap.ArenaAllocator.init(alloc);
|
||||||
|
var arena_alloc = arena.allocator();
|
||||||
|
var job_pool = util.JobPool.init(alloc);
|
||||||
var thread_mgr = Self {
|
var thread_mgr = Self {
|
||||||
.threads = std.ArrayList(std.Thread).init(arena.allocator()),
|
.threads = std.ArrayList(std.Thread).init(arena_alloc),
|
||||||
.arena = arena,
|
.arena = arena,
|
||||||
|
.queue = try QueueWrap.init(arena_alloc, job_pool),
|
||||||
};
|
};
|
||||||
return thread_mgr;
|
return thread_mgr;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn deinit(self: *Self) void {
|
pub fn deinit(self: *Self) void {
|
||||||
self.threads.deinit();
|
self.threads.deinit();
|
||||||
|
self.queue.deinit();
|
||||||
self.arena.deinit();
|
self.arena.deinit();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
22
src/util.zig
22
src/util.zig
|
@ -10,6 +10,28 @@ pub const Options = struct {
|
||||||
pub const Block = [64]u8;
|
pub const Block = [64]u8;
|
||||||
pub const BlockQuantized = [64]i16;
|
pub const BlockQuantized = [64]i16;
|
||||||
|
|
||||||
|
pub const ThreadList = std.ArrayList(std.Thread);
|
||||||
|
pub const Job = struct {
|
||||||
|
source: *Block,
|
||||||
|
target: *BlockQuantized,
|
||||||
|
};
|
||||||
|
pub const JobQueue = struct {
|
||||||
|
mutex: std.Thread.Mutex,
|
||||||
|
queue: std.TailQueue(Job),
|
||||||
|
job_pool: JobPool,
|
||||||
|
|
||||||
|
const Self = @This();
|
||||||
|
|
||||||
|
pub fn init(pool: JobPool) Self {
|
||||||
|
return Self {
|
||||||
|
.mutex = std.Thread.Mutex{},
|
||||||
|
.queue = std.TailQueue(Job){},
|
||||||
|
.job_pool = pool,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
pub const JobPool = std.heap.MemoryPool(Job);
|
||||||
|
|
||||||
pub const Buffers = struct {
|
pub const Buffers = struct {
|
||||||
arena: std.heap.ArenaAllocator,
|
arena: std.heap.ArenaAllocator,
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue