Presentation is loading. Please wait.

Presentation is loading. Please wait.

Generating Proxy Components using PDT

Similar presentations


Presentation on theme: "Generating Proxy Components using PDT"— Presentation transcript:

1 Generating Proxy Components using PDT
Sameer Shende Department of Computer and Information Science NeuroInformatics Center University of Oregon

2 Outline Overview of the TAU and PDT projects Proxy Component
Auto-generation of proxies Applications Concluding remarks Apr. 15, 2004

3 TAU Performance System Framework
Tuning and Analysis Utilities Performance system framework for scalable parallel and distributed high-performance computing Targets a general complex system computation model nodes / contexts / threads Multi-level: system / software / parallelism Measurement and analysis abstraction Integrated toolkit for performance instrumentation, measurement, analysis, and visualization Portable, configurable performance profiling/tracing facility Open software approach University of Oregon, LANL, FZJ Germany Apr. 15, 2004

4 TAU Performance System Architecture
Paraver EPILOG Apr. 15, 2004

5 TAU’s Paraprof Profile Browser (ESMF Data)

6 Callpath Profiling in TAU
Apr. 15, 2004

7 Program Database Toolkit
Component source/ Library C / C++ parser Fortran 77/90/95 IL analyzer Program Database Files IL DUCTAPE tau_pg SILOON CHASM TAU_instr Proxy Application component glue C++ / F90 interoperability Automatic source instrumentation Apr. 15, 2004

8 Program Database Toolkit (PDT)
Program code analysis framework for developing source-based tools for C99, C++ and F90 High-level interface to source code information Widely portable: IBM (AIX, Linux Power4), SGI, Compaq, HP, Sun, Linux clusters,Windows, Apple, Hitachi, Cray X1,T3E, RedStorm... Integrated toolkit for source code parsing, database creation, and database query commercial grade front end parsers EDG for C99/C++ Mutek Solutions for F90 Cleanscape Flint Parser for F77/F90/F95 Intel/KAI C++ headers for std. C++ library distributed with PDT portable IL analyzer, database format, and access API open software approach for tool development Target and integrate multiple source languages Used in TAU to build automated performance instrumentation tools Used in CHASM, XMLGEN, Component method signature extraction,… Apr. 15, 2004

9 CCA Performance Observation Component
Design measurement port and measurement interfaces Timer start/stop set name/type/group Control enable/disable groups Query get timer names metrics, counters, dump to disk Event user-defined events Apr. 15, 2004

