You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							735 lines
						
					
					
						
							28 KiB
						
					
					
				
			
		
		
	
	
							735 lines
						
					
					
						
							28 KiB
						
					
					
				| <!-------- @HEADER
 | |
|  !
 | |
|  ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 | |
|  !
 | |
|  !  Zoltan Toolkit for Load-balancing, Partitioning, Ordering and Coloring
 | |
|  !                  Copyright 2012 Sandia Corporation
 | |
|  !
 | |
|  ! Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
 | |
|  ! the U.S. Government retains certain rights in this software.
 | |
|  !
 | |
|  ! Redistribution and use in source and binary forms, with or without
 | |
|  ! modification, are permitted provided that the following conditions are
 | |
|  ! met:
 | |
|  !
 | |
|  ! 1. Redistributions of source code must retain the above copyright
 | |
|  ! notice, this list of conditions and the following disclaimer.
 | |
|  !
 | |
|  ! 2. Redistributions in binary form must reproduce the above copyright
 | |
|  ! notice, this list of conditions and the following disclaimer in the
 | |
|  ! documentation and/or other materials provided with the distribution.
 | |
|  !
 | |
|  ! 3. Neither the name of the Corporation nor the names of the
 | |
|  ! contributors may be used to endorse or promote products derived from
 | |
|  ! this software without specific prior written permission.
 | |
|  !
 | |
|  ! THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
 | |
|  ! EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | |
|  ! IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | |
|  ! PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
 | |
|  ! CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 | |
|  ! EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 | |
|  ! PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 | |
|  ! PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 | |
|  ! LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 | |
|  ! NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | |
|  ! SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | |
|  !
 | |
|  ! Questions? Contact Karen Devine	kddevin@sandia.gov
 | |
|  !                    Erik Boman	egboman@sandia.gov
 | |
|  !
 | |
|  ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 | |
|  !
 | |
|  ! @HEADER
 | |
| -------> 
 | |
| <!doctype html public "-//w3c//dtd html 4.0 transitional//en">
 | |
| <html>
 | |
| <head>
 | |
|    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 | |
|    <meta name="filename" content="Zoltan.html">
 | |
|    <meta name="review" content="28 May, 1999">
 | |
|    <meta name="subject" content="Zoltan Home Page">
 | |
|    <meta name="sandia.approval_type" content="formal">
 | |
|    <meta name="sandia.approved" content="SAND99-1375">
 | |
|    <meta name="sandia.create_date" content="05/28/99">
 | |
|    <meta name="keywords" content="Zoltan, Zoltan Home Page, Zoltan dynamic load balancing library, Zoltan parallel computing">
 | |
|    <meta name="description" content="Zoltan:  Home Page for the Zoltan Library project at Sandia National Laboratories">
 | |
|    <meta name="GENERATOR" content="Mozilla/4.7 [en] (X11; U; SunOS 5.7 sun4u) [Netscape]">
 | |
|    <title>Zoltan</title>
 | |
| 
 | |
| <!----CHANGE INFORMATION IN AREAS WITH THIS HEADER---->
 | |
| <!----SCROLL DOWN TO FIND OTHER AREAS TO BE CHANGED---->
 | |
| <!--------CHANGE THE NAME AFTER THE DASH-------->
 | |
| <!--------CHANGE THE FILENAME-------->
 | |
| <!--------CHANGE THE REVIEW DATE-------->
 | |
| <!--------CHANGE THE SUBJECT-------->
 | |
| <link rel="schema.sandia" href="https://www.sandia.gov/html_schema.htm">
 | |
| <!--------CHANGE THE SAND NUMBER INFO-------->
 | |
| <!--------INSERT THE DATE DOCUMENT CREATED-------->
 | |
| <!--------CHANGE THE PAGE OWNER AND EMAIL ADDRESS-------->
 | |
| <link rev="made" title="name of contact" >
 | |
| <!--------CHANGE THE PAGE MAKER AND EMAIL ADDRESS-------->
 | |
| <!--------PLACE FIVE KEY WORDS WITHIN THE QUOTES-------->
 | |
| <!---------------END OF THIS CHANGE AREA--------------->
 | |
| </head>
 | |
| <body text="#000000">
 | |
| <!-- KDD Turned off alternative link colors in template; the >
 | |
| <!-- following line was part of the above body command. >
 | |
| <!-- link="#003366" vlink="#cc0033" alink="#000000">
 | |
| <a NAME="TOP"></a><!---TOP BANNER AREA STARTS HERE--->
 | |
| <table BORDER=0 valign="top" >
 | |
| <tr VALIGN=TOP>
 | |
| <td VALIGN=TOP WIDTH="160" BGCOLOR="#003366">
 | |
| <table BORDER=0 WIDTH="160" valign="top" >
 | |
