1. A method comprising: generating a first task data structure for a first task in a memory; 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, wherein each task data structure comprises a reference counter field, one or more output dependence fields, and a task meta data (TMD) pointer field, and wherein the initial value of the reference counter field of the second task data structure is set to prevent the second task from being launched until the second task is generated in the memory and the TMD pointer field of the second task data structure is initialized to null to indicate that the second task has not been generated at the time of initialization.