Patent ID: 8166479

Claim:
A method for processing data comprising: defining a plurality of tasks requiring execution; identifying one or more dependencies for each respective task of the plurality of tasks, the one or more dependencies comprising at least one of a resource dependency and a memory dependency; determining dependencies between for each respective task of the plurality of tasks wherein the dependencies include directional dependencies; creating a directed graph, wherein the directed graph includes: a plurality of nodes, the nodes respectively corresponding to the plurality of tasks requiring execution; and a plurality of directed edges that respectively correspond to the directional dependencies, each of said directed edges originating from a node of the plurality of nodes and terminating on another node of the plurality of nodes; and analyzing the directed graph to assign execution of tasks to a plurality of processors to maximize computational efficiency; performing the following steps until all data is processed: setting status of all nodes of the plurality of nodes to processed or unprocessed status; when a task corresponding to a node of the plurality of nodes has been completely computed, setting status of the node to processed status; when data corresponding to a node of the plurality of nodes has been changed, setting status of the node to unprocessed status; and executing tasks corresponding to all unprocessed nodes of the plurality of nodes in accordance with respectively assigned threading models.