| <tr VALIGN=TOP>
 | |
| <td VALIGN=TOP WIDTH="160"><!--SANDIA LOGO AT TOP LEFT-->
 | |
| <a href="https://www.sandia.gov/Main.html"><img SRC="https://www.sandia.gov/images/snlstkdc.gif" ALT="[Sandia National Laboratories]" BORDER=0 valign="top" height=49 width=126></a>
 | |
| <p><img ISMAP SRC="https://www.sandia.gov/images/labelNEW.gif" ALT="[navigation panel]" HSPACE=2 BORDER=0 usemap="#shortMap" height=119 width=111></td>
 | |
| 
 | |
| <td><img SRC="https://www.sandia.gov/images/1pixel.gif" BORDER=0 height=1 width=10></td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <table BORDER=0 WIDTH="160" valign="top" >
 | |
| <!-------------------------------------------------------------------------->
 | |
| <tr ALIGN=LEFT VALIGN=TOP>
 | |
| <td VALIGN=TOP WIDTH="150"><!----------- 0th little turquoise bevel button ------------>
 | |
| <table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="150" BGCOLOR="#00CCFF" >
 | |
| <tr ALIGN=CENTER VALIGN=CENTER>
 | |
| <td><b><font face="Verdana, Arial, Helvetica"><a href="Zoltan.html">Zoltan
 | |
| Home Page</a></font></b></td>
 | |
| </tr>
 | |
| </table>
 | |
| </td>
 | |
| 
 | |
| <td VALIGN=TOP WIDTH="20"></td>
 | |
| </tr>
 | |
| 
 | |
| <tr VALIGN=TOP>
 | |
| <td COLSPAN="2"></td>
 | |
| </tr>
 | |
| 
 | |
| <!-------------------------------------------------------------------------->
 | |
| <tr ALIGN=LEFT VALIGN=TOP>
 | |
| <td VALIGN=TOP WIDTH="150"><!----------- 1st little turquoise bevel button ------------>
 | |
| <table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="150" BGCOLOR="#00CCFF" >
 | |
| <tr ALIGN=CENTER VALIGN=CENTER>
 | |
| <td><b><font face="Verdana, Arial, Helvetica"><a href="ug_html/ug.html">Zoltan
 | |
| User's Guide</a></font></b></td>
 | |
| </tr>
 | |
| </table>
 | |
| </td>
 | |
| 
 | |
| <td VALIGN=TOP WIDTH="20"></td>
 | |
| </tr>
 | |
| 
 | |
| <tr VALIGN=TOP>
 | |
| <td COLSPAN="2"></td>
 | |
| </tr>
 | |
| 
 | |
| <!-------------------------------------------------------------------------->
 | |
| <tr ALIGN=LEFT VALIGN=TOP>
 | |
| <td VALIGN=TOP WIDTH="150"><!----------- 2nd little turquoise bevel button ------------>
 | |
| <table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="150" BGCOLOR="#00CCFF" >
 | |
| <tr ALIGN=CENTER VALIGN=CENTER>
 | |
| <td><b><font face="Verdana, Arial, Helvetica"><a href="dev_html/dev.html">Zoltan
 | |
| Developer's Guide</a></font></b></td>
 | |
| </tr>
 | |
| </table>
 | |
| </td>
 | |
| 
 | |
| <td VALIGN=TOP WIDTH="20"></td>
 | |
| </tr>
 | |
| 
 | |
| <tr VALIGN=TOP>
 | |
| <td COLSPAN="2"></td>
 | |
| </tr>
 | |
| 
 | |
| <!-------------------------------------------------------------------------->
 | |
| <tr ALIGN=LEFT VALIGN=TOP>
 | |
| <td VALIGN=TOP WIDTH="150"><!----------- 2A-nd little turquoise bevel button ------------>
 | |
| <table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="150" BGCOLOR="#00CCFF" >
 | |
| <tr ALIGN=CENTER VALIGN=CENTER> 
 | |
| <td><b><font face="Verdana, Arial, Helvetica"><a href="Zoltan_FAQ.html">
 | |
| Frequently Asked Questions</a></font></b></td>
 | |
| </tr>
 | |
| </table>
 | |
| </td>
 | |
| 
 | |
| <td VALIGN=TOP WIDTH="20"></td>
 | |
| </tr>
 | |
| 
 | |
| <tr VALIGN=TOP>
 | |
| <td COLSPAN="2"></td>
 | |
| </tr>
 | |
| 
 | |
| 
 | |
| <!-------------------------------------------------------------------------->
 | |
| <tr ALIGN=LEFT VALIGN=TOP>
 | |
| <td VALIGN=TOP WIDTH="150"><!----------- 3rd little turquoise bevel button ------------>
 | |
