Presentation is loading. Please wait.

Presentation is loading. Please wait.

IBM Research © 2006 IBM Corporation CDT Static Analysis Features CDT Developer Summit - Ottawa Beth September.

Similar presentations


Presentation on theme: "IBM Research © 2006 IBM Corporation CDT Static Analysis Features CDT Developer Summit - Ottawa Beth September."— Presentation transcript:

1 IBM Research © 2006 IBM Corporation CDT Static Analysis Features CDT Developer Summit - Ottawa Beth Tibbittstibbitts@us.ibm.comtibbitts@us.ibm.com September 20, 2006 This work has been supported in part by the Defense Advanced Research Projects Agency (DARPA) under contract No. NBCH30390004.

2 IBM Research © 2006 IBM Corporation 2 The Problem  Static Analysis of C programs is useful  Existing Abstract Syntax Tree (AST) in Eclipse CDT provides basic navigation and information, but needs more

3 IBM Research © 2006 IBM Corporation 3 CDT AST Extensions  Enhance existing CASTNode and Visitor –bottom-up traversal  Add other additional graphs: –Call Graph –Control Flow Graph –Data Dependence Graph  Traversal of these new graphs available in: –Topological Order –Reverse Topological Order

4 IBM Research © 2006 IBM Corporation 4 Bottom-up AST traversal org.eclipse.cdt.core.dom.ast.ASTVisitor org.eclipse.cdt.core.dom.ast.c.CASTVisitor Existing: public int visit(IASTxxx..){ return PROCESS_CONTINUE; } New: public int leave(IASTxxx..){ return PROCESS_CONTINUE; }

5 IBM Research © 2006 IBM Corporation 5 Call Graph main a kei gee foo Recursive calls detected… A cycle is detected on foo, gee and kei #include "mpi.h" #include "stdio.h" void foo(int x); void gee(int x); void kei(int x); void foo(int x){ x ++; gee(x); } void gee(int x){ x *= 3; kei(x); } void kei(int x){ x = x % 10; foo(x); } void a(int x){ x --; } int main3(int argc, char* argv[]){ int x = 0; foo(x); a(x); }

6 IBM Research © 2006 IBM Corporation 6 Control Flow Graph & Data Flow Dependence Graph – sample program #include #include "mpi.h" // Sample MPI program int main(int argc, char* argv[]){ printf("Hello MPI World the original.\n"); int my_rank; /* rank of process */ int p; /* number of processes */ int source; /* rank of sender */ int dest; /* rank of receiver */ int tag=0; /* tag for messages */ char message[100], *tmp; /* storage for message */ MPI_Status status ; /* return status for receive */ int * array; /* start up MPI */ array = (int *)malloc(sizeof(int) * 10); MPI_Init(&argc, &argv); /* find out process rank */ MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); /* find out number of processes */ MPI_Comm_size(MPI_COMM_WORLD, &p); MPI_Barrier(MPI_COMM_WORLD); if (my_rank !=0){ /* create message */ sprintf(message, "Greetings from process %d!", my_rank); dest = 0; /* use strlen+1 so that '\0' get transmitted */ MPI_Send(message, strlen(message)+1, MPI_CHAR, dest, tag, MPI_COMM_WORLD); MPI_Barrier(MPI_COMM_WORLD); } else{ printf("From process 0: Num processes: %d\n",p); for (source = 1; source < p; source++) { MPI_Recv(message, 100, MPI_CHAR, source, tag, MPI_COMM_WORLD, &status); printf("%s\n",message); } MPI_Barrier(MPI_COMM_WORLD); } /* shut down MPI */ MPI_Finalize(); free(array); return 0; } if for

7 IBM Research © 2006 IBM Corporation 7 Control Flow Graph entry printf Int my_rank Int source Int p Char message[100], *tmp Int tag = 0 Int dest MPI_Init() MPI_Status status array = malloc() Int *array MPI_Comm_rank() MPI_Comm_size my_rank != 0 dest = 0 sprintf MPI_Barrier() A A MPI_Send() free(array) (join block) MPI_Barrier() source ++ printf MPI_Recv source < p source = 1 printf MPI_Finalize() B B return 0 exit if for

8 IBM Research © 2006 IBM Corporation 8 Data Dependence Graph (DDG) entry printf Int my_rank Int source Int p Char message[100], *tmp Int tag = 0 Int dest MPI_Init() MPI_Status status array = malloc() Int *array MPI_Comm_rank() MPI_Comm_size my_rank != 0 dest = 0 sprintf MPI_Barrier() A A MPI_Send() free(array) (join block) MPI_Barrier() source ++ printf MPI_Recv source < p source = 1 printf MPI_Finalize() B B return 0 exit Control flow Data flow Control flow Work in Progress (graph not complete)

9 IBM Research © 2006 IBM Corporation 9 Summary  MPI Barrier Analysis uses these structures  Is this valuable as an addition to CDT?  Other Future plans –Parallel Tools Platform (PTP) Analysis: Static and Dynamic Analysis of MPI, OpenMP, and LAPI programs for detection of common errors Code Refactorings for Performance Optimization, e.g. refactoring for improved computation / communication overlap


Download ppt "IBM Research © 2006 IBM Corporation CDT Static Analysis Features CDT Developer Summit - Ottawa Beth September."

Similar presentations


Ads by Google