Parallel visualization and compute environments for graphics clusters

Parallelism evolved into the primal driving force for progressing the performance of nearly all of today's processing platforms, ranging from mobile devices, over personal computers, to the world's most powerful supercomputers. Whether it is simultaneously executing multiple threads on a modern central processing unit (CPU), or utilizing the massively parallel processor arrays of recent graphics processing units (GPUs); whether it is scaling performance by employing a multiplicity of each of such processor in a single system, or using large cluster environments composed of hundred of thousands of such processing units, parallelism forms the hardware foundation to approach almost all of today's most demanding compute and visualization challenges. However, making highly efficient use of all the theoretically available distributed processing power remains the key challenge to successfully scale the actual performance to solve a given task. This thesis addresses the challenges of efficiently leveraging all levels of parallelism inherent to graphics cluster systems - an interconnected compound of processing nodes equipped with GPUs - for the purpose of distributed visualization as well as parallel general purpose computing. Various algorithms and techniques have been developed that are well suited for parallel execution and also serve as building blocks for utilizing the next higher levels of parallelism. The introduced single-pass volume ray casting technique allows for near-optimal usage of the parallel processor array of a single GPU while still maintaining a high level of flexibility. GPU-based pyramidal filtering techniques enable a new, highly adaptive volume sampling algorithm, which is well suited for high output resolutions. Both techniques allow to offload visualization workload from the CPU, which in turn opens up the CPU's parallel processor cores to be leveraged for other tasks, such as data compression or image processing. For that purpose, a highly optimized alpha compositing operator has been introduced allowing to utilize both, the vector parallelism and thread parallelism of modern CPUs. Combining those methods provides the basis for a well-balanced, distributed visualization environment, that uses all available processing units inside a single node and across graphics cluster systems. Likewise, those building blocks also allow to address some of major challenges of these higher levels of parallelism, such as data distribution, inter-node communication, as well as workload balancing. Besides the focus on efficiently utilizing GPU clusters, this thesis also makes important contributions towards bridging the Programmability Gap - referring to the lagging support of programming models and developer tools targeting such massively parallel hardware architectures. By means of an existing compute programming language targeted for a single graphics processor only, an extended programming environment has been introduced that demonstrates seamless scaling of compute applications from a single GPU up to large graphics cluster setups, while still providing a single, consistent programming interface to the developer. From the large-scale parallelism of GPU cluster systems back to low-level parallelism exposed by the processor array of a single GPU, new parallel-aware developer tools are presented, which for the first time allow for single-step debugging of all programmable pipeline stages of modern graphics processors. While designed in the context of GPU clusters, many of the introduced algorithms and tools also apply to other already existing or upcoming processor platforms, such as FPGA-based accelerator cards, many core CPUs, as well as hybrids combining processing cores from today's CPUs and GPUs. In a more general sense, the concepts may be applicable to any architecture that share the common underlying principle of parallelism. Parallelitat hat sich zur Triebfeder fur das weitere Wachstum an Rechenleistung heutiger Computersysteme entwickelt, sei es im Bereich mobiler Gerate, bei Arbeitsplatzrechnern oder den weltweit schnellsten Hochleistungsrechnern. Egal, ob beim gleichzeitigen Bearbeiten mehrerer Prozesse auf einem modernen Hauptprozessor (CPU) oder beim Verwenden der hoch parallelen Recheneinheiten moderner Graphikprozessoren (GPU), sei es beim Vervielfachen der Rechenleistung durch die Verwendung mehrerer solcher Prozessoren in einem einzelnen Computer oder durch die Anwendung groser Rechennetzwerke mit mehreren hunderttausend Prozessoren, parallele Datenverarbeitung bildet die Grundlage zur Bearbeitung vieler der anspruchsvollsten Problemstellungen der heutigen Zeit. Die effiziente Verwendung all der theoretisch zur Verfugung stehenden verteilten Rechenleistung ist jedoch die zentrale Herausforderung, um weiterhin erfolgreich die tatsachliche Leistung zum Losen einer Aufgabenstellung zu erhohen. Diese Dissertation befasst sich mit der effizienten Verwendung aller Formen von Parallelitat von Graphik-Clustern - einem vernetzten Verbund von Computern, ausgestattet mit Graphikprozessoren - zur verteilten Visualisierung, sowie zur parallelen Datenverarbeitung. Verschiedene Algorithmen und Methoden wurden entwickelt, die speziell auf eine parallele Bearbeitung zugeschnitten sind und auch als Baustein fur die Verwendung weiterer Arten von Parallelitat dienen. Das vorgestellte Verfahren zur Darstellung von Volumendaten mittels Raycasting ermoglicht die nahezu optimale Verwendung der parallelen Recheneinheiten eines einzelnen Graphikprozessors und ermoglicht trotzdem ein hohes Mas an Flexibilitat. GPU-basierte Pyramidenfilter bilden die Basis fur ein neues, hoch adaptives Verfahren zur Volumenvisualisierung, das sich besonders fur eine hochaufgeloste Bildausgabe eignet. Beide Verfahren erlauben den Hauptprozessor von Visualisierungsaufgaben zu entlasten, was im Gegenzug eroffnet, die parallelen Recheneinheiten der CPU fur andere Aufgaben, wie zur Datenkompression oder zur Bildverarbeitung, einzusetzen. Zu diesem Zweck wurde ein hoch optimierter Alpha-Compositing Operator entwickelt, der sowohl die Vektor-Parallelitat als auch die Thread-Parallelitaet moderner CPUs ausnutzen kann. Die Kombination dieser Verfahren bildet die Grundlage fur eine ausbalancierte, verteilte Visualisierungsumgebung, die alle Recheneinheiten eines einzelnen Computers aber auch eines ganzen Graphik-Clusters ausnutzten kann. Die vorgestellten Bausteine dienen ebenso dazu, einige der wichtigsten Herausforderungen solcher verteilten Systeme zu bearbeiten, wie zum Beispiel die Datenverteilung, die Datenkommunikation, sowie die Lastverteilung. Neben dem Schwerpunkt der effizienten Verwendung von Graphik-Clustern, umfasst diese Dissertation auch wichtige Beitrage, um die Verwendung und Programmierbarkeit solcher hoch parallelen Rechenarchitekturen zu vereinfachen. Am Beispiel einer vorhandenen Programmiersprache zur Datenverarbeitung auf einem einzelnen Graphikprozessor wurde eine erweiterte Programmierumgebung entwickelt, die es Anwendungen erlaubt, nahtlos von einer einzelnen GPU bis hin zur kompletten Architektur eines Graphik-Cluster zu skalieren, aber gleichzeitig eine einheitliche Programmierschnittstelle fur den Entwickler bereitstellt. Von der Paralleliat eines Rechenverbunds zuruck zu der Paralleliat eines Graphiksprozessors werden neue Verfahren zur Unterstuztung von GPU-Programmieren vorgestellt, die es zum ersten Mal ermoglichen, Programmfehler in allen Einheiten eines modernen Graphikprozessors gezielt aufzufinden. Obwohl alle hier vorgestellten Verfahren im Kontext von Graphik-Clustern entwickelt wurden, konnen viele der vorgestellten Algorithmen und Verfahren auch auf andere bereits existierende oder kommende Rechenarchitekturen ubertragen werden. Dazu gehohren zum Beispiel FPGA-basierte Beschleunigerkarten, CPUs mit sehr vielen Rechenkernen, hybride Prozessoren, die Recheneinheiten von heutigen CPUs und GPUs kombinieren, und ganz allgemein, jedes System, das auf der gleichen Grundlage von Paralleliat aufgebaut ist.