| <table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="150" BGCOLOR="#00CCFF" >
 | |
| <tr ALIGN=CENTER VALIGN=CENTER>
 | |
| <td COLSPAN="2"><b><font face="Verdana, Arial, Helvetica"><a href="Zoltan_phil.html">Zoltan
 | |
| Project Description</a></font></b></td>
 | |
| </tr>
 | |
| </table>
 | |
| </td>
 | |
| 
 | |
| <td VALIGN=TOP WIDTH="20"></td>
 | |
| </tr>
 | |
| 
 | |
| <tr VALIGN=TOP>
 | |
| <td COLSPAN="2"></td>
 | |
| </tr>
 | |
| 
 | |
| <!-------------------------------------------------------------------------->
 | |
| <tr ALIGN=LEFT VALIGN=TOP>
 | |
| <td VALIGN=TOP WIDTH="150"><!----------- 4th little turquoise bevel button ------------>
 | |
| <table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="150" BGCOLOR="#00CCFF" >
 | |
| <tr ALIGN=CENTER VALIGN=CENTER>
 | |
| <td COLSPAN="2"><b><font face="Verdana, Arial, Helvetica"><a href="Zoltan_pubs.html">Papers
 | |
| and Presentations</a></font></b></td>
 | |
| </tr>
 | |
| </table>
 | |
| </td>
 | |
| 
 | |
| <td VALIGN=TOP WIDTH="20"></td>
 | |
| </tr>
 | |
| 
 | |
| <!-------------------------------------------------------------------------->
 | |
| <tr ALIGN=LEFT VALIGN=TOP>
 | |
| <td VALIGN=TOP WIDTH="150"><!----------- 4Ath little turquoise bevel button ------------>
 | |
| <table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="150" BGCOLOR="#00CCFF" >
 | |
| <tr ALIGN=CENTER VALIGN=CENTER>
 | |
| <td COLSPAN="2"><b><font face="Verdana, Arial, Helvetica"><a href="Zoltan_cite.html">How to Cite Zoltan</a></font></b></td>
 | |
| </tr>
 | |
| </table>
 | |
| </td>
 | |
| 
 | |
| <td VALIGN=TOP WIDTH="20"></td>
 | |
| </tr>
 | |
| 
 | |
| <tr VALIGN=TOP>
 | |
| <td COLSPAN="2"></td>
 | |
| </tr>
 | |
| 
 | |
| <!-------------------------------------------------------------------------->
 | |
| <tr ALIGN=LEFT VALIGN=TOP>
 | |
| <td VALIGN=TOP WIDTH="150"><!----------- 5th little turquoise bevel button ------------>
 | |
| <table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="150" BGCOLOR="#00CCFF" >
 | |
| <tr ALIGN=CENTER VALIGN=CENTER>
 | |
| <td COLSPAN="2"><b><font face="Verdana, Arial, Helvetica"><a href="https://github.com/sandialabs/Zoltan/releases">Download
 | |
| Zoltan</a></font></b></td>
 | |
| </tr>
 | |
| </table>
 | |
| </td>
 | |
| 
 | |
| <td VALIGN=TOP WIDTH="20"></td>
 | |
| </tr>
 | |
| 
 | |
| <tr VALIGN=TOP>
 | |
| <td COLSPAN="2"></td>
 | |
| </tr>
 | |
| 
 | |
| <!-------------------------------------------------------------------------->
 | |
| <tr ALIGN=LEFT VALIGN=TOP>
 | |
| <td VALIGN=TOP WIDTH="150"><!----------- 6th little turquoise bevel button ------------>
 | |
| <table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="150" BGCOLOR="#00CCFF" >
 | |
| <tr ALIGN=CENTER VALIGN=CENTER>
 | |
| <td COLSPAN="2"><b><font face="Verdana, Arial, Helvetica"><a href="Zoltan_bugreport.html">Report a Zoltan Bug</a></font></b></td>
 | |
| </tr>
 | |
| </table>
 | |
| </td>
 | |
| 
 | |
| <td VALIGN=TOP WIDTH="20"></td>
 | |
| </tr>
 | |
| 
 | |
| <tr VALIGN=TOP>
 | |
| <td COLSPAN="2"></td>
 | |
| </tr>
 | |
| 
 | |
| <!-------------------------------------------------------------------------->
 | |
| <tr ALIGN=LEFT VALIGN=TOP>
 | |
| <td VALIGN=TOP WIDTH="150"><!----------- 7th little turquoise bevel button ------------>
 | |
| <table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="150" BGCOLOR="#00CCFF" >
 | |
| <tr ALIGN=CENTER VALIGN=CENTER>
 | |
| <td COLSPAN="2"><b><font face="Verdana, Arial, Helvetica">
 | |
