An automated 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 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; automated analyzing the directed graph to assign execution of tasks to a plurality of processors to maximize computational efficiency; and characterized by performing the following steps until all data is processed: setting status of all nodes of the plurality of nodes to processed or unprocessed status, wherebv initially the status of the nodes is set to 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 so that it requires recalculation, setting status of the node and all nodes dependent thereon to unprocessed status; and executing tasks corresponding to all unprocessed nodes of the plurality of nodes in accordance with respectively assigned threading models. 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 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; 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; automated analyzing the directed graph to assign execution of tasks to a plurality of processors to maximize computational efficiency; and characterized by performing the following steps until all data is processed: setting status of all nodes of the plurality of nodes to processed or unprocessed status, wherebv initially the status of the nodes is set to 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 so that it requires recalculation, setting status of the node and all nodes dependent thereon to unprocessed status; and executing tasks corresponding to all unprocessed nodes of the plurality of nodes in accordance with respectively assigned threading models. setting status of all nodes of the plurality of nodes to processed or unprocessed status, wherebv initially the status of the nodes is set to 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 so that it requires recalculation, setting status of the node and all nodes dependent thereon to unprocessed status; and executing tasks corresponding to all unprocessed nodes of the plurality of nodes in accordance with respectively assigned threading models.