23 research outputs found

    Developing a compiler for the XeonPhi (TR-2014-341)

    Get PDF
    The XeonPhi is a highly parallel x86 architecture chip made by Intel. It has a number of novel features which make it a particularly challenging target for the compiler writer. This paper describes the techniques used to port the Glasgow Vector Pascal Compiler (VPC) to this architecture and assess its performance by comparisons of the XeonPhi with 3 other machines running the same algorithms

    Optimisation of computational fluid dynamics applications on multicore and manycore architectures

    Get PDF
    This thesis presents a number of optimisations used for mapping the underlying computational patterns of finite volume CFD applications onto the architectural features of modern multicore and manycore processors. Their effectiveness and impact is demonstrated in a block-structured and an unstructured code of representative size to industrial applications and across a variety of processor architectures that make up contemporary high-performance computing systems. The importance of vectorization and the ways through which this can be achieved is demonstrated in both structured and unstructured solvers together with the impact that the underlying data layout can have on performance. The utility of auto-tuning for ensuring performance portability across multiple architectures is demonstrated and used for selecting optimal parameters such as prefetch distances for software prefetching or tile sizes for strip mining/loop tiling. On the manycore architectures, running more than one thread per physical core is found to be crucial for good performance on processors with in-order core designs but not required on out-of-order architectures. For architectures with high-bandwidth memory packages, their exploitation, whether explicitly or implicitly, is shown to be imperative for best performance. The implementation of all of these optimisations led to application speed-ups ranging between 2.7X and 3X on the multicore CPUs and 5.7X to 24X on the manycore processors.Open Acces

    Compiling vector pascal to the XeonPhi

    Get PDF
    Intel's XeonPhi is a highly parallel x86 architecture chip made by Intel. It has a number of novel features which make it a particularly challenging target for the compiler writer. This paper describes the techniques used to port the Glasgow Vector Pascal Compiler to this architecture and assess its performance by comparisons of the XeonPhi with 3 other machines running the same algorithms

    SIMD@OpenMP : a programming model approach to leverage SIMD features

    Get PDF
    SIMD instruction sets are a key feature in current general purpose and high performance architectures. SIMD instructions apply in parallel the same operation to a group of data, commonly known as vector. A single SIMD/vector instruction can, thus, replace a sequence of scalar instructions. Consequently, the number of instructions can be greatly reduced leading to improved execution times. However, SIMD instructions are not widely exploited by the vast majority of programmers. In many cases, taking advantage of these instructions relies on the compiler. Nevertheless, compilers struggle with the automatic vectorization of codes. Advanced programmers are then compelled to exploit SIMD units by hand, using low-level hardware-specific intrinsics. This approach is cumbersome, error prone and not portable across SIMD architectures. This thesis targets OpenMP to tackle the underuse of SIMD instructions from three main areas of the programming model: language constructions, compiler code optimizations and runtime algorithms. We choose the Intel Xeon Phi coprocessor (Knights Corner) and its 512-bit SIMD instruction set for our evaluation process. We make four contributions aimed at improving the exploitation of SIMD instructions in this scope. Our first contribution describes a compiler vectorization infrastructure suitable for OpenMP. This infrastructure targets for-loops and whole functions. We define a set of attributes for expressions that determine how the code is vectorized. Our vectorization infrastructure also implements support for several advanced vector features. This infrastructure is proven to be effective in the vectorization of complex codes and it is the basis upon which we build the following two contributions. The second contribution introduces a proposal to extend OpenMP 3.1 with SIMD parallelism. Essential parts of this work have become key features of the SIMD proposal included in OpenMP 4.0. We define the "simd" and "simd for" directives that allow programmers to describe SIMD parallelism of loops and whole functions. Furthermore, we propose a set of optional clauses that leads the compiler to generate a more efficient vector code. These SIMD extensions improve the programming efficiency when exploiting SIMD resources. Our evaluation on the Intel Xeon Phi coprocessor shows that our SIMD proposal allows the compiler to efficiently vectorize codes poorly or not vectorized automatically with the Intel C/C++ compiler. In the third contribution, we propose a vector code optimization that enhances overlapped vector loads. These vector loads redundantly read from memory scalar elements already loaded by other vector loads. Our vector code optimization improves the memory usage of these accesses by means of building a vector register cache and exploiting register-to-register instructions. Our proposal also includes a new clause (overlap) in the context of the SIMD extensions for OpenMP of our first contribution. This new clause allows enabling, disabling and tuning this optimization on demand. The last contribution tackles the exploitation of SIMD instructions in the OpenMP barrier and reduction primitives. We propose a new combined barrier and reduction tree scheme specifically designed to make the most of SIMD instructions. Our barrier algorithm takes advantage of simultaneous multi-threading technology (SMT) and it utilizes SIMD memory instructions in the synchronization process. The four contributions of this thesis are an important step in the direction of a more common and generalized use of SIMD instructions. Our work is having an outstanding impact on the whole OpenMP community, ranging from users of the programming model to compiler and runtime implementations. Our proposals in the context of OpenMP improves the programmability of the programming model, the overhead of runtime services and the execution time of applications by means of a better use of SIMD.Los juegos de instrucciones SIMD son un componente clave en las arquitecturas de propósito general y de alto rendimiento actuales. Estas instrucciones aplican en paralelo la misma operación a un conjunto de datos, conocido como vector. Una instrucción SIMD/vectorial puede sustituir una secuencia de instrucciones escalares. Así, el número de instrucciones puede ser reducido considerablemente, dando lugar a mejores tiempos de ejecución. No obstante, las instrucciones SIMD no son explotadas ampliamente por la mayoría de programadores. En general, beneficiarse de estas instrucciones depende del compilador. Sin embargo, los compiladores tienen dificultades con la vectorización automática de códigos por lo que los programadores avanzados se ven obligados a explotar las unidades SIMD manualmente, empleando intrínsecas de bajo nivel específicas del hardware. Esta aproximación es costosa, propensa a errores y no portable entre arquitecturas. Esta tesis se centra en el modelo de programación OpenMP para abordar el poco uso de las instrucciones SIMD desde tres áreas: construcciones del lenguaje, optimizaciones de código del compilador y algoritmos del runtime. Hemos escogido el coprocesador Intel Xeon Phi (Knights Corner) y su juego de instrucciones SIMD de 512 bits para nuestra evaluación. Realizamos cuatro contribuciones para mejorar la explotación de las instrucciones SIMD en este ámbito. Nuestra primera contribución describe una infraestructura de vectorización de compilador adecuada para OpenMP. Esta infraestructura tiene como objetivo la vectorización de bucles y funciones. Para ello definimos un conjunto de atributos que determina como se vectoriza el código. Nuestra evaluación demuestra la efectividad de esta infraestructura en la vectorización de códigos complejos. Esta infraestructura es la base de las dos propuestas siguientes. En la segunda contribución proponemos una extensión SIMD para de OpenMP 3.1. Partes esenciales de este trabajo se han convertido en características clave de la propuesta sobre SIMD incluida en OpenMP 4.0. Definimos las directivas ‘simd’ y ‘simd for’ que permiten a los programadores describir paralelismo SIMD de bucles y funciones. Además, proponemos un conjunto de cláusulas opcionales que permiten que el compilador genere código vectorial más eficiente. Nuestra evaluación muestra que nuestra propuesta SIMD permite al compilador vectorizar eficientemente códigos pobremente o no vectorizados automáticamente con el compilador Intel C/C++

    IMP: Indirect Memory Prefetcher

    Get PDF
    Machine learning, graph analytics and sparse linear algebra-based applications are dominated by irregular memory accesses resulting from following edges in a graph or non-zero elements in a sparse matrix. These accesses have little temporal or spatial locality, and thus incur long memory stalls and large bandwidth requirements. A traditional streaming or striding prefetcher cannot capture these irregular access patterns. A majority of these irregular accesses come from indirect patterns of the form A[B[i]]. We propose an efficient hardware indirect memory prefetcher (IMP) to capture this access pattern and hide latency. We also propose a partial cacheline accessing mechanism for these prefetches to reduce the network and DRAM bandwidth pressure from the lack of spatial locality. Evaluated on 7 applications, IMP shows 56% speedup on average (up to 2.3×) compared to a baseline 64 core system with streaming prefetchers. This is within 23% of an idealized system. With partial cacheline accessing, we see another 9.4% speedup on average (up to 46.6%).Intel Science and Technology Center for Big Dat

    Models, Optimizations, and Tools for Large-Scale Phylogenetic Inference, Handling Sequence Uncertainty, and Taxonomic Validation

    Get PDF
    Das Konzept der Evolution ist in der modernen Biologie von zentraler Bedeutung. Deswegen liefert die Phylogenetik, die Lehre über die Verwandschaften und Abstam- mung von Organismen bzw. Spezies, entscheidende Hinweise zur Entschlüsselung einer Vielzahl biologischer Prozesse. Phylogenetische Stammbäume sind einerseits für die Grundlagenforschung wichtig, da sie in Studien über die Diversifizierung und Umweltanpassung einzelner Organismengruppen (z.B. Insekten oder Vögel) bis hin zu der großen Herausforderung, die Entstehung und Entwicklung aller Lebensfor- men in einem umfassenden evolutionären Baum darzustellen (der sog. Tree of Life) Anwendung finden. Andererseits werden phylogenetische Methoden auch in prax- isnahen Anwendungen eingesetzt, um beispielsweise die Verbreitungsdynamik von HIV-Infektionen oder, die Heterogenität der Krebszellen eines Tumors, zu verstehen. Den aktuellen Stand der Technik in der Stammbaumrekonstruktion stellen Meth- oden Maximum Likelihood (ML) und Bayes’sche Inferenz (BI) dar, welche auf der Analyse molekularer Sequenzendaten (DNA und Proteine) anhand probabilistis- cher Evolutionsmodelle basieren. Diese Methoden weisen eine hohe Laufzeitkom- plexität auf (N P -schwer), welche die Entwicklung effizienter Heuristiken unabding- bar macht. Hinzu kommt, dass die Berechnung der Zielfunktion (sog. Phylogenetic Likelihood Function, PLF) neben einem hohen Speicherverbrauch auch eine Vielzahl an Gleitkommaarithmetik-Operationen erfordert und somit extrem rechenaufwendig ist. Die neuesten Entwicklungen im Bereich der DNA-Sequenzierung (Next Gener- ation Sequencing, NGS) steigern kontinuierlich den Durchsatz und senken zugleich die Sequenzierungskosten um ein Vielfaches. Für die Phylogenetik hat dies zur Folge, dass die Dimensionen der zu analysierenden Datensätze alle 2–3 Jahre, um eine Grössenordnung zunhemen. War es bisher üblich, einige Dutzend bis Hun- derte Spezies anhand einzelner bzw. weniger Gene zu analysieren (Sequenzlänge: 1–10 Kilobasen), stellen derzeit Studien mit Tausenden Sequenzen oder Genen keine Seltenheit mehr dar. In den nächsten 1–2 Jahren ist zu erwarten, dass die Anal- ysen Tausender bis Zehntausender vollständiger Genome bzw. Transkriptome (Se- quenzlänge: 1–100 Megabasen und mehr) anstehen. Um diesen Aufgaben gewachsen zu sein, müssen die bestehenden Methoden weiterentwickelt und optimiert werden, um vor allem Höchstleistungsrechner sowie neue Hardware-Architekturen optimal nutzen zu können. Außerdem führt die sich beschleunigende Speicherung von Sequenzen in öffentli- chen Datenbanken wie NCBI GenBank (und ihren Derivaten) dazu, dass eine hohe Qualität der Sequenzannotierungen (z. B. Organismus- bzw. Speziesname, tax- onomische Klassifikation, Name eines Gens usw.) nicht zwangsläufig gewährleistet ist. Das hängt unter anderem auch damit zusammen, dass eine zeitnahe Korrektur durch entsprechende Experten nicht mehr möglich ist, solange ihnen keine adäquaten Software-Tools zur Verfügung stehen. In dieser Doktroarbeit leisten wir mehrere Beiträge zur Bewältigung der oben genannten Herausforderungen. Erstens haben wir ExaML, eine dedizierte Software zur ML-basierten Stamm- baumrekonstruktion für Höchstleistungsrechner, auf den Intel Xeon Phi Hardware- beschleuniger portiert. Der Xeon Phi bietet im Vergleich zu klassischen x86 CPUs eine höhere Rechenleistung, die allerdings nur anhand architekturspezifischer Op- timierungen vollständig genutzt werden kann. Aus diesem Grund haben wir zum einen die PLF-Berechnung für die 512-bit-Vektoreinheit des Xeon Phi umstrukturi- ert und optimiert. Zum anderen haben wir die in ExaML bereits vorhandene reine MPI-Parallelisierung durch eine hybride MPI/OpenMP-Lösung ersetzt. Diese hy- bride Lösung weist eine wesentlich bessere Skalierbarkeit für eine hohe Zahl von Kernen bzw. Threads innerhalb eines Rechenknotens auf (>100 HW-Threads für Xeon Phi). Des Weiteren haben wir eine neue Software zur ML-Baumrekonstruktion na- mens RAxML-NG entwickelt. Diese implementiert, bis auf kleinere Anpassungen, zwar denselben Suchalgorithmus wie das weit verbreitete Programm RAxML, bietet aber gegenüber RAxML mehrere Vorteile: (a) dank den sorgfältigen Optimierungen der PLF-Berechnung ist es gelungen, die Laufzeiten um den Faktor 2 bis 3 zu reduzieren (b) die Skalierbarkeit auf extrem großen Eingabedatensätzen wurde verbessert, in- dem ineffiziente topologische Operationen eliminiert bzw. optimiert wurden, (c) die bisher nur in ExaML verfügbaren, für große Datensätze relevanten Funktionen wie Checkpointing sowie ein dedizierter Datenverteilungsalgorithmus wurden nachimple- mentiert (d) dem Benutzer steht eine größere Auswahl an statistischen DNA-Evo- lutionsmodellen zur Verfügung, die zudem flexibler kombiniert und parametrisiert werden können (e) die Weiterentwicklung der Software wird aufgrund der modularen Architektur wesentlich erleichtert (die Funktionen zur PLF-Berechnung wurden in eine gesonderte Bibliothek ausgeglidert). Als nächstes haben wir untersucht, wie sich Sequenzierungsfehler auf die Genau- igkeit phylogenetischr Stammbaumrekonstruktionen auswirken. Wir modifizieren den RAxML bzw. RAxML-NG Code dahingehend, dass sowohl die explizite Angabe von Fehlerwahrscheinlichkeiten als auch die automatische Schätzung von Fehlerraten mittels der ML-Methode möglich ist. Unsere Simulationen zeigen: (a) Wenn die Fehler gleichverteilt sind, kann die Fehlerrate direkt aus den Sequenzdaten geschätzt werden. (b) Ab einer Fehlerrate von ca. 1% liefert die Baumrekonstruktion unter Berücksichtigung des Fehlermodells genauere Ergebnisse als die klassische Methode, welche die Eingabe als fehlerfrei annimmt. Ein weiterer Beitrag im Rahmen dieser Arbeit ist die Software-Pipeline SATIVA zur rechnergestützten Identifizierung und Korrektur fehlerhafter taxonomischer An- notierungen in großen Sequenzendatenbanken. Der Algorithmus funktioniert wie folgt: für jede Sequenz wird die Platzierung im Stammbaum mit dem höchst- möglichen Likelihood-Wert ermittelt und anschließend geprüft, ob diese mit der vorgegeben taxonomischen Klassifikation übereinstimmt. Ist dies nicht der Fall, wird also eine Sequenz beispielsweise innerhalb einer anderen Gattung platziert, wird die Sequenz als falsch annotiert gemeldet, und es wird eine entsprechende Umklassifizierung vorgeschlagen. Auf simulierten Datensätzen mit zufällig eingefüg- ten Fehlern, erreichte unsere Pipeline eine hohe Identifikationsquote (>90%) sowie Genauigkeit (>95%). Zur Evaluierung anhand empirischer Daten, haben wir vier öffentliche rRNA Datenbanken untersucht, welche zur Klassifizierung von Bakterien häufig als Referenz benutzt werden. Dabei haben wir je nach Datenbank 0.2% bis 2.5% aller Sequenzen als potenzielle Fehlannotierungen identifiziert

    Fast algorithm for real-time rings reconstruction

    Get PDF
    The GAP project is dedicated to study the application of GPU in several contexts in which real-time response is important to take decisions. The definition of real-time depends on the application under study, ranging from answer time of μs up to several hours in case of very computing intensive task. During this conference we presented our work in low level triggers [1] [2] and high level triggers [3] in high energy physics experiments, and specific application for nuclear magnetic resonance (NMR) [4] [5] and cone-beam CT [6]. Apart from the study of dedicated solution to decrease the latency due to data transport and preparation, the computing algorithms play an essential role in any GPU application. In this contribution, we show an original algorithm developed for triggers application, to accelerate the ring reconstruction in RICH detector when it is not possible to have seeds for reconstruction from external trackers
    corecore