| <a href="mailto: zoltan-dev@software.sandia.gov">Contact Zoltan Developers</a></font></b></td>
 | |
| </tr>
 | |
| </table>
 | |
| </td>
 | |
| 
 | |
| <td VALIGN=TOP WIDTH="20"></td>
 | |
| </tr>
 | |
| 
 | |
| <tr VALIGN=TOP>
 | |
| <td COLSPAN="2"></td>
 | |
| </tr>
 | |
| <!-------------------------------------------------------------------------->
 | |
| </table>
 | |
| </td>
 | |
| 
 | |
| <td VALIGN=TOP>
 | |
| <!--MAIN CONTENT AREA STARTS HERE-->
 | |
| <!----------------THIS IS A CHANGE AREA---------------->
 | |
| <!------HEADER TEXT SHOULD BE REPLACE THIS TEXT------>
 | |
| <b><font face="Verdana, Arial, Helvetica"><font size=+2>
 | |
| Zoltan:
 | |
| </font></font></b>
 | |
| <br>
 | |
| <b><font face="Verdana, Arial, Helvetica"><font size=+2>
 | |
| Data-Management Services for Parallel Applications
 | |
| </font></font></b>
 | |
| <p>
 | |
| <!---------------END OF THIS CHANGE AREA--------------->
 | |
| <!----------------THIS IS A CHANGE AREA---------------->
 | |
| <!--MAIN CONTENT SHOULD BE PLACED IN THE AREA BELOW-->
 | |
| <!------------------------------------------------------------------------->
 | |
| <!------------------------------------------------------------------------->
 | |
| <!------------------------------------------------------------------------->
 | |
| <b><font face="Verdana, Arial, Helvetica"><font size=+2>
 | |
| Project Description
 | |
| </font></font></b><br>
 | |
| <hr>
 | |
| <ul>
 | |
| <li>
 | |
| <a href="Zoltan_phil.html#Overview">Overview</a></li>
 | |
| <li>
 | |
| Design Considerations
 | |
| <ul>
 | |
| <li>
 | |
| <a href="Zoltan_phil.html#Design">Design of Toolkits and Libraries</a>
 | |
| </li>
 | |
| 
 | |
| <li>
 | |
| <a href="Zoltan_phil.html#ZDesign">Zoltan's Design</a></li>
 | |
| 
 | |
| <li>
 | |
| <a href="Zoltan_phil.html#ZExamples">Zoltan Examples</a></li>
 | |
| </ul>
 | |
| </li>
 | |
| 
 | |
| <li>
 | |
| Dynamic Load-Balancing and Data Migration Tools
 | |
| <ul>
 | |
| <li>
 | |
| <a href="Zoltan_phil.html#Typical">Typical Approach to Dynamic Load Balancing</a
 | |
| ></li>
 | |
| <li>
 | |
| <a href="Zoltan_phil.html#Harder">Why Dynamic Load Balancing is Harder
 | |
| than Static Partitioning</a></li>
 | |
| <li>
 | |
| <a href="Zoltan_phil.html#ZLB">Zoltan's Load-Balancing Suite</a></li>
 | |
| <li>
 | |
| <a href="Zoltan_phil.html#Mig">Data Migration Tools</a></li>
 | |
| </ul>
 | |
| </li>
 | |
| 
 | |
| <li>
 | |
| Communication Tools
 | |
| <ul>
 | |
| <li>
 | |
| <a href="Zoltan_phil.html#UComm">Unstructured Communication Library</a>
 | |
| </li>
 | |
| <li>
 | |
| <a href="Zoltan_phil.html#DD">Distributed Data Directories</a>
 | |
| </li>
 | |
| </ul>
 | |
| </li>
 | |
| 
 | |
| <li>
 | |
| <a href="Zoltan_phil.html#MemTools">Memory Management Tools</a></li>
 | |
| 
 | |
| 
 | |
| </ul>
 | |
| <!---------------------------------------------------------------------------->
 | |
| <a name="Overview"><hr><b>Overview</b><p>
 | |
| The Zoltan library is a collection of data management services for parallel, 
 | |
| unstructured, adaptive, and dynamic applications.  It simplifies the
 | |
| load-balancing, data movement, unstructured communication, and memory usage
 | |
| difficulties that arise in dynamic applications such as adaptive
 | |
| finite-element methods, particle methods, and crash simulations.
 | |
| Zoltan's data-structure neutral design also lets a wide range of applications
 | |
| use it without imposing restrictions on application data structures.
 | |
| Its object-based interface provides a simple and inexpensive way for
 | |
| application developers to use the library and researchers to make new
 | |
| capabilities available under a common interface.
 | |
| <p>
 | |
| Zoltan provides tools that help developers of parallel applications.
 | |
| <ul>
 | |
| <li>
 | |
