|
Zoltan2
|
00001 // @HEADER 00002 // 00003 // *********************************************************************** 00004 // 00005 // Zoltan2: A package of combinatorial algorithms for scientific computing 00006 // Copyright 2012 Sandia Corporation 00007 // 00008 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, 00009 // the U.S. Government retains certain rights in this software. 00010 // 00011 // Redistribution and use in source and binary forms, with or without 00012 // modification, are permitted provided that the following conditions are 00013 // met: 00014 // 00015 // 1. Redistributions of source code must retain the above copyright 00016 // notice, this list of conditions and the following disclaimer. 00017 // 00018 // 2. Redistributions in binary form must reproduce the above copyright 00019 // notice, this list of conditions and the following disclaimer in the 00020 // documentation and/or other materials provided with the distribution. 00021 // 00022 // 3. Neither the name of the Corporation nor the names of the 00023 // contributors may be used to endorse or promote products derived from 00024 // this software without specific prior written permission. 00025 // 00026 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY 00027 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00028 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 00029 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE 00030 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00031 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 00032 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 00033 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 00034 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 00035 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00036 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00037 // 00038 // Questions? Contact Karen Devine (kddevin@sandia.gov) 00039 // Erik Boman (egboman@sandia.gov) 00040 // Siva Rajamanickam (srajama@sandia.gov) 00041 // 00042 // *********************************************************************** 00043 // 00044 // @HEADER 00045 // 00046 // Testing the TimerManager class. 00047 // TODO we only test that it doesn't crash. 00048 00049 #include <Zoltan2_TestHelpers.hpp> 00050 #include <Zoltan2_PartitioningProblem.hpp> 00051 #include <Zoltan2_BasicIdentifierAdapter.hpp> 00052 #include <Zoltan2_TimerManager.hpp> 00053 00054 #include <Teuchos_DefaultComm.hpp> 00055 00056 #ifdef _MSC_VER 00057 #define NOMINMAX 00058 #include <windows.h> 00059 #else 00060 #include <unistd.h> 00061 #endif 00062 00063 00064 using Zoltan2::TimerManager; 00065 using Zoltan2::MACRO_TIMERS; 00066 using Zoltan2::MICRO_TIMERS; 00067 using Zoltan2::BOTH_TIMERS; 00068 00069 typedef Zoltan2::BasicUserTypes<zscalar_t, zzgid_t, zlno_t, zgno_t> myTypes_t; 00070 typedef Zoltan2::BasicIdentifierAdapter<myTypes_t> inputAdapter_t; 00071 00072 static void sleep_wrap(unsigned int seconds) 00073 { 00074 #ifdef _MSC_VER 00075 Sleep(1000*seconds); 00076 #else 00077 sleep(seconds); 00078 #endif 00079 } 00080 00081 void goToSleep(const RCP<const Zoltan2::Environment> &env) 00082 { 00083 env->timerStart(MICRO_TIMERS, string("sleep for 5 seconds")); 00084 sleep_wrap(5); 00085 env->timerStop(MICRO_TIMERS, string("sleep for 5 seconds")); 00086 00087 env->timerStart(MICRO_TIMERS, string("sleep for 3 seconds (twice)")); 00088 sleep_wrap(3); 00089 env->timerStop(MICRO_TIMERS, string("sleep for 3 seconds (twice)")); 00090 00091 env->timerStart(MICRO_TIMERS, string("sleep for 2 seconds")); 00092 sleep_wrap(2); 00093 env->timerStop(MICRO_TIMERS, string("sleep for 2 seconds")); 00094 00095 env->timerStart(MICRO_TIMERS, string("sleep for 3 seconds (twice)")); 00096 sleep_wrap(3); 00097 env->timerStop(MICRO_TIMERS, string("sleep for 3 seconds (twice)")); 00098 } 00099 00100 00101 int main(int argc, char *argv[]) 00102 { 00103 Teuchos::GlobalMPISession session(&argc, &argv); 00104 Teuchos::RCP<const Teuchos::Comm<int> > comm = 00105 Teuchos::DefaultComm<int>::getComm(); 00106 00107 // Create a problem, requesting that Timing be enabled. 00108 00109 Teuchos::ParameterList pl("test list"); 00110 pl.set("timer_output_stream" , "std::cout"); 00111 pl.set("timer_type" , "both_timers"); 00112 std::vector<const zscalar_t * >weights; 00113 std::vector<int> strides; 00114 Array<zzgid_t> someIds(10,1); 00115 inputAdapter_t ia(10, someIds.getRawPtr(), weights, strides); 00116 00117 #ifdef HAVE_ZOLTAN2_MPI 00118 Zoltan2::PartitioningProblem<inputAdapter_t> problem(&ia, &pl, 00119 MPI_COMM_WORLD); 00120 #else 00121 Zoltan2::PartitioningProblem<inputAdapter_t> problem(&ia, &pl); 00122 #endif 00123 00124 // Use the timers through the environment. 00125 00126 const RCP<const Zoltan2::Environment> &env = problem.getEnvironment(); 00127 00128 if (comm->getRank() == 0) 00129 std::cout << "Sleeping..." << std::endl; 00130 00131 env->timerStart(MACRO_TIMERS, string("Do the sleep test")); 00132 goToSleep(env); 00133 env->timerStop(MACRO_TIMERS, string("Do the sleep test")); 00134 00135 comm->barrier(); 00136 00137 // Should show an error 00138 env->timerStop(MACRO_TIMERS, string("unstarted timer")); 00139 00140 problem.printTimers(); 00141 00142 if (comm->getRank() == 0) 00143 std::cout << "PASS" << std::endl; 00144 }
1.7.6.1