14:00
18:00

In the process of developing a video game, teams come up against a major problem: game performance on consoles and PCs. AAA games require a lot of computing power, and must be capable of running at least 30 frames per second on consoles and 60 frames per second on PCs. If the game engine fails to build images at this rate, execution becomes jerky, which has a direct impact on the player's experience. In order to build this image, a set of tasks must be executed on the player's machine at each frame, such as the physics engine, sound management and artificial intelligence. Each of these tasks can be expressed monolithically or broken down into a small parallel graph. They are grouped together in a global graph and must be executed efficiently in order to guarantee a certain frame rate. In addition, it is necessary to respect the dependencies between tasks and their priorities in order to maintain consistency when executing the game, but also to make the best use of the time available: this means using the machine's memory and parallelism efficiently. A first difficulty lies in the fact that these tasks are built and added by different people, whose jobs are independent. The global task graph is obtained by composition and is very difficult to access when designing the video game. In addition, the number of tasks and their execution times vary during the course of the game depending on the player's position, actions, environment or other players. In addition, the need to comply with real-time constraints may mean that, depending on computing resources, degraded versions of certain tasks have to be used, or even abandoned altogether. The redundancy of patterns in the task graph during the execution of the game could also lead us to anticipate certain calculations, and thus prepare in advance the execution of tasks giving us better performance. It is therefore necessary to have a dynamic task scheduler capable of taking these different constraints into account. In this thesis, we first analyse the impact of methods derived from high-performance computing on game engines, a formalisation of the problem of flexible real-time scheduling in the context of video games, and optimisation opportunities based on execution traces collected during games. We also propose a dynamic scheduling method, based on the exploration of a Monte Carlo graph in order to determine the possible local optimisations and thus adapt the execution of the Frame according to the needs of the game by prioritising the parts requiring the most resources at a given time dynamically. In addition, we are also proposing a dynamic 'Task Skipping' mechanism, enabling the execution of the game itself to be controlled so as to balance the load of the various frames over a longer period of time. This allows us to take a longer-term view of the optimisation and not just look at a single frame but at a local space made up of several frames, smoothing out calculations and preventing frames from being lost, which is common when too many calculations are required.

Inria (Salle Ada Lovelace)