A compiler system for optimizing a program for execution by a processing device having a plurality of processing units (P1 to Pn), comprising: an extractor module configured to extract, from an initial program code, a hierarchical task representation wherein each node of the hierarchical task representation corresponds to a potential unit of execution, wherein the root node of the hierarchical task representation represents the entire initial program code and each child node (121c1) represents a sub-set of units of execution of its respective parent node (121p1); a parallelizer module configured to apply to the hierarchical task representation pre-defined parallelization rules associated with the processing device to automatically adjust the hierarchical task representation by assigning particular units of execution to particular processing units (P1 to Pn) of the processing device and by inserting communication and/or synchronization in that the adjusted hierarchical task representation reflects parallel program code for the processing device, and further configured to re-apply the pre-defined parallelization rules with one or more user defined parallelization parameters; a code generator module configured to automatically generate, based on the current hierarchical task representation, a modified parallel program code for the processing device adjusted to the user defined parallelization parameters; and a visualizer module configured to generate a visual representation of the hierarchical task representation wherein user interface objects (131r, 131p1, 131c1) represent respective nodes (121r, 121p1, 121c1) of at least a subset of nodes and the user interface objects are arranged according to the respective parent-child relationships, and further configured to receive, for one or more interactive user interface objects (131p1), the one or more user defined parallelization parameters, wherein the one or more interactive user interface objects have a task length property representing the execution time of the corresponding unit of execution on a particular processing unit of the processing device, and wherein the task length property of particular interactive user interface objects indicates to a user that the respective tasks are responsible for a substantial portion of the resource consumption in the processing device. an extractor module configured to extract, from an initial program code, a hierarchical task representation wherein each node of the hierarchical task representation corresponds to a potential unit of execution, wherein the root node of the hierarchical task representation represents the entire initial program code and each child node (121c1) represents a sub-set of units of execution of its respective parent node (121p1); a parallelizer module configured to apply to the hierarchical task representation pre-defined parallelization rules associated with the processing device to automatically adjust the hierarchical task representation by assigning particular units of execution to particular processing units (P1 to Pn) of the processing device and by inserting communication and/or synchronization in that the adjusted hierarchical task representation reflects parallel program code for the processing device, and further configured to re-apply the pre-defined parallelization rules with one or more user defined parallelization parameters; a code generator module configured to automatically generate, based on the current hierarchical task representation, a modified parallel program code for the processing device adjusted to the user defined parallelization parameters; and a visualizer module configured to generate a visual representation of the hierarchical task representation wherein user interface objects (131r, 131p1, 131c1) represent respective nodes (121r, 121p1, 121c1) of at least a subset of nodes and the user interface objects are arranged according to the respective parent-child relationships, and further configured to receive, for one or more interactive user interface objects (131p1), the one or more user defined parallelization parameters, wherein the one or more interactive user interface objects have a task length property representing the execution time of the corresponding unit of execution on a particular processing unit of the processing device, and wherein the task length property of particular interactive user interface objects indicates to a user that the respective tasks are responsible for a substantial portion of the resource consumption in the processing device.