000973639 001__ 973639 000973639 005__ 20251020082355.0 000973639 0247_ $$2datacite_doi$$a10.18154/RWTH-2023-10915 000973639 037__ $$aRWTH-2023-10915 000973639 041__ $$aEnglish 000973639 082__ $$a004 000973639 1001_ $$0P:(DE-82)975181$$aIgnatov, Kaloyan$$b0$$urwth 000973639 245__ $$aReviewing and improving data race detection techniques for vectorized OpenMP applications$$cKaloyan Ignatov$$honline 000973639 246_3 $$aÜberblick und Verbesserung von Techniken zur Erkennung von Data Races in vektorisierten OpenMP Anwendungen$$yGerman 000973639 260__ $$aAachen$$bRWTH Aachen University$$c2023 000973639 300__ $$a1 Online-Ressource : Illustrationen 000973639 3367_ $$02$$2EndNote$$aThesis 000973639 3367_ $$0PUB:(DE-HGF)2$$2PUB:(DE-HGF)$$aBachelor Thesis$$bbachelor$$mbachelor 000973639 3367_ $$2BibTeX$$aMASTERSTHESIS 000973639 3367_ $$2DRIVER$$abachelorThesis 000973639 3367_ $$2DataCite$$aOutput Types/Supervised Student Publication 000973639 3367_ $$2ORCID$$aSUPERVISED_STUDENT_PUBLICATION 000973639 500__ $$aVeröffentlicht auf dem Publikationsserver der RWTH Aachen University 000973639 502__ $$aBachelorarbeit, RWTH Aachen University, 2023$$bBachelorarbeit$$cRWTH Aachen University$$d2023$$gFak01$$o2023-10-13 000973639 5203_ $$aDa die sequenzielle Verarbeitungsgeschwindigkeit ein Plateau erreicht hat, ist modernes Computing zunehmend auf Parallelisierung angewiesen, um Leistungssteigerungen zu erzielen. Neben der Parallelisierung auf Node- und Thread-Ebene haben sich Hardwarehersteller zunehmend auf die Parallelisierung auf Anweisungsebene verlassen, die das SIMD-Paradigma (Single Instruction, Multiple Data) verwendet, um die einzelnen CPU-Taktzyklen effizienter auszunutzen. Ein Paradebeispiel für diesen Wandel sind die AVX-512-Erweiterungen von Intel, mit denen die x86-Architektur um SIMD-Vektorbefehle erweitert wurde. Die zunehmende Parallelität birgt jedoch das Risiko der Einführung von Data Races, eine bekanntermaßen schwer zu beseitigende Art von Fehlern, die durch zwei oder mehr unsynchronisierte Zugriffe auf eine gemeinsame Speicherstelle verursacht werden, von denen mindestens einer ein Schreibvorgang ist. Daher wurden im Laufe der Zeit zahlreiche Tools zur Erkennung von Datenrennen entwickelt, wie z. B. ThreadSanitizer. Obwohl ThreadSanitizer einer der bekanntesten Data-Race-Detektoren darstellt, der Integration in Compilern wie GCC und Clang findet, ist er in seiner ursprünglichen Form zum Zeitpunkt dieser Arbeit nicht in der Lage, die meisten Arten von Data-Races zu erkennen, die Vektor-Speicheroperationen beinhalten. In dieser Arbeit wird ein modifizierter ThreadSanitizer vorgestellt, der diese Lücke in der Funktionalität behebt. Als Basis für die angewandten Modifikationen wurde das ThreadSanitizer LLVM-Tool aus Clang/16.0.5 verwendet. Darüber hinaus wurden Mikrobenchmarks für verschiedene Vektorspeicheroperationen erstellt, um die Leistungs- und Korrektheitsevaluierung zu ermöglichen, sowohl für das in dieser Arbeit vorgestellte Tool als auch für jedes andere Tool, das eine ähnliche Funktionalität implementieren möchte. Die Leistung in realen Szenarien wurde mit Anwendungen aus der SPEC OMP2012-Benchmark-Suite unter Verwendung der JUBE-Benchmarking-Umgebung gemessen.$$lger 000973639 520__ $$aWith sequential processing speed having reached a plateau, modern computing is increasingly reliant on parallelization for performance gains. Apart from node and thread level parallelism, hardware manufacturers have been progressively leaning on instruction level parallelism, which leverages the single instruction, multiple data paradigm (SIMD) to more efficiently utilize individual CPU clock cycles. A prime example of this shift are Intel's AVX-512 extensions, which implemented support for SIMD vector instructions to the x86 architecture. However, increasing parallelism carries the risk of introducing data races, a notoriously difficult to remove type of bug caused by two or more unsynchronized accesses to a shared memory location, with at least one of them being a write. Thus, numerous data race detection tools, such as ThreadSanitizer, have been developed over the years. Despite being one of the most prominent data race detectors, integrated in compilers such as GCC and Clang, ThreadSanitizer in its original form is, at the time of this writing, incapable of detecting most types of data races involving vector memory operations. This work presents a modified ThreadSanitizer, which addresses this gap in functionality. As a basis for the applied modifications, the ThreadSanitizer LLVM tool found in Clang/16.0.5 was used. Furthermore, microbenchmarks that target various vector memory operations have been created with the aim of facilitating performance and correctness evaluation, both for the tool presented in this thesis, and for any other tool which seeks to implement similar functionality. Performance in real-world scenarios was measured with applications from the SPEC OMP2012 benchmark suite, using the JUBE benchmarking environment.$$leng 000973639 591__ $$aGermany 000973639 653_7 $$aClang 000973639 653_7 $$aData Race Detection 000973639 653_7 $$aHPC 000973639 653_7 $$aLLVM 000973639 653_7 $$aOpenMP 000973639 653_7 $$aSIMD 000973639 653_7 $$aSPEC 000973639 653_7 $$aThreadSanitizer 000973639 7001_ $$0P:(DE-82)IDM01074$$aMüller, Matthias S.$$b1$$eThesis advisor$$urwth 000973639 7001_ $$0P:(DE-82)IDM00515$$aLankes, Stefan$$b2$$eThesis advisor$$urwth 000973639 7001_ $$0P:(DE-82)IDM00506$$aJenke, Joachim$$b3$$eConsultant$$urwth 000973639 8564_ $$uhttps://publications.rwth-aachen.de/record/973639/files/973639.pdf$$yOpenAccess 000973639 8564_ $$uhttps://publications.rwth-aachen.de/record/973639/files/973639_AV.pdf$$yRestricted 000973639 8564_ $$uhttps://publications.rwth-aachen.de/record/973639/files/973639_EINV.msg$$yRestricted 000973639 8564_ $$uhttps://publications.rwth-aachen.de/record/973639/files/973639_source.zip$$yRestricted 000973639 909CO $$ooai:publications.rwth-aachen.de:973639$$popenaire$$popen_access$$pVDB$$pdriver$$pdnbdelivery 000973639 9101_ $$0I:(DE-588b)36225-6$$6P:(DE-82)975181$$aRWTH Aachen$$b0$$kRWTH 000973639 9101_ $$0I:(DE-588b)36225-6$$6P:(DE-82)IDM01074$$aRWTH Aachen$$b1$$kRWTH 000973639 9101_ $$0I:(DE-588b)36225-6$$6P:(DE-82)IDM00515$$aRWTH Aachen$$b2$$kRWTH 000973639 9101_ $$0I:(DE-588b)36225-6$$6P:(DE-82)IDM00506$$aRWTH Aachen$$b3$$kRWTH 000973639 9141_ $$y2023 000973639 915__ $$0StatID:(DE-HGF)0510$$2StatID$$aOpenAccess 000973639 9201_ $$0I:(DE-82)123010_20140620$$k123010$$lLehrstuhl für Informatik 12 (Hochleistungsrechnen)$$x0 000973639 9201_ $$0I:(DE-82)120000_20140620$$k120000$$lFachgruppe Informatik$$x1 000973639 961__ $$c2023-12-15T09:57:41.415627$$x2023-11-21T13:52:33.960900$$z2023-12-15T09:57:41.415627 000973639 9801_ $$aFullTexts 000973639 980__ $$aI:(DE-82)120000_20140620 000973639 980__ $$aI:(DE-82)123010_20140620 000973639 980__ $$aUNRESTRICTED 000973639 980__ $$aVDB 000973639 980__ $$abachelor