| A suite of <a href="ug_html/ug_alg.html">parallel partitioning algorithms</a> 
 | |
| and <a href="ug_html/ug_interface_mig.html">data migration tools</a>
 | |
| dynamically redistribute data to reflect, say, changing processor workloads.
 | |
| </li>
 | |
| <li>
 | |
| <a href="ug_html/ug_util_dd.html">Distributed data directories</a> and 
 | |
| <a href="ug_html/ug_util_comm.html">unstructured communication</a> 
 | |
| services let
 | |
| applications perform complication communication using only a few simple
 | |
| primitives.
 | |
| </li>
 | |
| <li>
 | |
| <a href="ug_html/ug_util_mem.html">Dynamic memory management tools</a>
 | |
| enhance common memory allocation functions to
 | |
| simplify debugging of dynamic memory usage.
 | |
| </li>
 | |
| </ul>
 | |
| These tools are provided in an easy-to-use toolkit that is callable from C,
 | |
| C++, and Fortran90.
 | |
| 
 | |
| 
 | |
| <!---------------------------------------------------------------------------->
 | |
| <a name="Design"><hr><b>Design of Toolkits and Libraries</b><p>
 | |
| Using general-purpose libraries allows
 | |
| algorithms to be shared among and compared within many applications.  The
 | |
| close dependence of libraries on application data, however,
 | |
| requires careful design to maintain separation between the
 | |
| libraries and application data structures.
 | |
| <p>
 | |
| 
 | |
| One way to provide this separation is to use object-based software design.
 | |
| Instead of requiring the application to build data structures
 | |
| required by the library, the application could pass functions that access
 | |
| the application data structure to the libraries.
 | |
| For example, rather than require an application to build a complicated graph
 | |
| description, the library can require an application to provide a
 | |
| function returning graph vertices and a function returning edge 
 | |
| connectivity for a given vertex.  
 | |
| Using these functions, the 
 | |
| library can build the data structures it needs.
 | |
| <p>
 | |
| 
 | |
| This object-based design has a number of advantages.
 | |
| <ul>
 | |
| <li>
 | |
| Changes in the library's data structures need not
 | |
| propagate back to the application.  As long as the set of required functions
 | |
| does not change, the application does not need to change to use new versions
 | |
| of the library.
 | |
| </li>
 | |
| <li>
 | |
| Once the set of required functions is implemented, the application can use all
 | |
| the algorithms in the library.
 | |
| </li>
 | |
| 
 | |
| <li>
 | |
| The required functions are generally easy for
 | |
| an application to implement, as most applications need to
 | |
| access their data objects and the interactions between objects 
 | |
| for their own computations.  
 | |
| </li>
 | |
| <li>
 | |
| Memory usage is lower as 
 | |
| an application does not have to build an intermediate data structure
 | |
| that is later converted to appropriate data structures for the library.
 | |
| </li>
 | |
| <li>
 | |
| The constructor for library data structures is called only when it
 | |
| is needed, and only the data needed for a particular algorithm is obtained.
 | |
| </li>
 | |
| </ul>
 | |
| <p>
 | |
| There are a few disadvantages to this object-based approach as well.
 | |
| <ul>
 | |
| <li>
 | |
| Additional overhead is incurred as the library calls the functions to 
 | |
| build its data structures.
 | |
| In experiments, however, this cost has been very low
 | |
| relative to the cost of actual computation in the library.
 | |
| </li>
 | |
| <li>
 | |
| A general-purposes tool can
 | |
| provide only limited support for manipulations of application data
 | |
| structures (e.g., data movement).
 | |
| </li>
 | |
| </ul>
 | |
| <p>
 | |
| For more detailed information, see 
 | |
| [<a href="http://cs.sandia.gov/pub/papers/kddevin/cmame.ps.gz">Hendrickson
 | |
| and Devine</a>].
 | |
| <p>
 | |
| 
 | |
| <!---------------------------------------------------------------------------->
 | |
| <a name="ZDesign"><hr><b>Zoltan's Design</b><p>
 | |
| We have chosen an object-based, callback function design.  An application
 | |
| provides a number of simple callback functions that access the application
 | |
| data structures.  Zoltan then calls these functions to obtain data it needs.
 | |
| Geometric algorithms are
 | |
| supported via callback functions returning objects to be balanced and the
 | |
| weights and coordinates of those objects.  
 | |
| Graph-based algorithms are
 | |
| supported by callback functions returning objects to be
 | |
| balanced, edges between objects, and object and edge weights.
 | |
| For refinement-tree algorithms, additional callback functions return
 | |
| parent-child relationships.
 | |
| <p>
 | |
| Support for data migration (the movement of data to establish a new
 | |
| decomposition) is also provided through a similar callback
 | |
| function interface.  An application provides callback functions that pack
 | |
