Top Banner
C++ w/ OpenMP Task Graph Generator Sean Krail
39

Internship - Final Presentation (26-08-2015)

Apr 15, 2017

Download

Documents

Sean Krail
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Internship - Final Presentation (26-08-2015)

C++ w/ OpenMP Task Graph GeneratorSean Krail

Page 2: Internship - Final Presentation (26-08-2015)

Goal

● C++ w/ OpenMP -> Clang’s AST + (Data Structure)

○ (Data Structure) -> TGFF

○ (Data Structure) -> DOT

○ (Data Structure) -> DARTS

Page 3: Internship - Final Presentation (26-08-2015)

Goal

● C++ w/ OpenMP -> Clang’s AST + (Data Structure)

○ (Data Structure) -> TGFF

○ (Data Structure) -> DOT

○ (Data Structure) -> DARTS

Page 4: Internship - Final Presentation (26-08-2015)

(Data Structure)

● LinkedList of Tasks

○ Task -> Task -> … -> Task -> null

● 3 Types of Tasks

○ CallTask, StmtGroupTask, ParallelTask

Page 5: Internship - Final Presentation (26-08-2015)

CallTask

● Function call● Start of a parallel OpenMP directive● Implicit barriers● Function return

Page 6: Internship - Final Presentation (26-08-2015)

StmtGroupTask & ParallelTask

● StmtGroupTask

○ Group of non-parallel, non-OpenMP Stmts

● ParallelTask

○ Group of regular or OMP-directive parallel Stmts

Page 7: Internship - Final Presentation (26-08-2015)

C++ w/ OpenMP -> Clang’s AST

void f(int n) {

int a = 1; int b = 2;

# pragma omp parallel

{

int c = 3; int d = 4;

# pragma omp for

for(int i = 0; i < n; i++)

{ int e = 5; int f = 6; int g = 7; }

// implicit barrier

int h = 8;

# pragma omp single

{ int i = 9; }

// implicit barrier

int j = 10;

# pragma omp single

{ int k = 11; }

}

// combined implicit barrier

int l = 12;

}

Page 8: Internship - Final Presentation (26-08-2015)

● Interface for traversing clang’s AST

RecursiveASTVisitor

Class Hierarchy

