Ling-3.0-tiny-RKNN / src /core_workers.h
Sariel00's picture
Publish Ling-3.0-tiny RKNN engine and model
3fd1a35 verified
Raw History Blame Contribute Delete
965 Bytes
#pragma once
#include <array>
#include <condition_variable>
#include <cstddef>
#include <exception>
#include <functional>
#include <mutex>
#include <span>
#include <thread>
namespace ling3 {
class CoreWorkers {
public:
static CoreWorkers & Instance();
CoreWorkers(const CoreWorkers &) = delete;
CoreWorkers & operator=(const CoreWorkers &) = delete;
void Run(std::span<const int> cores, const std::function<void(int)> & task);
private:
CoreWorkers();
~CoreWorkers();
void Worker(int core);
std::array<std::thread, 4> workers_;
std::array<bool, 4> active_ {};
std::array<std::exception_ptr, 4> errors_ {};
std::function<void(int)> task_;
std::mutex run_mutex_;
std::mutex state_mutex_;
std::condition_variable start_;
std::condition_variable done_;
std::size_t generation_ = 0;
std::size_t active_count_ = 0;
std::size_t completed_ = 0;
bool stop_ = false;
};
} // namespace ling3