xref: /TaskScheduler/README.md (revision 2b9bbb88)
1e554e8ecSSergey Makeev## About
2e554e8ecSSergey Makeev
373ece2e0SSergey Makeev**Cross-platform, fiber-based, multi-threaded task scheduler designed for video games.**
46756c906SSergey Makeev
5375302d4SSergey Makeev**Written under the influence by great GDC talk "Parallelizing the Naughty Dog engine using fibers" by Christian Gyrling**
610cd321cSSergey Makeev
7111120ceSs.makeev_localCompiled and worked on : **Clang 3.4, GCC 4.8.2, MSVC 2010/2012/2015/2017, XCODE 6.4**
810cd321cSSergey Makeev
9111120ceSs.makeev_local## Commercial games using Task Scheduler
10111120ceSs.makeev_local
11111120ceSs.makeev_local- Skyforge (PC, PS4, X1)
1210cd321cSSergey Makeev
132174fd67SSergey Makeev## Build status
142174fd67SSergey Makeev
157d10a4abSSergey MakeevLinux + OS X
166d547c14SSergey Makeev![Travis build status](https://api.travis-ci.org/SergeyMakeev/TaskScheduler.svg?branch=master)
172174fd67SSergey Makeev
18e297596cSSergey MakeevWindows
196d547c14SSergey Makeev![Appveyor build status](https://ci.appveyor.com/api/projects/status/7o760ylay8mdplo6)
20e297596cSSergey Makeev
2173ece2e0SSergey Makeev## Usage examples
22e297596cSSergey Makeev
23617afdd0SSergey MakeevMinimal example
24617afdd0SSergey Makeev```c++
25617afdd0SSergey Makeev#include <MTScheduler.h>
26617afdd0SSergey Makeev
27617afdd0SSergey Makeev// Declare simple task
28617afdd0SSergey Makeevstruct SimpleTask
29617afdd0SSergey Makeev{
30617afdd0SSergey Makeev  MT_DECLARE_TASK(SimpleTask, MT::StackRequirements::STANDARD, MT::TaskPriority::NORMAL, MT::Color::Blue);
31617afdd0SSergey Makeev
32617afdd0SSergey Makeev  void Do(MT::FiberContext&)
33617afdd0SSergey Makeev  {
34617afdd0SSergey Makeev    // ... do thing here ...
35617afdd0SSergey Makeev  }
36617afdd0SSergey Makeev};
37617afdd0SSergey Makeev
38617afdd0SSergey Makeevint main()
39617afdd0SSergey Makeev{
40617afdd0SSergey Makeev  // Create scheduler
41617afdd0SSergey Makeev  MT::TaskScheduler scheduler;
42617afdd0SSergey Makeev
43617afdd0SSergey Makeev  // Declare tasks
44617afdd0SSergey Makeev  static const int TASK_COUNT = 1000;
45617afdd0SSergey Makeev  SimpleTask tasks[TASK_COUNT];
46617afdd0SSergey Makeev
47617afdd0SSergey Makeev  // Run everything
48617afdd0SSergey Makeev  scheduler.RunAsync(MT::TaskGroup::Default(), &tasks[0], MT_ARRAY_SIZE(tasks));
49617afdd0SSergey Makeev
50617afdd0SSergey Makeev  // Wait and help to execute unfinished tasks
51617afdd0SSergey Makeev  scheduler.WaitAll(1000)
52617afdd0SSergey Makeev
53617afdd0SSergey Makeev  return 0;
54617afdd0SSergey Makeev}
55617afdd0SSergey Makeev```
56617afdd0SSergey Makeev
57617afdd0SSergey MakeevYou can find a lot of usage examples in the test folder:
58617afdd0SSergey Makeevhttps://github.com/SergeyMakeev/TaskScheduler/tree/master/SchedulerTests/Tests
59e297596cSSergey Makeev
60e554e8ecSSergey Makeev## Useful reading (in random order):
6140c48e9bSSergey Makeev
628890e094SSergey MakeevParallelizing the Naughty Dog engine using fibers by Christian Gyrling
63c37f8888SSergey Makeev
646756c906SSergey Makeevhttp://www.swedishcoding.com/wp-content/uploads/2015/03/parallelizing_the_naughty_dog_engine_using_fibers.pdf
6540c48e9bSSergey Makeev
6640c48e9bSSergey Makeevid Tech 5 Challenges
678890e094SSergey MakeevFrom Texture Virtualization to Massive Parallelization by J.M.P. van Waveren
68c37f8888SSergey Makeev
6940c48e9bSSergey Makeevhttp://s09.idav.ucdavis.edu/talks/05-JP_id_Tech_5_Challenges.pdf
7040c48e9bSSergey Makeev
718890e094SSergey MakeevDoom3 BFG Source Code Review: Multi-threading by Fabien Sanglard
72c37f8888SSergey Makeev
7340c48e9bSSergey Makeevhttp://fabiensanglard.net/doom3_bfg/threading.php
7440c48e9bSSergey Makeev
758890e094SSergey MakeevHow Ubisoft Develops Games for Multicore - Before and After C++11 by Jeff Preshing
76c37f8888SSergey Makeev
7740c48e9bSSergey Makeevhttp://www.youtube.com/watch?v=X1T3IQ4N-3g
7840c48e9bSSergey Makeev
798890e094SSergey MakeevKillzone Shadow Fall: Threading the Entity Update on PS4 by Jorrit Rouwe
80c37f8888SSergey Makeev
8140c48e9bSSergey Makeevhttp://www.slideshare.net/jrouwe/killzone-shadow-fall-threading-the-entity-update-on-ps4
8240c48e9bSSergey Makeev
838890e094SSergey MakeevKillzone Shadow Fall Demo Postmortem by Michal Valient
84c37f8888SSergey Makeev
8540c48e9bSSergey Makeevhttp://www.guerrilla-games.com/presentations/Valient_Killzone_Shadow_Fall_Demo_Postmortem.pdf
8640c48e9bSSergey Makeev
878890e094SSergey MakeevInfamous Second Son : Engine Postmortem by Adrian Bentley
88c37f8888SSergey Makeev
8940c48e9bSSergey Makeevhttp://adruab.net/wp-images/GDC14_infamous_second_son_engine_postmortem.pdf
9040c48e9bSSergey Makeev
918890e094SSergey MakeevMultithreading the Entire Destiny Engine - GDC 2015 by Barry Genova
92c37f8888SSergey Makeev
939f936737SSergey Makeevhttp://www.gdcvault.com/play/1022164/Multithreading-the-Entire-Destiny (members only)
949f936737SSergey Makeevhttp://chomikuj.pl/dexio21/GDC+2015/GDC+Vault+-+Multithreading+the+Entire+Destiny+Engine,4690817362.mp4%28video%29
951ef02211SSergey Makeev
961ef02211SSergey Makeev
971ef02211SSergey MakeevIntel Threading Building Blocks - Scheduling Algorithm
98c37f8888SSergey Makeev
991ef02211SSergey Makeevhttps://www.threadingbuildingblocks.org/docs/help/reference/task_scheduler/scheduling_algorithm.htm
1001ef02211SSergey Makeev
1011ef02211SSergey MakeevCILK/CILK++ and Reducers
102c37f8888SSergey Makeev
1031ef02211SSergey Makeevhttp://www.slideshare.net/yunmingzhang/yunming-zhang-presentations
1041ef02211SSergey Makeev
1058890e094SSergey MakeevTask Scheduling Strategies by Dmitry Vyukov
106c37f8888SSergey Makeev
1071ef02211SSergey Makeevhttp://www.1024cores.net/home/scalable-architecture/task-scheduling-strategies
1081ef02211SSergey Makeev
1091ef02211SSergey MakeevImplementing a Work-Stealing Task Scheduler on the ARM11 MPCore
110c37f8888SSergey Makeev
1111ef02211SSergey Makeevhttp://www.rtcgroup.com/arm/2007/presentations/211%20-%20Implementing%20a%20Work-Stealing%20Task%20Scheduler.pdf
1121ef02211SSergey Makeev
1131f0a6e84SSergey MakeevLost Planet graphics course for 3D game fan of Nishikawa Zenji
114c37f8888SSergey Makeev
1151f0a6e84SSergey Makeevhttp://game.watch.impress.co.jp/docs/20070131/3dlp.htm
1168cbf7430SSergey Makeev
1178890e094SSergey MakeevDragged Kicking and Screaming: Source Multicore by Tom Leonard
118c37f8888SSergey Makeev
1198cbf7430SSergey Makeevhttp://www.valvesoftware.com/publications/2007/GDC2007_SourceMulticore.pdf
1209f936737SSergey Makeev
1218890e094SSergey MakeevGames: Playing with Threads by Ben Nicholson
122c37f8888SSergey Makeev
1239f936737SSergey Makeevhttp://www2.epcc.ed.ac.uk/downloads/lectures/BenNicholson/BenNicholson.pdf
12485ba98b0SSergey Makeev
12585ba98b0SSergey MakeevWork Stealing by Pablo Halpern
126c37f8888SSergey Makeev
12785ba98b0SSergey Makeevhttps://github.com/CppCon/CppCon2015/tree/master/Presentations/Work%20Stealing
12885ba98b0SSergey Makeev
12985ba98b0SSergey MakeevEnki Task Scheduler by Doug Binks
130c37f8888SSergey Makeev
13185ba98b0SSergey Makeevhttp://www.enkisoftware.com/devlogpost-20150822-1-Implementing_a_lightweight_task_scheduler.html
132ac585883SSergey Makeev
13385ba98b0SSergey Makeevhttp://www.enkisoftware.com/devlogpost-20150905-1-Internals_of_a_lightweight_task_scheduler.html
13485ba98b0SSergey Makeev
13585ba98b0SSergey MakeevMolecule Engine blog - Job System 2.0 by Stefan Reinalter
136c37f8888SSergey Makeev
13785ba98b0SSergey Makeevhttp://blog.molecular-matters.com/2015/08/24/job-system-2-0-lock-free-work-stealing-part-1-basics/
138ac585883SSergey Makeev
13985ba98b0SSergey Makeevhttp://blog.molecular-matters.com/2015/09/08/job-system-2-0-lock-free-work-stealing-part-2-a-specialized-allocator/
140ac585883SSergey Makeev
14185ba98b0SSergey Makeevhttp://blog.molecular-matters.com/2015/09/25/job-system-2-0-lock-free-work-stealing-part-3-going-lock-free/
14285ba98b0SSergey Makeev
14385ba98b0SSergey MakeevMolecule Engine blog - Building a load-balanced task scheduler by Stefan Reinalter
144c37f8888SSergey Makeev
14585ba98b0SSergey Makeevhttp://blog.molecular-matters.com/2012/04/05/building-a-load-balanced-task-scheduler-part-1-basics/
146ac585883SSergey Makeev
14785ba98b0SSergey Makeevhttp://blog.molecular-matters.com/2012/04/12/building-a-load-balanced-task-scheduler-part-2-task-model-relationships/
148ac585883SSergey Makeev
14985ba98b0SSergey Makeevhttp://blog.molecular-matters.com/2012/04/25/building-a-load-balanced-task-scheduler-part-3-parent-child-relationships/
150ac585883SSergey Makeev
15185ba98b0SSergey Makeevhttp://blog.molecular-matters.com/2012/07/09/building-a-load-balanced-task-scheduler-part-4-false-sharing/
1528890e094SSergey Makeev
1538890e094SSergey MakeevDo-it-yourself Game Task Scheduling by Jerome Muffat-Meridol
15434260583SSergey Makeev
1558890e094SSergey Makeevhttps://software.intel.com/en-us/articles/do-it-yourself-game-task-scheduling
15634260583SSergey Makeev
15718af5736SSergey MakeevAcquire and Release Semantics by Jeff Preshing
15804235f4aSSergey Makeev
15904235f4aSSergey Makeevhttp://preshing.com/20120913/acquire-and-release-semantics/
1607eaf3a19SSergey Makeev
1617eaf3a19SSergey MakeevLockless Programming Considerations for Xbox 360 and Microsoft Windows
1627eaf3a19SSergey Makeev
1637eaf3a19SSergey Makeevhttps://msdn.microsoft.com/en-us/library/windows/desktop/ee418650(v=vs.85).aspx
1647eaf3a19SSergey Makeev
16535689307SSergey MakeevC/C++11 mappings to processors by Peter Sewell
1667eaf3a19SSergey Makeev
1677eaf3a19SSergey Makeevhttps://www.cl.cam.ac.uk/~pes20/cpp/cpp0xmappings.html
16835689307SSergey Makeev
16935689307SSergey MakeevMemory Ordering in Modern Microprocessors, Part I by Paul E. McKenney
17035689307SSergey Makeevhttp://www.linuxjournal.com/node/8211/print
17135689307SSergey Makeev
17235689307SSergey MakeevMemory Ordering in Modern Microprocessors, Part II by Paul E. McKenney
17335689307SSergey Makeevhttp://www.linuxjournal.com/node/8212/print
174*2b9bbb88SSergey Makeev
175*2b9bbb88SSergey MakeevBarrier Litmus Tests and Cookbook by ARM
176*2b9bbb88SSergey Makeevhttps://developer.arm.com/documentation/genc007826/latest
177*2b9bbb88SSergey Makeevhttps://documentation-service.arm.com/static/5ece8d6a56a54774bd17a1f4
178*2b9bbb88SSergey Makeev
179