yaTS - yet another Tasking System

Discussion in 'GPGPU Technology & Programming' started by bouliiii, Oct 12, 2011.

  1. bouliiii

    Newcomer

    Joined:
    Mar 17, 2008
    Messages:
    5
    Likes Received:
    0
    Hello all,

    I recently wrote a small tasking system, yaTS which is, I think, reasonably powerful and simple. Technically for the scheduling, it is a mix of workstealing, classical FIFO. It supports priorities, affinities, wait-for-completion and a simple but quite powerful way to express dependencies between tasks (it can dynamically create any kind of direct acyclic graph of tasks). It also includes a very fast distributed memory allocator. You may find more details in the source and in the headers.

    This is on Apache Licence (so, do whatever you want with it) and this is here:
    http://code.google.com/p/yats/

    Also, I will make a small serie of posts about the code here:
    http://bouliiii.blogspot.com/

    The idea now is to use it in the core of a small video game engine I am developing to basically all kinds of rendering tasks (in particular) and even more generally to completely remove any renderer threads or main thread and replace everything by sub-systems composed by task pipelines (mostly).

    Cheers,
    Ben
     
  2. jiaolu

    Newcomer

    Joined:
    Feb 25, 2008
    Messages:
    40
    Likes Received:
    9
    Cool,Any difference with other task system.
     
  3. bouliiii

    Newcomer

    Joined:
    Mar 17, 2008
    Messages:
    5
    Likes Received:
    0
    To take the most famous one, TBB, I would say:

    - different way to handle "continuation" or "completion". Task have two dependencies, one to finish and one to start. This is a really simple but a rather powerful way to build a graph of tasks

    - support for affinities. Since the system is targeting a video game like environment, you may need to execute some code on specific thread (owning OGL or D3D context for example)

    - simple support for priorities. Main purpose (for a game) will be to use the tasking system also for the streaming

    - easy way to overlap IO (disk or any asynchronous request) by just requesting some job to do from a tasks that has to wait

    - support for task set which is a super fast way to run a task n times

    - *very* small and well commented. The tasking code takes 1,000 lines

    The goal behnd it is to design a game with *no* main thread and *no* renderer thread. Just a bunch of worker threads (main becomes a worker) dynamically creating a complex graphs of tasks.
    The link to this very early work-in-progress is here:

    http://code.google.com/p/point-frag/

    The code will likely change in the next weeks anyway to fit the need I have in my own application.
     
  4. guardian

    Newcomer

    Joined:
    Jul 3, 2008
    Messages:
    12
    Likes Received:
    0
    were you aware of Nulstein?

    Didn't have the time to look at yaTS yet, how does it compare?
     
  5. bouliiii

    Newcomer

    Joined:
    Mar 17, 2008
    Messages:
    5
    Likes Received:
    0
    Yes, but I wanted something smaller, more self-contained and portable. I also wanted to support affinities and priorities and a different way to specify dependencies and continuations. This is basically what yaTS is.
     
  6. guardian

    Newcomer

    Joined:
    Jul 3, 2008
    Messages:
    12
    Likes Received:
    0
    thank you for the reply!
     
Loading...

Share This Page

  • About Us

    Beyond3D has been around for over a decade and prides itself on being the best place on the web for in-depth, technically-driven discussion and analysis of 3D graphics hardware. If you love pixels and transistors, you've come to the right place!

    Beyond3D is proudly published by GPU Tools Ltd.
Loading...