10 CCA C++ (CCAFFEINE) Performance Interface
namespace performance { namespace ccaports { class Measurement: public virtual classic::gov::cca::Port { public: virtual ~ Measurement (){} /* Create a Timer interface */ virtual performance::Timer* createTimer(void) = 0; virtual performance::Timer* createTimer(string name) = 0; virtual performance::Timer* createTimer(string name, string type) = 0; virtual performance::Timer* createTimer(string name, string type, string group) = 0; /* Create a Query interface */ virtual performance::Query* createQuery(void) = 0; /* Create a user-defined Event interface */ virtual performance::Event* createEvent(void) = 0; virtual performance::Event* createEvent(string name) = 0; /* Create a Control interface for selectively enabling and disabling * the instrumentation based on groups */ virtual performance::Control* createControl(void) = 0; }; } Measurement port Measurement interfaces Apr. 15, 2004

11 CCA Timer Interface Declaration
namespace performance { class Timer { public: virtual ~Timer() {} /* Implement methods in a derived class to provide functionality */ /* Start and stop the Timer */ virtual void start(void) = 0; virtual void stop(void) = 0; /* Set name and type for Timer */ virtual void setName(string name) = 0; virtual string getName(void) = 0; virtual void setType(string name) = 0; virtual string getType(void) = 0; /* Set the group name and group type associated with the Timer */ virtual void setGroupName(string name) = 0; virtual string getGroupName(void) = 0; virtual void setGroupId(unsigned long group ) = 0; virtual unsigned long getGroupId(void) = 0; }; } Timer interface methods Apr. 15, 2004

12 Use of Observation Component in CCA Example
#include "ports/Measurement_CCA.h" ... double MonteCarloIntegrator::integrate(double lowBound, double upBound, int count) { classic::gov::cca::Port * port; double sum = 0.0; // Get Measurement port port = frameworkServices->getPort ("MeasurementPort"); if (port) measurement_m = dynamic_cast < performance::ccaports::Measurement * >(port); if (measurement_m == 0){ cerr << "Connected to something other than a Measurement port"; return -1; } static performance::Timer* t = measurement_m->createTimer( string("IntegrateTimer")); t->start(); for (int i = 0; i < count; i++) { double x = random_m->getRandomNumber (); sum = sum + function_m->evaluate (x); } t->stop(); } Apr. 15, 2004

13 Measurement Port Implementation
Use of Measurement port (i.e., instrumentation) independent of choice of measurement tool independent of choice of measurement type TAU performance observability component Implements the Measurement port Implements Timer, Control, Query, Control Port can be registered with the CCAFEINE framework Components instrument to generic Measurement port Runtime selection of TAU component during execution TauMeasurement_CCA port implementation uses a specific TAU library for choice of measurement type Apr. 15, 2004

14 … What’s Going On Here? application component application performance
Two instrumentation paths using TAU API runtime TAU performance data TAU API application component performance other API TAU API Alternative implementations of performance component Two query and control paths using TAU API Apr. 15, 2004

15 IntegratorProxy Component
Interpose a proxy component for each port Inside the proxy, track caller/callee invocations, timings Automate the process of proxy component creation Using PDT for static analysis of components Go Driver IntegratorPort MidpointIntegrator IntegratorPort IntegratorProxy Component IntegratorPortUses IntegratorPortProvides MeasurementPort Performance Apr. 15, 2004

16 TAU’s Proxy Generator for Classic C++ Interface
Proxy generator arguments: -p <port name> -t <type> -c <component> -d <PDB file> -o <output file> -f <selective instrumentation file> -x <Component tag> e.g., % tau_pg -c integrators::ccaports::Integrator -t integrators.ccaports.Integrator -p IntegratorPort -d ParallelIntegrator_CCA.pdb -o Proxy.cc -h ports/Integrator_CCA.h -f select.dat –x ParallelInt Creating PDB file: % cxxparse <file.cpp> -I<dir> -D<flags> creates file.pdb. % pdbmerge -o merged.pdb file1.pdb file2.pdb … Apr. 15, 2004

17 Selective Instrumentation
Exclude or include list of routines % tau_pg … -f select.dat % cat select.dat # Selective instrumentation: Specify an exclude/include list of routines/files. BEGIN_EXCLUDE_LIST void quicksort(int *, int, int) void sort_5elements(int *) void interchange(int *, int *) END_EXCLUDE_LIST # or use BEGIN_INCLUDE_LIST END_INCLUDE_LIST to bracket the event names # Instruments routines in Main.cpp, Foo?.c and *.C files only # Use BEGIN_[FILE]_INCLUDE_LIST with END_[FILE]_INCLUDE_LIST Apr. 15, 2004

18 Flame Reaction-Diffusion Demonstration
CCAFFEINE Apr. 15, 2004

19 CFRFS Profiles using Proxy Generator
NODE 0;CONTEXT 0;THREAD 0: %Time Exclusive Inclusive #Call #Subrs Inclusive Name msec total msec usec/call , : int main(int, char **) , : driver_proxy::go() , , rk2_proxy::Advance() , , ee_proxy::Regrid() , , flux_proxy::compute() , , sc_proxy::compute() , , efm_proxy::compute() , , grace_proxy::GC_Synch() , grace_proxy::GC_regrid_above_threshold() icc_proxy::restrict() icc_proxy::prolong() MPI_Init() TAU_GET_FUNCTION_VALUES() MPI_Isend() c_proxy::compute() stats_proxy::compute() MPI_Waitsome() MPI_Comm_dup() MPI_Allreduce() rk2_proxy::GetStableTimestep() compute void ( VectorFieldVariable *) bc_proxy::compute() MPI_Barrier() Apr. 15, 2004

20 Performance Modeling Use MasterMind Component [IPDPS’04] with Measurement Component to track each argument invocation Proxy for Mastermind component currently tracks all methods. Develop performance models based on measurements Specify performance models to a model evaluator library (being developed at UO/Sandia [Nick Trebon, J. Ray]) for evaluating performance models of component ensembles Specifying performance models research Performance Database ties in historical performance data Apr. 15, 2004

21 TAU Performance Database Framework
Performance analysis programs Performance data description Raw performance data Other tools PerfDML translators Performance analysis and query toolkit . . . ORDB PostgreSQL PerfDB profile data only XML representation project / experiment / trial Apr. 15, 2004

22 Proxy Generator for other Applications
PDT based proxy component for: QoS tracking [Boyana, ANL] Debugging Port Monitor (tracks arguments) SCIRun2 Perfume components [Venkat, U. Utah] Exploring Babel for auto-generation of proxies: Direct SIDL to proxy code generation Generating client component interface in C++, using PDT for generating proxies Apr. 15, 2004

23 Concluding Remarks Complex component systems pose challenging performance analysis problems that require robust methodologies and tools Automating Instrumentation of Component Software Performance Measurement Performance Prediction Debugging Performance-aware (QoS) intelligent components Performance engineered components Performance knowledge, observation, query and control Apr. 15, 2004

24 Support Acknowledgement
TAU and PDT support: Department of Energy (DOE) DOE MICS contracts DOE ASCI Level 3 (LANL, LLNL) U. of Utah DOE ASCI Level 1 subcontract NSF National Young Investigator (NYI) award


Download ppt "Generating Proxy Components using PDT"

Similar presentations


Ads by Google