| object data into and unpack data from communication buffers provided by 
 | |
| Zoltan.  Zoltan calls the packing function to load communication buffers,
 | |
| performs the communication necessary to move the data, and calls the unpacking
 | |
| function to unload the communication buffers. 
 | |
| <!---------------------------------------------------------------------------->
 | |
| <a name="ZExamples"><hr><b>Zoltan Examples</b><p>
 | |
| Several examples of Zoltan's use can be found in the 
 | |
| <a href="ug_html/ug.html">Zoltan User's Guide</a>.
 | |
| <ul>
 | |
| <li>
 | |
| <a href="ug_html/ug_intro.html#Load-Balancing Tools">General 
 | |
| examples of library usage</a>.
 | |
| </li>
 | |
| <li>
 | |
| <a href="ug_html/ug_examples.html">Specific examples</a>
 | |
| for each phase of balancing 
 | |
| (<a href="ug_html/ug_examples_init.html">initialization</a>, 
 | |
| <a href="ug_html/ug_examples_lb.html">load balancing</a>, and 
 | |
| <a href="ug_html/ug_examples_mig.html">data migration</a>).
 | |
| </li>
 | |
| <li>
 | |
| <a href="ug_html/ug_examples_query.html">Examples of callback function 
 | |
| implementations</a>.
 | |
| </li>
 | |
| </ul>
 | |
| <p>
 | |
| <!---------------------------------------------------------------------------->
 | |
| <a name="Typical"><hr><b>Typical Approach to Dynamic Load Balancing</b><p>
 | |
| Dynamic load balancing has been used in many applications, ranging from
 | |
| adaptive mesh refinement to particle methods to contact detection algorithms.
 | |
| In most applications using dynamic load balancing, the load-balancing
 | |
| algorithm is implemented directly in the application, with close coupling
 | |
| between the application's and load-balancing algorithm's data structures.
 | |
| This typical approach has two disadvantages.
 | |
| <ul>
 | |
| <li> It is possible that the application developer did not select the
 | |
| best algorithm for the application, but the developer is unable to compare the
 | |
| algorithm with others without taking time to implement many algorithms in the
 | |
| application.
 | |
| </li>
 | |
| <li> The close coupling of the algorithm's and application's 
 | |
| data structures limits the algorithm's use to a single application.
 | |
| Developers wanting to use the algorithm in a new application have to re-write
 | |
| the algorithm using the new application's data structures.
 | |
| </li>
 | |
| </ul> 
 | |
| As a result, research into and use of dynamic load-balancing algorithms are
 | |
| severely impaired.
 | |
| <p>
 | |
| 
 | |
| 
 | |
| <!---------------------------------------------------------------------------->
 | |
| <a name="Harder"><hr><b>Why Dynamic Load Balancing is Harder than Static Partitioning</b><p>
 | |
| Many high-quality static partitioning tools exist; examples include
 | |
| <a href="http://cs.sandia.gov/CRF/chac.html">Chaco</a>,
 | |
| <a href="https://www-users.cs.umn.edu/~karypis/metis">METIS</a>,
 | |
| <!---
 | |
| <a href="https://www.uni-paderborn.de/fachbereich/AG/monien/RESEARCH/PART/party.html">Party</a>, 
 | |
| -->
 | |
| and 
 | |
| <a href="https://www.labri.fr/perso/pelegrin/scotch/">SCOTCH</a>.
 | |
| General-purpose dynamic load-balancing tools are less common, however,
 | |
| since they are more difficult to implement.  The difficulty arises from
 | |
| fundamental algorithmic and software-engineering 
 | |
| differences between static and dynamic partitioning.  These differences are
 | |
| summarized in the following table.
 | |
| <p>
 | |
| 
 | |
| <table border=1>
 | |
| <tr>
 | |
| <td valign=top><b>Static Partitioning...</b></td>
 | |
| <td valign=top><b>Dynamic Load Balancing...</b></td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td valign=top>Generally used as a pre-processor to an application.</td>
 | |
| <td valign=top>Runs side-by-side with an application.</td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td valign=top>Can be (and usually is) implemented serially.</td>
 | |
| <td valign=top>Must be implemented in parallel.</td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td valign=top>Has only modest concern for execution time.</td>
 | |
| <td valign=top>Must run quickly (time to load balance should not exceed time to run in
 | |
|     an unbalanced state).</td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td valign=top>Has only modest concern for memory usage.</td>
 | |
| <td valign=top>Must use little memory (should not affect scalability of
 | |
|     application).</td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td valign=top>Can use file-based interfaces (read geometry from a file; write partition
 | |
| info to a file).</td>
 | |
| <td valign=top>Must use function-call interfaces.</td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td valign=top>Has no dependence on an application's data structures.</td>
 | |
