Parallel Recursive Programs
Abhishek Somani, Debdeep Mukhopadhyay
Mentor Graphics, IIT Kharagpur
October 23, 2016
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 1 / 48
Parallel Recursive Programs Abhishek Somani, Debdeep Mukhopadhyay - - PowerPoint PPT Presentation
Parallel Recursive Programs Abhishek Somani, Debdeep Mukhopadhyay Mentor Graphics, IIT Kharagpur October 23, 2016 Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 1 / 48 Overview Recursion with OpenMP 1 Sorting 2 Serial
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 1 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 2 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 3 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 4 / 48
Parallel Recursion October 23, 2016 5 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 6 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 7 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 8 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 9 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 10 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 11 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 12 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 13 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 14 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 15 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 16 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 17 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 18 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 19 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 20 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 21 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 22 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 23 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 24 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 25 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 26 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 27 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 28 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 29 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 30 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 31 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 32 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 33 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 34 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 35 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 36 / 48
O(1) O(1) O(1) O(1) O(1) O(1) O(1) O(1) O(1) O(cL)
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 37 / 48
3 2
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 38 / 48
void multiply(const int n, const int m, double * A, double * B, double * C) { //Base cases if(m == 2) { baseCase2(n, m, A, B, C); return; } else if(m == 1) { C[0] += A[0] * B[0]; return; } //Recursive multiply const int offset12 = m/2; const int offset21 = n*m/2; const int offset22 = offset21 + offset12; multiply(n, m/2, A, B, C); multiply(n, m/2, A+offset12, B+offset21, C); multiply(n, m/2, A, B+offset12, C+offset12); multiply(n, m/2, A+offset12, B+offset22, C+offset12); multiply(n, m/2, A+offset21, B, C+offset21); multiply(n, m/2, A+offset22, B+offset21, C+offset21); multiply(n, m/2, A+offset21, B+offset12, C+offset22); multiply(n, m/2, A+offset22, B+offset22, C+offset22); return; } Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 39 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 40 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 41 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 42 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 43 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 44 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 45 / 48
if(depth == criticalDepth) { #pragma omp task { multiply(n, m/2, A, B, C, depth+1, criticalDepth); multiply(n, m/2, A+offset12, B+offset21, C, depth+1, criticalDepth); } #pragma omp task { multiply(n, m/2, A, B+offset12, C+offset12, depth+1, criticalDepth); multiply(n, m/2, A+offset12, B+offset22, C+offset12, depth+1, criticalDepth); } #pragma omp task { multiply(n, m/2, A+offset21, B, C+offset21, depth+1, criticalDepth); multiply(n, m/2, A+offset22, B+offset21, C+offset21, depth+1, criticalDepth); } #pragma omp task { multiply(n, m/2, A+offset21, B+offset12, C+offset22, depth+1, criticalDepth); multiply(n, m/2, A+offset22, B+offset22, C+offset22, depth+1, criticalDepth); } } else { multiply(n, m/2, A, B, C, depth+1, criticalDepth); multiply(n, m/2, A+offset12, B+offset21, C, depth+1, criticalDepth); multiply(n, m/2, A, B+offset12, C+offset12, depth+1, criticalDepth); multiply(n, m/2, A+offset12, B+offset22, C+offset12, depth+1, criticalDepth); multiply(n, m/2, A+offset21, B, C+offset21, depth+1, criticalDepth); multiply(n, m/2, A+offset22, B+offset21, C+offset21, depth+1, criticalDepth); multiply(n, m/2, A+offset21, B+offset12, C+offset22, depth+1, criticalDepth); multiply(n, m/2, A+offset22, B+offset22, C+offset22, depth+1, criticalDepth); Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 46 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 47 / 48
Abhishek, Debdeep (IIT Kgp) Parallel Recursion October 23, 2016 48 / 48