mirror of
https://github.com/mmueller41/mxtasking.git
synced 2026-01-21 12:42:57 +01:00
Changed worker loop to watch out for yield signal. Also, removed the pinning as this is done when the worker's thread is created.
This commit is contained in:
@@ -12,6 +12,7 @@
|
|||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <base/log.h>
|
#include <base/log.h>
|
||||||
#include <trace/timestamp.h>
|
#include <trace/timestamp.h>
|
||||||
|
#include <nova/syscalls.h>
|
||||||
|
|
||||||
using namespace mx::tasking;
|
using namespace mx::tasking;
|
||||||
|
|
||||||
@@ -27,12 +28,12 @@ Worker::Worker(const std::uint16_t id, const std::uint16_t target_core_id, const
|
|||||||
|
|
||||||
void Worker::execute()
|
void Worker::execute()
|
||||||
{
|
{
|
||||||
{
|
/*{
|
||||||
Genode::Thread *self = Genode::Thread::myself();
|
Genode::Thread *self = Genode::Thread::myself();
|
||||||
Genode::Affinity::Location loc = system::Environment::location(_target_core_id);
|
Genode::Affinity::Location loc = system::Environment::location(_target_core_id);
|
||||||
|
|
||||||
self->pin(loc);
|
self->pin(loc);
|
||||||
}
|
}*/
|
||||||
|
|
||||||
while (this->_is_running == false)
|
while (this->_is_running == false)
|
||||||
{
|
{
|
||||||
@@ -41,10 +42,11 @@ void Worker::execute()
|
|||||||
|
|
||||||
TaskInterface *task;
|
TaskInterface *task;
|
||||||
const auto core_id = system::topology::core_id();
|
const auto core_id = system::topology::core_id();
|
||||||
assert(this->_target_core_id == core_id && "Worker not pinned to correct core.");
|
//assert(this->_target_core_id == core_id && "Worker not pinned to correct core.");
|
||||||
const auto channel_id = this->_channel.id();
|
const auto channel_id = this->_channel.id();
|
||||||
|
const auto phys_core_id = system::Environment::topo().phys_id(Genode::Thread::myself()->affinity());
|
||||||
|
|
||||||
|
std::uint64_t *volatile tukija_signal = &_tukija_signal[phys_core_id];
|
||||||
|
|
||||||
while (this->_is_running)
|
while (this->_is_running)
|
||||||
{
|
{
|
||||||
@@ -55,6 +57,10 @@ void Worker::execute()
|
|||||||
|
|
||||||
this->_channel_size = this->_channel.fill();
|
this->_channel_size = this->_channel.fill();
|
||||||
|
|
||||||
|
if (this->_channel_size == 0) {
|
||||||
|
Nova::yield(true);
|
||||||
|
}
|
||||||
|
|
||||||
if constexpr (config::task_statistics())
|
if constexpr (config::task_statistics())
|
||||||
{
|
{
|
||||||
this->_statistic.increment<profiling::Statistic::Fill>(channel_id);
|
this->_statistic.increment<profiling::Statistic::Fill>(channel_id);
|
||||||
@@ -130,6 +136,10 @@ void Worker::execute()
|
|||||||
{
|
{
|
||||||
runtime::delete_task(core_id, task);
|
runtime::delete_task(core_id, task);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (__atomic_load_n(tukija_signal, __ATOMIC_SEQ_CST)) {
|
||||||
|
Nova::yield(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user