1 / 27

CINT & Reflex: New Reflection Data Structures

CINT & Reflex: New Reflection Data Structures. Masa(haru) Goto • Agilent Philippe Canal • Fermilab/CD Stefan Roiser, Axel Naumann • PH/SFT. CINT Is The Prompt, Right?. CINT is Backend for all dictionary based interpreters Execution engine (compiled and interpreted code)

bing
Download Presentation

CINT & Reflex: New Reflection Data Structures

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CINT & Reflex:New Reflection Data Structures Masa(haru) Goto • Agilent Philippe Canal • Fermilab/CD Stefan Roiser, Axel Naumann • PH/SFT

  2. CINT Is The Prompt, Right? CINT is • Backend for all dictionary based interpreters • Execution engine (compiled and interpreted code) • Prerequisite for signal/slot • Prerequisite for I/O Reflection is • Part of CINT’s knowledge, used for all of above • Info on types and their members: name, type, access to values or call AA Review 2006

  3. CINT And Reflection rootcint gccxml Auto-Load C++ Parser Generate Dictionary Reflection Data Interpreter Load Dictionary ROOT Compiled Function Call Uses ReflectionC++ API Dict Gen Data flow AA Review 2006

  4. Comments From Last Review “ Common Linkdef.h interfacerootcint -cint, -reflex, -gccxml Unified Python interface: PyROOT Common Dictionary - unify dictionary clients for experiments using lcgdict/reflex, unify automatic generation of glue code (e.g. python bindings) [JJ Blaising, feedback talk 1.4.2005] AA Review 2006

  5. Dictionary Options – You Choose! Reflex dictionary gccxml parser selection.xml genreflex.py ROOT Cintex Linkdef.h rootcint CINT parser CINT dictionary AA Review 2006

  6. Dictionary Options – The Goal Reflex dictionary gccxml parser selection.xml genreflex.py ROOT Linkdef.h rootcint CINT parser AA Review 2006

  7. Ordering, scheduling, priorities [Final Report 2005] Comments From Last Review (cont’ed) First version of Cint with Reflex reflection data base expected for end of year – not yet production grade! Production-grade version available mid 2007 Reasons for delay: • Moving functionality from CINT to Reflex • Keeping CINT API backward compatible • Merge process more involved than expected AA Review 2006

  8. That’s It? Already? No. This talk’s menu offers following courses: • Motivation: why we (still) need the merge • Merge implementation details • Steps of the merge • Merge related development in Cint and Reflex • Status • Outlook AA Review 2006

  9. Motivation For Cint-Reflex Merge C++ code replacing C structs • Smaller heap footprint: factor 3 in current CVS for CLHEP based example – expected to deteriorate • Dynamic data structures, no hard-wired limits • Easier to maintain • Refactoring, separation of functionality • Preparation for thread-safety AA Review 2006

  10. C++ Code Vs. C structs Example Current Cint has global C structs struct G__tagtable { char* name[G__MAXSTRUCT]; … } G__struct; Reflex allows OO access to reflection data Reflex::Scope::GlobalScope(); Covers types, data members, function members, templates,… AA Review 2006

  11. Merge Implementation - Context Why you care: reason for merge schedule • CINT mixes reflection and execution data, need to split carefully • CINT extremely complex: extensive use of globals, spread of functionality, side effects • CINT grown and debugged, don’t want to risk breaking parts that work • Changes need to be “invisible” to users AA Review 2006

  12. Merge Implementation - Consequence • Small step changes • Always compare to working version with extensive test suite • Replace data structures first Major benefit will come only later: • replace functionality • remove code duplication • take advantage of OO data structures AA Review 2006

  13. Steps Of Merge • Need duplication of scope info for both CINT and Reflex while merging (for contained types) • Scaffolding, wrappers, convenience functions for Reflex and CINT • Typedef database: G__newtype Reflex::Type • Globals: G__*tagnum Reflex::Scope • Structs: G__struct  Reflex::Scope • Functions: G__ifunc  Reflex::FunctionMember • Data members: G__vararry  Reflex::DataMember AA Review 2006

  14. Merge Tactics • New configure; make CINT build system to allow sensible multi-platform tests • CVS branch for merge, apply bug fixes from HEAD • All other major development for CINT stalled until merge is done • Update definition of CINT’s API. Will keep API backward compatible, use export statements to ensure no internal function is used by e.g. ROOT • Once done, make libCint.so and libCintNew.so binary compatible, to allow switch without rebuild:mv lib/libCintNew.so lib/libCint.so; root AA Review 2006

  15. Development In CINT For Merge • New build system for standalone CINT/Reflex • API redefinition • Scaffolding to allow transition of data structures without large re-write of code • extern “C” wrappers for some functions and classes + the actual merge… AA Review 2006

  16. Development In Reflex For Merge • Unloading of dictionary • Changes to Reflex::Builder interface • Late (on-demand) initialization of reflection data • Extended C++ support: using directives, hiding typedef struct A A, using declarations, friend • Name Lookup: major boost in Reflex functionality, and damn complex AA Review 2006

  17. Development In Reflex (cont’ed) • Fast access of reflex objects’ properties, needed for CINT execution data • Reflex objects can create dictionary representation of themselves • Several convenience functions, e.g. discover the raw type (const char*  char), the kind of fundamental type etc. AA Review 2006

  18. Status - Where Are We Now? ! struct/class/…, function, data member reflectiondatabase On demand initialization of Reflex data Reflex support for using declarations, friend To Do Duplication of scopes for CINT and Reflex Scaffolding, wrappers, convenience functionality configure && make build system Update of definition of CINT API Typedef, globals reflection database Unloading of dictionary Reflex::Builder interface changes Reflex support for using directives, hiding typedef struct A A Fast access to Reflex objects’ properties ! ! : a lot of work ! Done! ! ! Name Lookup Reflex dictionary generator API On the way AA Review 2006

  19. Outlook - Merge Merge related: • First version of CINT using Reflex by end of year • ROOT’s TClass, TMethod,… classes to be updated after Cint/Reflex merge, i.e. 2007 • Adaptation of PyROOT to use Reflex API • Other ROOT occurrences of CINT API calls to be replaced by Reflex API calls AA Review 2006

  20. Outlook - CINT 2007: • Function stubs / call wrappers will be removed on selected platforms (GCC3,4; MSVC) • Just-in-time dictionary generator builds dictionary for all template instances needed, when needed 2008: • Reflex persistency - .root instead of .so ??? AA Review 2006

  21. Outlook – Dictionary Reflex dictionary gccxml parser genreflex.py Linkdef.h / selection.xml ROOT rootcint CINT parser AA Review 2006

  22. Outlook – Dictionary • Current Reflex dictionaries: • 2007: Remove function stubs on selected platforms • 2007: Generate template dictionaries on demand • 2008: Don’t “store” Reflex database as .cxx/.o (part of lib) but as .root file, generate member offset info on-the-fly: ROOT itself would shrink by ~25%! Improvement independent of selection.xml / Linkdef.h and gendict.py / rootcint 100% 33% ~1% AA Review 2006

  23. Outlook 2008+: • Future: reconsider gccxml to Reflex path: gendict.py? C++? PyROOT based? • CINT thread safety More details in the coming months – early comments welcome! AA Review 2006

  24. FIN AA Review 2006

  25. My.h either / or XML parser (e.g. Xerces) XML parser (e.g. expat) gccxml genreflex.cpp genreflex2.py CINT parser My.xml PyReflex genreflex2 Just in time compiler libMy.so Symbol Lookup Builder API Stub comp. / Offset calc. Linkdef.h / selection.xml ? ROOT Reflex DS My_rflx.root Dictionary Generator genreflex.py meta hist math … Library My_rflx.cpp User API dlopen File Process Data Flow make PyROOT PyReflex CINT interpreter ROOT C/C++ Python >>> cint> libMyRflx.so XML Dictionaries – The Full Picture 200x AA Review 2006

  26. Dictionary Heap Usage CINT, CLHEP example 2500k AA Review 2006

  27. Dictionary Heap Usage Reflex, CLHEP example 700k AA Review 2006

More Related