1 / 13

What is Teuchos (TEF-hos)?

Teuchos: Utilities for Developers & Users November 4 th , 1:15-4:30pm Roscoe Bartlett Mike Heroux Kris Kampshoff Kevin Long Paul Sexton Heidi Thornquist.

watson
Download Presentation

What is Teuchos (TEF-hos)?

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. Teuchos: Utilities forDevelopers & Users November 4th, 1:15-4:30pmRoscoe BartlettMike HerouxKris KampshoffKevin LongPaul SextonHeidi Thornquist Sandia is a multiprogram laboratory operated by Sandia Corporation, a Lockheed Martin Company,for the United States Department of Energy under contract DE-AC04-94AL85000.

  2. What is Teuchos (TEF-hos)? • Lightweight, portable utility package • What’s new? • First release in Trilinos 4.0 • Templated BLAS/LAPACK interface • Templated serial dense matrix / vector • Timing classes • Templated parameter list • Numeric traits mechanisms ( ordinal / scalar ) • Memory management: • Reference-counted pointers • Pre-allocated workspace • Exception handling • Command-line parsing • “Extended” utilities: • XML parsing • MPI communicators / traits Users Developers

  3. Parameters can be input and retrieved with templated “set” and “get” methods, as well as helper functions. • Parameter lists can be queried for attributes. • Parameters can be input and retrieved with templated “set” and “get” methods, as well as helper functions. // Has a solver been chosen? bool solver_defined = My_List.isParameter(“Solver”); // Has a preconditioner been chosen? bool prec_defined = My_List.isSublist(“Preconditioner”); // Has a double-precision drop tolerance been chosen? (Helper function) bool drop_tol = Teuchos::isParameterType<double>(Prec_List, “Drop Tolerance”); // Empty parameter list Teuchos::ParameterList My_List; // Setting parameters My_List.set("Max Iters", 1550); My_List.set("Tolerance", 1e-10); My_List.set("Solver", "GMRES"); // Create sublist Teuchos::ParameterList& Prec_List = My_List.sublist("Preconditioner"); // Setting parameters in sublist Prec_List.set("Type", "ILU"); Prec_List.set("Drop Tolerance", 1e-3); ReturnType foo_solver( Teuchos::ParameterList& solverPL,… ) { // Getting parameters int max_iters = solverPL.template<int> get("Max Iters"); std::string solver = getParameter(solverPL, “Solver”) double tol = solverPL.get("Tolerance", 1e-8); // Get sublist ( same as making sublist ) Teuchos::ParameterList precPL = solverPL.sublist("Preconditioner"); … return Ok; } Templated Parameter List • Design based on NOX parameter list • Adopted by Amesos, ML, Ifpack, AztecOO, … • Parameters can be numeric datatypes, pointers to vectors or functions, and other parameter lists.

  4. Numeric Traits Mechanisms Genericprogramming technique that uses templated interfaces to define the standard behavior of datatypes. • Assumed: addition, subtraction, multiplication, and division • OrdinalTraits • zero & one • int & long int • ScalarTraits • zero, one, magnitude type, absolute value, conjugate, square root, random number generator, … • std::numeric_limits • float, double, complex<float>, and complex<double> • Required: none, a compile-time check is performed. • Arbitrary precision arithmetic

  5. Arbitrary Precision LibrariesARPREC & GNU MP • ARPREC (Bailey, et. al.) • uses arrays of 64-bit floating-point numbers to represent high-precision floating-point numbers. • provides support for datatypes with differing precision levels. • --enable-teuchos-arprec • GNU MP • uses fullwords, arbitrary precision mantissa, and limited precision exponent to represent high-precision floating-point numbers. • platform specific kernels written in assembly language perform common inner-loop functions. • provides support for datatypes with differing precision levels. • --enable-teuchos-gmp • What about communication of arbitrary precision variables?

  6. Primitive Type Traits • A traits class for decomposing an object into an array of primitive objects • ARPREC: primitive type = double • GNU MP: primitive type = int, byte(?) • Can be used in communicating more complex datatypes • Essential for Tpetra, TSFCore, … • Platform dependent issues here ...

  7. Memory ManagementTeuchos::RefCountPtr • Reference-counted pointers • combat seg faults, memory leaks, headaches ... • RefCountPtr Intro Paper: $(TRILINOS_HOME)/doc/RefCountPtr/RefCountPtrBeginnersGuideSAND.tex http://software.sandia.gov/Trilinos/RefCountPtrBeginnersGuideSAND.pdf RefCountPtr<A> a_null_ptr, // Create a reference-counted NULL pointer. a_ptr2 = rcp(new A), // Initialize reference-counted pointers. a_ptr3 = rcp(new A); // "" A *ra_ptr2 = new A, // Initialize non-reference counted pointers. *ra_ptr3 = new A; // "" a_ptr2 = rcp(ra_ptr3); // Assign from a raw pointer (only do this once!) a_ptr3 = a_ptr1; // Assign one smart pointer to another. a_ptr2->f(); // Access a member of A using -> ra_ptr2->f(); // "" *a_ptr2 = *a_ptr3; // Dereference the objects and assign. *ra_ptr2 = *ra_ptr3; // "" // Get the raw C++ pointer. A* true_ptr = a_ptr1.get();

  8. Memory ManagementTeuchos::Workspace • Pre-allocated workspace (Teuchos::WorkspaceStore) • Avoid calls to new/delete with arrays of un-initialized or default initialized objects as automatic variables on the stack (global). • Calls new/delete by default. • Very useful in codes/functions/methods that are commonly used and riddled with creation/destruction of arrays: int* index = new int[ num_vecs ]; #include “Teuchos_Workspace.hpp” int main( int argc, char* argc[] ) { size = 100; Teuchos::set_default_workspace_store( Teuchos::rcp(new Teuchos::WorkspaceStoreInitializeable(10*size))); Teuchos::WorkspaceStore *wss_(Teuchos::get_default_workspace_store().get()); Teuchos::Workspace<double> b(wss_,size,false); Teuchos::Workspace<int> index(wss_,size,false); return 0; }

  9. Memory ManagementTeuchos::Workspace Memory block size = 100 Number of call loops = 500000 Timing raw new and delete for temporaries ... time = 0.589 sec Timing std::vector for temporaries ... time = 0.657 sec Timing std::valarray for temporaries ... time = 0.627 sec Timing Teuchos::Workspace for temporaries ... time = 0.268 sec *** Statistics for automatic array workspace: Number of megabytes of preallocated workspace = 0.001 Number of megabytes needed = 0.0008 Number of allocations using preallocated workspace = 500000 Number of dynamic allocations beyond preallocated workspace = 0 Relative time (lower is better): raw new/delete = 2.19776 std::vector = 2.45149 std::valarray = 2.33955 Teuchos::Workspace = 1

  10. Exception Handling • TEST_FOR_EXCEPTION macro: • Macro for throwing an exception with breakpointing: #define TEST_FOR_EXCEPTION( throw_exception_test, Exception, msg ) #define TEST_FOR_EXCEPT( throw_exception_test ) • DEVELOPER’S NOTE: • If there is an error with this macro ... • Did you use “-DHAVE_CONFIG_H” in your makefile? • Consider using “trilinos_make_macros.mak” TEST_FOR_EXCEPTION( n > 100, std::out_of_range , "Error, n = " << n << is bad" ); /home/bob/project/src/my_source_file.cpp:225: n > 100: Error, n = 125 is bad

  11. Teuchos::Command Line Processor • Basic command line parser for input from (argc,argv[]) • Facilitates organization of configurable executables/examples • Creates help string for command line options • Command line options can be standard data types / enumerated lists • Let’s look at an example ...

  12. Teuchos::CommandLineProcessorExample #include “Teuchos_CommandLineProcessor.hpp” int main(int argc, char* argv[] ) { // Creating an empty command line processor looks like: Teuchos::CommandLineProcessor My_CLP; // Set an integer command line option. int NumIters = 1550; My_CLP.setOption("iterations", &NumIters, "Number of iterations"); // Set a boolean command line option. bool Precondition; My_CLP.setOption("precondition","no-precondition", &Precondition,"Preconditioning flag"); ... // Allow an unrecognized option to be ignored (warning is printed) My_CLP.recogniseAllOptions(true); // Throw and exception if an option found is not recognized or My_CLP.throwExceptions(false); Teuchos::CommandLineProcessor::EParseCommandLineReturn parseReturn= My_CLP.parse( argc, argv ); if (parseReturn != PARSE_SUCCESSFUL) return 1; return 0; } $ ./CLP_example.exe --help Usage: ./CLP_example [options] options: --help Prints this help message --pause-for-debugging Pauses for user input to allow attaching a debugger --iterations int Number of iterations (default: --iterations=1550) --tolerance double Tolerance (default: --tolerance=1e-10) --solver string Linear solver (default: --solver="GMRES") --precondition bool Preconditioning flag --no-precondition (default: --no-precondition) --speed enum Speed of our solver Valid options: "slow", "medium", "fast" (default: --speed="medium")

  13. Teuchos Developers Overview • Parameter list is easy to use and quickly being adopted by most Trilinos packages. • Templated tools libraries are essential for the development of templated solver libraries. • Numeric traits mechanism allows the use of arbitrary datatypes in templated code. • Templated BLAS/LAPACK wrappers and SDM allow easy integration of arbitrary precision for high-precision kernels. • Teuchos tools provide portable solutions for developers. • See Teuchos website for more info: http://software.sandia.gov/Trilinos/packages/teuchos

More Related