-
Notifications
You must be signed in to change notification settings - Fork 21
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
053f59a
commit c13bf07
Showing
1 changed file
with
390 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,390 @@ | ||
<?xml version="1.0" encoding="utf-8" ?> | ||
<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.2 20190208//EN" | ||
"JATS-publishing1.dtd"> | ||
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" dtd-version="1.2" article-type="other"> | ||
<front> | ||
<journal-meta> | ||
<journal-id></journal-id> | ||
<journal-title-group> | ||
<journal-title>Journal of Open Source Software</journal-title> | ||
<abbrev-journal-title>JOSS</abbrev-journal-title> | ||
</journal-title-group> | ||
<issn publication-format="electronic">2475-9066</issn> | ||
<publisher> | ||
<publisher-name>Open Journals</publisher-name> | ||
</publisher> | ||
</journal-meta> | ||
<article-meta> | ||
<article-id pub-id-type="publisher-id">4592</article-id> | ||
<article-id pub-id-type="doi">10.21105/joss.04592</article-id> | ||
<title-group> | ||
<article-title>SimSGamE : Scheduling simulator for modern game | ||
engines</article-title> | ||
</title-group> | ||
<contrib-group> | ||
<contrib contrib-type="author"> | ||
<contrib-id contrib-id-type="orcid">0000-0001-6316-8079</contrib-id> | ||
<name> | ||
<surname>Regragui</surname> | ||
<given-names>Mustapha</given-names> | ||
</name> | ||
<xref ref-type="aff" rid="aff-1"/> | ||
</contrib> | ||
<contrib contrib-type="author"> | ||
<contrib-id contrib-id-type="orcid">0000-0002-7619-4492</contrib-id> | ||
<name> | ||
<surname>Coye</surname> | ||
<given-names>Baptiste</given-names> | ||
</name> | ||
<xref ref-type="aff" rid="aff-1"/> | ||
<xref ref-type="aff" rid="aff-2"/> | ||
</contrib> | ||
<contrib contrib-type="author"> | ||
<contrib-id contrib-id-type="orcid">0000-0003-0997-586X</contrib-id> | ||
<name> | ||
<surname>Pilla</surname> | ||
<given-names>Laercio Lima</given-names> | ||
</name> | ||
<xref ref-type="aff" rid="aff-1"/> | ||
<xref ref-type="aff" rid="aff-3"/> | ||
</contrib> | ||
<contrib contrib-type="author"> | ||
<contrib-id contrib-id-type="orcid">0000-0001-7734-1258</contrib-id> | ||
<name> | ||
<surname>Namyst</surname> | ||
<given-names>Raymond</given-names> | ||
</name> | ||
<xref ref-type="aff" rid="aff-1"/> | ||
<xref ref-type="aff" rid="aff-4"/> | ||
<xref ref-type="aff" rid="aff-5"/> | ||
</contrib> | ||
<contrib contrib-type="author"> | ||
<contrib-id contrib-id-type="orcid">0000-0001-7110-2037</contrib-id> | ||
<name> | ||
<surname>Barthou</surname> | ||
<given-names>Denis</given-names> | ||
</name> | ||
<xref ref-type="aff" rid="aff-1"/> | ||
<xref ref-type="aff" rid="aff-5"/> | ||
<xref ref-type="aff" rid="aff-6"/> | ||
</contrib> | ||
<aff id="aff-1"> | ||
<institution-wrap> | ||
<institution>Inria Bordeaux, France</institution> | ||
</institution-wrap> | ||
</aff> | ||
<aff id="aff-2"> | ||
<institution-wrap> | ||
<institution>Ubisoft Bordeaux, France</institution> | ||
</institution-wrap> | ||
</aff> | ||
<aff id="aff-3"> | ||
<institution-wrap> | ||
<institution>CNRS, France</institution> | ||
</institution-wrap> | ||
</aff> | ||
<aff id="aff-4"> | ||
<institution-wrap> | ||
<institution>Univ. Bordeaux, France</institution> | ||
</institution-wrap> | ||
</aff> | ||
<aff id="aff-5"> | ||
<institution-wrap> | ||
<institution>Labri, France</institution> | ||
</institution-wrap> | ||
</aff> | ||
<aff id="aff-6"> | ||
<institution-wrap> | ||
<institution>Bordeaux INP, France</institution> | ||
</institution-wrap> | ||
</aff> | ||
</contrib-group> | ||
<pub-date date-type="pub" publication-format="electronic" iso-8601-date="2022-06-27"> | ||
<day>27</day> | ||
<month>6</month> | ||
<year>2022</year> | ||
</pub-date> | ||
<volume>7</volume> | ||
<issue>76</issue> | ||
<fpage>4592</fpage> | ||
<permissions> | ||
<copyright-statement>Authors of papers retain copyright and release the | ||
work under a Creative Commons Attribution 4.0 International License (CC | ||
BY 4.0)</copyright-statement> | ||
<copyright-year>2022</copyright-year> | ||
<copyright-holder>The article authors</copyright-holder> | ||
<license license-type="open-access" xlink:href="https://creativecommons.org/licenses/by/4.0/"> | ||
<license-p>Authors of papers retain copyright and release the work under | ||
a Creative Commons Attribution 4.0 International License (CC BY | ||
4.0)</license-p> | ||
</license> | ||
</permissions> | ||
<kwd-group kwd-group-type="author"> | ||
<kwd>Task Programming</kwd> | ||
<kwd>Video-game engine</kwd> | ||
<kwd>Scheduling</kwd> | ||
<kwd>Soft Real Time Scheduling</kwd> | ||
<kwd>C++</kwd> | ||
</kwd-group> | ||
</article-meta> | ||
</front> | ||
<body> | ||
<sec id="summary"> | ||
<title>Summary</title> | ||
<p>The video game market is valued at over USD$100 billion | ||
(<xref alt="Mordor Intelligence, n.d." rid="ref-gaming" ref-type="bibr">Mordor | ||
Intelligence, n.d.</xref>) and impacts computing both at the hardware | ||
and software levels. It produces and sells tens of millions of video | ||
games and consoles yearly. The variety of devices running games is | ||
very large, from personal computers, consoles and smartphones to Cloud | ||
gaming servers. In order to develop these games more easily and allow | ||
them to be ported to different platforms, developers use a key | ||
software component called the game engine.</p> | ||
<p>Game engines are at the heart of the design of modern video games. | ||
They handle most of the components of the game, and allow the | ||
generation of each frame (image) displayed on the player screen. They | ||
aim to keep a high frame rate (30 to 60 frames per seconds) by | ||
scheduling the tasks required to complete such computations.</p> | ||
<p>Each task represents a functionality written by a given team at a | ||
given moment in the lifetime of the game engine. These tasks have | ||
precedence constraints that must be respected to ensure the | ||
execution’s correctness, which is organised as a directed acyclic | ||
graph (DAG), and they have varied execution times. Scheduling such | ||
tasks is NP-hard and has not been studied in detail in the context of | ||
game engines. A better understanding of this problem could lead to | ||
optimizations for the benefit of players and developers.</p> | ||
<p>Our code is focused on modeling a modern game engine and answering | ||
the following three questions:</p> | ||
<list list-type="bullet"> | ||
<list-item> | ||
<p>Can state-of-the-art scheduling strategies improve the | ||
performance of the game engine?</p> | ||
</list-item> | ||
<list-item> | ||
<p>Can changes in the scheduling mechanism reduce the gap between | ||
produced schedules and the critical path?</p> | ||
</list-item> | ||
<list-item> | ||
<p>Can small changes to the task graph lead to performance | ||
improvements?</p> | ||
</list-item> | ||
</list> | ||
</sec> | ||
<sec id="statement-of-need"> | ||
<title>Statement of need</title> | ||
<p>SimSGamE was created in order to study the scheduling of game | ||
engines. Given the lack of studies on this problem, our efforts have | ||
been dedicated to finding and adapting algorithms and heuristics | ||
proposed in other contexts. We find that there is value in bringing to | ||
light new applications and knowledge about existing algorithms.</p> | ||
<p>The software simulates the behavior of game engines using two | ||
files:</p> | ||
<list list-type="bullet"> | ||
<list-item> | ||
<p>a dependency file describing links between tasks and the | ||
structure of the game engine to be simulated, and</p> | ||
</list-item> | ||
<list-item> | ||
<p>a tasks file describing key values for tasks (steps, mean, | ||
minimum, maximum, std_dev) for both moderated and intensive use of | ||
the engine.</p> | ||
</list-item> | ||
</list> | ||
<p>Using these two files, SimSGamE generates randomized tasks | ||
composing a frame respecting the statistical repartition and their | ||
dependencies (generation may be seeded in order to enable direct | ||
comparisons). The simulation also mimics different load evolution | ||
(from moderate use 0% to intensive 100%) and evaluates multiple | ||
scheduling techniques to estimate frame span and metrics, giving | ||
information regarding heuristics efficiencies.</p> | ||
<p>The simulation is composed of 200 generated frames with the load | ||
parameter starting at 0 (0%) and increasing linearly up to 1 (100%) in | ||
the 101st frame and then decreasing linearly until it reaches 0.01 | ||
(1%) for the last frame. This provides a gradual change of load while | ||
also generating a load peak. In order to have a better understanding | ||
of possible optimizations and their impact on the game engine, we also | ||
added the ability to sort subtasks (parallel for situations) by | ||
non-increasing order of execution time. We consider this is a feasible | ||
change to the game engine because it does not affect the actual | ||
execution of the subtasks nor the dependencies in the task graph.</p> | ||
<p>The number of available CPUs can be changed to fit the device to | ||
emulate or anticipate the effects of external interference but | ||
communication and locks are not taken into account at the moment.</p> | ||
<p>The algorithms implemented in the code are:</p> | ||
<list list-type="bullet"> | ||
<list-item> | ||
<p>FIFO: First In First Out</p> | ||
</list-item> | ||
<list-item> | ||
<p>LPT: Longest Processing Time First</p> | ||
</list-item> | ||
<list-item> | ||
<p>SPT: Shortest Processing Time First</p> | ||
</list-item> | ||
<list-item> | ||
<p>SLPT: LPT at a subtask level (input method name: SLRT)</p> | ||
</list-item> | ||
<list-item> | ||
<p>SSPT: SPT at a subtask level (input method name: SSRT)</p> | ||
</list-item> | ||
<list-item> | ||
<p>HRRN: Highest Response Ratio Next</p> | ||
</list-item> | ||
<list-item> | ||
<p>WT: Longest Waiting Time First</p> | ||
</list-item> | ||
<list-item> | ||
<p>HLF: Hu’s Level First with unitary processing time of each | ||
task</p> | ||
</list-item> | ||
<list-item> | ||
<p>HLFET: HLF with estimated times (input method name: Hu)</p> | ||
</list-item> | ||
<list-item> | ||
<p>CG: Coffman-Graham’s Algorithm (input method name: Coffman)</p> | ||
</list-item> | ||
<list-item> | ||
<p>DCP: Dynamic Critical Path Priority (input method name: | ||
Priority)</p> | ||
</list-item> | ||
</list> | ||
<p>In addition, the following algorithms are implemented but not used | ||
in automatic tests:</p> | ||
<list list-type="bullet"> | ||
<list-item> | ||
<p>WL: Weighted Length algorithm</p> | ||
</list-item> | ||
<list-item> | ||
<p>LFF: Latest Finished First</p> | ||
</list-item> | ||
<list-item> | ||
<p>MostScussors: Most successors First</p> | ||
</list-item> | ||
<list-item> | ||
<p>TOPO: topological order</p> | ||
</list-item> | ||
<list-item> | ||
<p>NEH: Nawaz, Enscore, Ham algorithm</p> | ||
</list-item> | ||
<list-item> | ||
<p>ACO: Ant Colony Optimization</p> | ||
</list-item> | ||
<list-item> | ||
<p>Infinity: CPU amount is infinite</p> | ||
</list-item> | ||
</list> | ||
<p>Metrics</p> | ||
<list list-type="bullet"> | ||
<list-item> | ||
<p>SF: slowest frame (maximum frame execution time)</p> | ||
</list-item> | ||
<list-item> | ||
<p>DF: number of delayed frames (with 16.667 ms as the due | ||
date)</p> | ||
</list-item> | ||
<list-item> | ||
<p>CS: cumulative slowdown (with 16.667 ms as the due date)</p> | ||
</list-item> | ||
</list> | ||
</sec> | ||
<sec id="state-of-the-field"> | ||
<title>State of the field</title> | ||
<p>Scheduling is a well known issue that has been widely studied. | ||
However, given the lack of studies on this particular scheduling | ||
problem, our efforts have been dedicated to finding and adapting | ||
algorithms and heuristics proposed in other contexts. Video games work | ||
as soft real-time interactive simulations | ||
(<xref alt="Gregory, 2018" rid="ref-gregory2018game" ref-type="bibr">Gregory, | ||
2018</xref>). However, Real-Time scheduling often considers reccuring | ||
independent tasks where earliest deadline first (EDF) heuristics are | ||
employed | ||
(<xref alt="Nascimento & Lima, 2021" rid="ref-nascimento2021effectively" ref-type="bibr">Nascimento | ||
& Lima, 2021</xref>). Nonetheless, the game engine contains | ||
dependent tasks with an entire task graph to be computed at each frame | ||
and all tasks share the same due date, obstructing the use of EDF | ||
heuristics. Moreover, parallel task scheduling usually models tasks | ||
using multiple resources simultaneously, but the tasks follow a | ||
fork-join model internally. An algorithm called DynFed was proposed to | ||
schedule parallel tasks with dependencies in real time systems by Dai | ||
et al. | ||
(<xref alt="2021" rid="ref-dai2021timing" ref-type="bibr">2021</xref>), | ||
but it focuses on periodic, independent tasks whose parallel subtasks | ||
have dependencies, while our problem contains periodic tasks with | ||
dependencies whose parallel subtasks are independant. The Game Task | ||
Scheduler developed by Intel | ||
(<xref alt="Alfieri, 2019" rid="ref-gds2019" ref-type="bibr">Alfieri, | ||
2019</xref>) reflects these tasks and subtasks organisation but is | ||
developped as a tool to be integrated in a game engine and not as a | ||
benchmark system that allows testing different heurisitcs and | ||
evaluating performance.</p> | ||
</sec> | ||
<sec id="acknowledgements"> | ||
<title>Acknowledgements</title> | ||
<p>We acknowledge contributions from Cédric Dumondelle and Hervé | ||
Hubele during the genesis of this project.</p> | ||
</sec> | ||
</body> | ||
<back> | ||
<ref-list> | ||
<ref id="ref-nascimento2021effectively"> | ||
<element-citation publication-type="paper-conference"> | ||
<person-group person-group-type="author"> | ||
<name><surname>Nascimento</surname><given-names>Flávia Maristela S.</given-names></name> | ||
<name><surname>Lima</surname><given-names>George</given-names></name> | ||
</person-group> | ||
<article-title>Effectively scheduling hard and soft real-time tasks on multiprocessors</article-title> | ||
<source>2021 IEEE 27th real-time and embedded technology and applications symposium (RTAS)</source> | ||
<year iso-8601-date="2021">2021</year> | ||
<pub-id pub-id-type="doi">10.1109/RTAS52030.2021.00025</pub-id> | ||
<fpage>210</fpage> | ||
<lpage>222</lpage> | ||
</element-citation> | ||
</ref> | ||
<ref id="ref-dai2021timing"> | ||
<element-citation publication-type="paper-conference"> | ||
<person-group person-group-type="author"> | ||
<name><surname>Dai</surname><given-names>Gaoyang</given-names></name> | ||
<name><surname>Mohaqeqi</surname><given-names>Morteza</given-names></name> | ||
<name><surname>Yi</surname><given-names>Wang</given-names></name> | ||
</person-group> | ||
<article-title>Timing-anomaly free dynamic scheduling of periodic DAG tasks with non-preemptive nodes</article-title> | ||
<source>2021 IEEE 27th international conference on embedded and real-time computing systems and applications (RTCSA)</source> | ||
<year iso-8601-date="2021">2021</year> | ||
<pub-id pub-id-type="doi">10.1109/RTCSA52859.2021.00022</pub-id> | ||
<fpage>119</fpage> | ||
<lpage>128</lpage> | ||
</element-citation> | ||
</ref> | ||
<ref id="ref-gds2019"> | ||
<element-citation> | ||
<person-group person-group-type="author"> | ||
<name><surname>Alfieri</surname><given-names>Bret</given-names></name> | ||
</person-group> | ||
<article-title>Intel games task scheduler</article-title> | ||
<publisher-name>https://github.com/GameTechDev/GTS-GamesTaskScheduler</publisher-name> | ||
<year iso-8601-date="2019-01">2019</year><month>01</month> | ||
</element-citation> | ||
</ref> | ||
<ref id="ref-gregory2018game"> | ||
<element-citation publication-type="book"> | ||
<person-group person-group-type="author"> | ||
<name><surname>Gregory</surname><given-names>Jason</given-names></name> | ||
</person-group> | ||
<source>Game engine architecture</source> | ||
<publisher-name>Taylor; Francis Ltd.</publisher-name> | ||
<year iso-8601-date="2018">2018</year> | ||
<edition>3</edition> | ||
</element-citation> | ||
</ref> | ||
<ref id="ref-gaming"> | ||
<element-citation> | ||
<person-group person-group-type="author"> | ||
<string-name>Mordor Intelligence</string-name> | ||
</person-group> | ||
<article-title>Global Gaming Market - Growth, Trends, Covid-19 Impact, and Forecasts (2022–2027)</article-title> | ||
<publisher-name>https://www.mordorintelligence.com/industry-reports/global-gaming-market</publisher-name> | ||
</element-citation> | ||
</ref> | ||
</ref-list> | ||
</back> | ||
</article> |