| <td valign=top>Needs information stored in an application's data structures.</td>
 | |
| </tr>
 | |
| <tr>
 | |
| <td valign=top>Accounts for part sizes and communication costs.</td>
 | |
| <td valign=top>Accounts for part sizes, communication costs, and data movement
 | |
| costs.</td>
 | |
| </tr>
 | |
| </table>
 | |
| <p>
 | |
| <!---------------------------------------------------------------------------->
 | |
| <a name="ZLB"><hr><b>Zoltan's Load-Balancing Suite</b></a>
 | |
| <p>
 | |
| In our experience, no single partitioning strategy is effective for all
 | |
| parallel computations.  Some application require partitions based only on the
 | |
| problem's workloads and geometry; others benefit from explicit consideration
 | |
| of dependencies between data.  Some applications require the highest quality
 | |
| partitions possible, regardless of the cost to generate them; others can
 | |
| sacrifice some quality so long as new partitions can be generated quickly.
 | |
| For some applications, the cost to relocate data is prohibitively high, so
 | |
| incremental partitioning algorithms are needed; other applications can
 | |
| tolerate greater remapping costs.  Most important, application developers
 | |
| might not know in advance which strategies work best in their applications, so
 | |
| the need a convenient means of comparing algorithms.
 | |
| <p>
 | |
| We provide two classes of parallel partitioning algorithms in the Zoltan
 | |
| library:
 | |
| <ul>
 | |
| <li>Geometric methods
 | |
| <blockquote>
 | |
| <a href="ug_html/ug_alg_rcb.html">Recursive Coordinate Bisection</a><br>
 | |
| <a href="ug_html/ug_alg_rib.html">Recursive Inertial Bisection</a><br>
 | |
| <a href="ug_html/ug_alg_hsfc.html">Hilbert Space-Filling Curve Partitioning</a> <br>
 | |
| <a href="ug_html/ug_alg_reftree.html">Refinement Tree Partitioning</a>
 | |
| </blockquote>
 | |
| </li>
 | |
| <li>Topology-based methods
 | |
| <blockquote>
 | |
| <a href="ug_html/ug_alg_phg.htmml">Hypergraph partitioning</a><br>
 | |
| <a href="ug_html/ug_alg_phg.htmml">Graph partitioning</a><br>
 | |
| Graph partitioning (through interfaces to
 | |
| <a href="ug_html/ug_alg_parmetis.html">ParMETIS</a> (U. Minn.) and
 | |
| <a href="ug_html/ug_alg_jostle.html">Jostle</a> (U. Greenwich))<br>
 | |
| </li>
 | |
| </ul>
 | |
| 
 | |
| Once the Zoltan callback functions are implemented, an application can switch
 | |
| between partitioning algorithms by changing only the 
 | |
| <a href="ug_html/ug_alg.html#LB_METHOD"><i>LB_METHOD</i></a> parameter
 | |
| through a call to 
 | |
| <a href="ug_html/ug_interface_init.html#Zoltan_Set_Param"><b>Zoltan_Set_Param</b></a>.  
 | |
| Thus, comparing different algorithms within a single application is easy,
 | |
| enabling users to try several algorithms and find
 | |
| the best ones for their applications.
 | |
| <p>
 | |
| <!---------------------------------------------------------------------------->
 | |
| <a name="Mig"><hr><b>Data Migration Tools</b></a>
 | |
| <p>
 | |
| A complicated part of dynamic repartitioning is the need to move data from old
 | |
| processors to new ones.  This data migration requires deletions and insertions
 | |
| from the application data structures as well as communication between the
 | |
| processors.
 | |
| <p>
 | |
| To help an application with 
 | |
| <a href="ug_html/ug_interface_mig.html">data migration</a>, Zoltan requires an application to
 | |
| supply callback functions that pack data into communication buffers and unpack
 | |
| data from communication buffers.  Zoltan
 | |
| calls the packing function to load communication buffers with objects to be
 | |
| exported, performs all communication needed to move the data, and calls the
 | |
| unpacking function to load the objects in the data structures on the new
 | |
| processors.  This mechanism eliminates the need for the application developer
 | |
| to implement complicated communication for data migration.
 | |
| <p>
 | |
| <!---------------------------------------------------------------------------->
 | |
| <a name="UComm"><hr><b>Unstructured Communication Library</b></a>
 | |
| <p>
 | |
| Unlike static applications, where communication patterns remain fixed
 | |
| throughout the computation, dynamic applications can have complicated,
 | |
| changing communication patterns.  For example:
 | |
| <ul>
 | |
| <li>After adaptive mesh refinement,
 | |
| new communication patterns must reflect dependencies between newly created
 | |
| elements.  
 | |
| </li>
 | |
| <li>
 | |
