Commit Graph

39 Commits

Author SHA1 Message Date
SirLynix e3ad9be759 Core/TaskScheduler: Fix work ending condition
Use remaining task count instead of idle worker count, this avoids a race condition where a worker signals idle after being tasked with a new job
2024-02-03 22:40:12 +01:00
SirLynix 8b9b47ba59 Core/TaskScheduler: Fix WaitForTasks returning before all tasks are executed
This could happen because a worker only counts as active when starting a job, but after acquiring one.

So one possibility was that :
1. All workers except W1 and W2 are idle
2. W1 is about to notify as idle, as W2 got a task (but did not notify as active yet)
3. W1 notifies as idle, idle count == worker count -> wake main thread
4. W2 didn't run its task yet
2024-02-03 14:41:10 +01:00
SirLynix d2b3b93646 Fix compilation 2024-02-02 23:48:35 +01:00
SirLynix c303bf9283 Core/TaskScheduler: Use WorkStealingQueue::pop
steal() can incorrectly return nullptr even if the list is not empty in case of concurrent access, but push and pop are not threadsafe so we use a spinlock to prevent concurrent uses
2024-02-02 23:19:29 +01:00
SirLynix e3fa6fed89 Core/TaskScheduler: Fix TSan false-positive and remove std::optional 2024-02-02 21:19:17 +01:00
SirLynix 06a42b4ecb Cleanup code 2024-02-02 17:31:12 +01:00
SirLynix fa73e463a6 Core/TaskScheduler: Fix race conditions when calling AddTask while workers are not idle
Update TaskScheduler.cpp
2024-02-02 16:23:00 +01:00
SirLynix 7f1ef0fe41 Core/TaskScheduler: Rework using atomics and WorkStealingQueue 2024-02-02 14:27:18 +01:00
SirLynix 369f273894 Core/TaskScheduler: Fix AddTask 2024-02-01 09:53:17 +01:00
SirLynix 5d6a094bfe Core/TaskScheduler: Add std::hardware_destructive_interference_size fallback
It was implemented in GCC 12.1 which is not yet available on the CI
2024-01-31 22:16:35 +01:00
SirLynix 9db333fa80 Core/TaskScheduler: Remove jthread and stop_token
jthread/stop_token are not yet implemented in libc++ and on Apple Clang
2024-01-31 21:04:42 +01:00
Lynix 9d669f722e Core: Rework TaskScheduler (WIP) 2024-01-31 16:42:25 +01:00
SirLynix d2e2c075b4 Update copyright year 2024-01-02 12:02:14 +01:00
SirLynix f2e77fb8a5 Rename Nz::Functor to Nz::AbstractFunctor 2023-11-17 13:19:21 +01:00
SirLynix 4b8a475bbd Split error macro into two versions (format vs non-formating) to allow format checking at compile-time 2023-11-02 15:18:03 +01:00
SirLynix f98cbcd00a Copyright year update 2023-01-22 17:41:18 +01:00
SirLynix 6d0b53b39e Core: Rework HardwareInfo 2022-09-24 15:52:29 +02:00
SirLynix 89c7bbf197 Update copyright date 2022-01-01 15:30:09 +01:00
Jérôme Leclercq ed7ab31933 Apply copyright fix to all files 2021-10-26 14:31:35 +02:00
Lynix c23b6dfa01 Copyright year update
I can't wait to see the conflicts this will cause
2020-03-05 17:27:26 +01:00
DrLynix f383eca19a Update copyright year 2017-01-20 12:58:35 +01:00
Lynix 1c4135fc09 Improve documentation
Former-commit-id: 08d70f6a53a7f12d2748d145d1fe139595a1b39e
2016-03-01 15:37:05 +01:00
Gawaboumga c163d65da7 Documentation for Thread
Former-commit-id: b33bbdf473792ddcde8ffbe310722d83a1a12bcf
2016-02-21 14:29:03 +01:00
Lynix df8da275c4 Switch from Nz prefix to namespace Nz
What a huge commit


Former-commit-id: 38ac5eebf70adc1180f571f6006192d28fb99897
2015-09-25 19:20:05 +02:00
Lynix ea8d683624 Updated copyright year
(532 files, wow)


Former-commit-id: cbb31f1124a86720bd3a54fe589a0f849a87b434
2015-01-21 20:53:01 +01:00
Lynix 361e2a31ee Improved submodules
PluginManager is now a submodule


Former-commit-id: 2e147317ab07447e134d15790386bd6d3494b9d1
2014-04-20 23:50:55 +02:00
Lynix b30d325ca5 Made Submodules initialized when used
Former-commit-id: 203a4a3b07e18301ce003129bb6af22e0478d07a
2014-04-12 14:19:29 +02:00
Lynix c096756dab Happy thousandth commit Nazara
Updated copyright year (Yay, 515 file updated)
Regenerated global headers
Fixed some typo
Improved some shaders
-Blah blah blah-

Thank you all for supporting my project !
-Lynix


Former-commit-id: e4e741b318ba4f203da5ffd265bd5e516e7ffd7d
2014-01-12 20:16:21 +01:00
Lynix 0af23c11f5 Fixed TaskSchduler not releasing memory and handles
Former-commit-id: 4bf70d2ffdaaaea6b8ee122bb4589b3d8c68884f
2013-11-30 16:13:54 +01:00
Lynix 55aed0ec68 Rewrote Task Scheduler
Better and faster implementation


Former-commit-id: d765415ca0576cd843480292e30c2d7bafa7f66a
2013-11-30 13:48:01 +01:00
Lynix 459c7a4d07 Made use of atomic variables
In order to replace mutex-protected integer values (Performance
improvement)


Former-commit-id: d40ed2444111f00dab372f2371fe91cfd9cd2472
2013-05-03 23:12:58 +02:00
Lynix 8694f71c2a X::Initialize no longer takes arguments
Former-commit-id: a8233235e89112630f2d31c637723443bd0829a4
2013-04-03 16:41:57 +02:00
Lynix 32b1d02cec Updated copyright texts
Former-commit-id: 81483f7a94935c925e53b7f450e42635b1357833
2013-03-13 23:23:41 +01:00
Lynix eca2ec3115 Stabilized TaskScheduler (Still buggy)
Former-commit-id: a604c6616065342b21d2c11c27974ec11935a852
2013-03-02 00:26:48 +01:00
Lynix 3a4fb198e8 Fixed TaskScheduler leak
Former-commit-id: 3c8a5217fdd89f4ad7acad86a184420a6abf9e2f
2013-02-15 13:41:52 +01:00
Lynix 4dc1d88f7b Fixed TaskScheduler not resetting impl pointer
Former-commit-id: fdd46cdbce5b876fbb286439ccfc96f1f98ac4fe
2012-12-08 21:52:50 +01:00
Lynix 6f495c654a Added TaskScheduler::GetWorkerCount()
Former-commit-id: db4bf747441a13f2d824410aa5be264b300e95d4
2012-12-06 01:01:26 +01:00
Lynix 9839e36171 Removed blanks
Former-commit-id: e3bcf84a1fcb36e52f953c5f18ca51aa9499ed61
2012-12-04 10:35:34 +01:00
Lynix ef567bd223 Added Task Scheduler
Former-commit-id: ac37f749ae78f364db3d3edfabc8221802579989
2012-12-03 01:30:04 +01:00