bool TheVisitor::TraverseDecl(clang::Decl *d) { if(!d) return true; else if(!isa<clang::FunctionDecl>(d)) return true;

// create the function start CallTask clang::FunctionDecl *f = llvm::cast <clang::FunctionDecl>(d); this->task = new CallTask(f, true);

// traverse children nodes RecursiveASTVisitor::TraverseDecl(d); // move to next sibling // or back go back to parent

// create the function end CallTask Task *tmp = new CallTask(f, false); this->task->setChild(tmp); this->task = nullptr; // good practice return true; }

Page 9: Internship - Final Presentation (26-08-2015)

Clang’s AST + (Data Structure)

Page 10: Internship - Final Presentation (26-08-2015)

Clang’s AST + (Data Structure)

Page 11: Internship - Final Presentation (26-08-2015)

Clang’s AST + (Data Structure)

Page 12: Internship - Final Presentation (26-08-2015)

Clang’s AST + (Data Structure)

Page 13: Internship - Final Presentation (26-08-2015)

Clang’s AST + (Data Structure)

Page 14: Internship - Final Presentation (26-08-2015)

Clang’s AST + (Data Structure)

Page 15: Internship - Final Presentation (26-08-2015)

Clang’s AST + (Data Structure)

Page 16: Internship - Final Presentation (26-08-2015)

Clang’s AST + (Data Structure)

Page 17: Internship - Final Presentation (26-08-2015)

Clang’s AST + (Data Structure)

Page 18: Internship - Final Presentation (26-08-2015)

Clang’s AST + (Data Structure)

Page 19: Internship - Final Presentation (26-08-2015)

Clang’s AST + (Data Structure)

Page 20: Internship - Final Presentation (26-08-2015)

Clang’s AST + (Data Structure)

Page 21: Internship - Final Presentation (26-08-2015)

Clang’s AST + (Data Structure)

Page 22: Internship - Final Presentation (26-08-2015)

Clang’s AST + (Data Structure)

Page 23: Internship - Final Presentation (26-08-2015)

Clang’s AST + (Data Structure)

Page 24: Internship - Final Presentation (26-08-2015)

Clang’s AST + (Data Structure)

Page 25: Internship - Final Presentation (26-08-2015)

Clang’s AST + (Data Structure)

Page 26: Internship - Final Presentation (26-08-2015)

Clang’s AST + (Data Structure)

Page 27: Internship - Final Presentation (26-08-2015)

Clang’s AST + (Data Structure)

Page 28: Internship - Final Presentation (26-08-2015)

Clang’s AST + (Data Structure)

Page 29: Internship - Final Presentation (26-08-2015)

Clang’s AST + (Data Structure)

Page 30: Internship - Final Presentation (26-08-2015)

Clang’s AST + (Data Structure)

Page 31: Internship - Final Presentation (26-08-2015)

Clang’s AST + (Data Structure)

Page 32: Internship - Final Presentation (26-08-2015)

Goal

● C++ w/ OpenMP -> Clang’s AST + (Data Structure)

○ (Data Structure) -> TGFF

○ (Data Structure) -> DOT

○ (Data Structure) -> DARTS

Page 33: Internship - Final Presentation (26-08-2015)

Goal

● C++ w/ OpenMP -> Clang’s AST + (Data Structure)

○ (Data Structure) -> TGFF

○ (Data Structure) -> DOT

○ (Data Structure) -> DARTS

Page 34: Internship - Final Presentation (26-08-2015)

(Data Structure) -> TGFF

● List of Tasks

○ ParallelTask is broken down into N StmtGroupTasks

(for N number of threads)

● List of Arcs

○ Synonymous with dependencies

Page 35: Internship - Final Presentation (26-08-2015)

(Data Structure) -> DOT

● List of Tasks and Arcs like TGFF

● Allows for styling of the graph

Page 36: Internship - Final Presentation (26-08-2015)

(Data Structure) -> DARTS

● Modular1. Derived Codelet classes for each unique Task2. A Single ThreadedProcedure for the entire Task

Graph3. Definition of each derived codelet class’s fire

method4. main entry function

Page 37: Internship - Final Presentation (26-08-2015)

Script to Execute Tool#!/bin/sh

CLANGBUILD=~/Documents/clang-llvm/buildOMP=~/Documents/omp-darts-compiler/ompdarts-sean/taskgraph/functions/hello.cppDARTSDIR=~/CAPSL/DARTSAPP=TaskGraphTP

rm $DARTSDIR/apps/$APP/$APP.cpp

# run tool# Options:# numthreads (default is 2)# tgff# dot# darts# Examples:# $BUILD/bin/ompdarts-taskgraph-generator $PROGRAM -numthreads=5 -tgff -dot -darts -- -Xclang -fopenmp# $BUILD/bin/ompdarts-taskgraph-generator $PROGRAM -- -Xclang -fopenmp

$CLANGBUILD/bin/ompdarts-taskgraph-generator $OMP -numthreads=2 -darts -- -Xclang -fopenmp >> $DARTSDIR/apps/$APP/$APP.cpp

TMP=$PWDcd $DARTSDIR/buildmake$DARTSDIR/build/apps/$APP/$APPcd $TMP

Page 38: Internship - Final Presentation (26-08-2015)

DARTS ExampleTaskGraphTP()Fired codelet startFired codelet sg0Fired codelet call0Fired codelet sg1_t0Fired codelet sg1_t1Fired codelet for0_t0Fired codelet for0_t1Fired codelet barrier0Fired codelet sg2_t0Fired codelet sg2_t1Fired codelet single0_t0Skipped codelet single0_t1Fired codelet barrier1Fired codelet single1_t0Skipped codelet single1_t1Fired codelet barrier2Fired codelet sg3Fired codelet endTotal Time Taken: 0.00969014 sec

void f(int n) {

int a = 1; int b = 2;

# pragma omp parallel

{

int c = 3; int d = 4;

# pragma omp for

for(int i = 0; i < n; i++)

{ int e = 5; int f = 6; int g = 7; }

// implicit barrier

int h = 8; int i = 9;

# pragma omp single

{ int j = 10; int k = 11; }

// implicit barrier

# pragma omp single

{ int l = 12; }

}

// combined implicit barrier of OMPSingle and OMPParallel

int m = 13;

}

Page 39: Internship - Final Presentation (26-08-2015)

Questions?