Under horizontal decomposition, a parallel system is divided into various layers (e.g., application, runtime environment, and architecture layers), each of which is modeled individually. The complexity and number of layers depends on the modeling needs; the interface between layers is determined by the model.
In [Papaefstathiou et al. 1994, Nudd et al. 1993] they divide a parallel system into four layers: hardware, parallel paradigm, application sub-task, and application layers. The hardware layer is responsible for the characterization of communication, synchronization, and contention. The hardware model consists of static and dynamic performance parameters. The parallel paradigm layer identifies the resource contention caused by an algorithm's characteristics, expressing the interaction between application and hardware. The modeling tool has a database of templates and their contention models. To determine the resource contention model of an application, the tool identifies the template (and consequently the model) that best characterizes the application. The application sub-task layer models the sequential part of every sub-task within an application that can be executed in parallel. The application layer characterizes the application in terms of a sequence of sub-tasks organized as a task graph. An interesting aspect of this decomposition strategy is the definition of clear boundaries among the layers, which allows the layers to be modeled individually. However, the modeling approaches employed for each layer are restrictive and limit the applicability of the model. The templates of the parallel paradigm layer, for example, are simple and efficient, but restrictive in the communication patterns that are supported. The same observation applies to assumptions adopted in the models (e.g., no message contention due to traffic), which can cause significant inaccuracies in the predictions.
Horizontal decomposition breaks the parallel system into layers. The accuracy and applicability of the resultant models are still determined by the approaches adopted in modeling each layer. The amount of understanding that the user can get from this approach is also limited by the applicability of the technique. First, the models may not reflect accurately the application behavior, and second, the user still has to determine the parameters for the various layers, which requires not only a previous understanding of the program behavior, but also the identification of the implications of that behavior across layers.