| Multiphysics simulations, such as crash simulations, might require complicated
 | |
| communication to transfer data between decompositions for different simulation
 | |
| phases.
 | |
| </li>
 | |
| </ul>
 | |
| Zoltan provides an 
 | |
| <a href="ug_html/ug_util_comm.html">unstructured communication package</a>
 | |
| to simplify
 | |
| communication.  The package builds a communication plan, including information
 | |
| about both message sends and receives for a given processor.  The plan can be
 | |
| reused throughout the application, or destroyed and rebuilt when communication
 | |
| patterns change.  The package also includes simple communication primitives that
 | |
| insulate the user from details of message sends and receives.  
 | |
| <p>
 | |
| <!---------------------------------------------------------------------------->
 | |
| <a name="DD"><hr><b>Distributed Data Directories</b></a>
 | |
| <p>
 | |
| Dynamic applications often need to locate off-processor information.  After
 | |
| repartitioning, for example, a processor might need to rebuild ghost cells and
 | |
| lists of data to be communicated.  It might know which data it needs, but not
 | |
| where the data are located.
 | |
| <p>
 | |
| To help locate off-processor data, Zoltan includes a 
 | |
| <a href="ug_html/ug_util_dd.html">distributed data
 | |
| directory</a> tool that is scalable with respect to both memory usage and
 | |
| computation time.  Processors register their owned objects with the directory.
 | |
| Then, through a rendezvous algorithm, other processors can look up the
 | |
| location of data they need. 
 | |
| <p>
 | |
| <!---------------------------------------------------------------------------->
 | |
| <a name="MemTools"><hr><b>Memory Management Tools</b></a>
 | |
| <p>
 | |
| Dynamic applications rely heavily on the ability to allocate and free memory
 | |
| as needed.  Memory leaks and invalid memory accesses are common to developing
 | |
| software.  Although many software development tools let users track memory
 | |
| bugs, these tools are often not available on state-of-the-art parallel
 | |
| computers.  
 | |
| <p>
 | |
| Zoltan's <a href="ug_html/ug_util_mem.html">memory management package</a> 
 | |
| provides simple in-application debugging
 | |
| tools that are beneficial on state-of-the-art computing platforms.  The
 | |
| package includes wrappers around malloc and free that record the location of
 | |
| all memory
 | |
| allocation operations.  Thus, tracking memory leaks is simplified, as 
 | |
| source-code locations of unfreed-memory allocations can be printed.
 | |
| Statistics about memory allocations and frees are also available.
 | |
| <p>
 | |
| <!---------------------------------------------------------------------------->
 | |
| 
 | |
| <!---------MAIN CONTENT AREA ENDS HERE---------><!-- CHANGE CONTACT + E-MAIL, NOTE "SUBJECT" IN E-MAIL CODE --></td>
 | |
| </tr>
 | |
| </table>
 | |
| 
 | |
| <hr width="100%">
 | |
| <table BORDER=0 WIDTH="100%" >
 | |
| <tr ALIGN=CENTER>
 | |
| <td VALIGN=TOP WIDTH="140">
 | |
| <table BORDER=0 WIDTH="140" >
 | |
| <tr>
 | |
| <td ALIGN=CENTER VALIGN=TOP WIDTH="120"></td>
 | |
| 
 | |
| <td WIDTH="20"></td>
 | |
| </tr>
 | |
| </table>
 | |
| </td>
 | |
| 
 | |
| <td ALIGN=CENTER VALIGN=TOP WIDTH="100%"></td>
 | |
| </tr>
 | |
| </table>
 | |
| <!--Image maps below-->
 | |
| <map name="shortMap">
 | |
| <area shape="rect" coords="2,2,108,14"href="https://www.sandia.gov/about/index.html"></area>
 | |
| <area shape="rect" coords="2,19,108,31"href="https://www.sandia.gov/mission/ste/index.html"></area>
 | |
| <area shape="rect" coords="2,36,108,48"href="https://www.sandia.gov/mission/index.html"></area>
 | |
| <area shape="rect" coords="2,53,108,65"href="https://www.sandia.gov/contact-us/index.html"></area>
 | |
| <area shape="rect" coords="2,70,108,82"href="https://www.sandia.gov/news/index.html"></area>
 | |
| <area shape="rect" coords="2,87,108,99"href="https://www.sandia.gov/search/index.html"></area>
 | |
| <area shape="rect" coords="2,104,108,116"href="https://www.sandia.gov/Main.html"></area>
 | |
| </map>
 | |
| <!----------------THIS IS A CHANGE AREA---------------->
 | |
| <!----NAME AND DATE OF LAST REVISION SHOULD BE HERE---->
 | |
| <!---------------END OF THIS CHANGE AREA--------------->
 | |
| </body>
 | |
| </html>
 | |
| 
 |