1. A method comprising: generating a first task data structure in a memory for a first task; generating a second task data structure in the memory, wherein the second task data structure is a placeholder for a second task that is dependent on the first task; storing a pointer to the second task data structure in a first output dependence field of the first task data structure; setting a reference counter field of the second task data structure to an initial value that indicates a number of dependencies associated with the second task; and launching the second task when the reference counter field stores a particular value.