MueLu
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
MueLu_Memory.cpp
Go to the documentation of this file.
1
// @HEADER
2
//
3
// ***********************************************************************
4
//
5
// MueLu: A package for multigrid based preconditioning
6
// Copyright 2012 Sandia Corporation
7
//
8
// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9
// the U.S. Government retains certain rights in this software.
10
//
11
// Redistribution and use in source and binary forms, with or without
12
// modification, are permitted provided that the following conditions are
13
// met:
14
//
15
// 1. Redistributions of source code must retain the above copyright
16
// notice, this list of conditions and the following disclaimer.
17
//
18
// 2. Redistributions in binary form must reproduce the above copyright
19
// notice, this list of conditions and the following disclaimer in the
20
// documentation and/or other materials provided with the distribution.
21
//
22
// 3. Neither the name of the Corporation nor the names of the
23
// contributors may be used to endorse or promote products derived from
24
// this software without specific prior written permission.
25
//
26
// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37
//
38
// Questions? Contact
39
// Jonathan Hu (jhu@sandia.gov)
40
// Andrey Prokopenko (aprokop@sandia.gov)
41
// Ray Tuminaro (rstumin@sandia.gov)
42
//
43
// ***********************************************************************
44
//
45
// @HEADER
46
#include <sstream>
47
#include <fstream>
48
#include "
MueLu_Memory.hpp
"
49
50
#include <iostream>
// TODO: remove
51
#include <unistd.h>
52
#include <time.h>
53
#ifdef MUELU_USE_MALLINFO
54
#include <malloc.h>
55
#endif
56
57
//#define MUELU_USE_MALLINFO
58
59
namespace
MueLu
{
60
61
namespace
MemUtils
{
62
63
std::string
PrintMemoryUsage
() {
64
65
66
#ifdef MUELU_USE_MALLINFO
67
struct
mallinfo mem_stats = mallinfo();
68
double
memory = mem_stats.hblkhd + mem_stats.usmblks + mem_stats.uordblks;
69
70
char
memchar[128];
71
sprintf(memchar,
"%12.1f MB"
,memory/1048576.0);
72
std::string mem(memchar);
73
74
return
mem;
75
#else
76
std::ostringstream mem;
77
std::ifstream proc(
"/proc/self/status"
);
78
std::string s;
79
80
mem <<
PrintMemoryInfo
() <<
" "
;
81
while
(getline(proc, s), !proc.fail()) {
82
if
(s.substr(0, 6) ==
"VmSize"
) {
83
mem << s;
84
return
mem.str();
85
}
86
}
87
return
mem.str();
88
#endif
89
90
}
91
92
std::string
PrintMemoryInfo
() {
93
94
#ifdef MUELU_USE_MALLINFO
95
struct
mallinfo mem_stats = mallinfo();
96
double
memory = mem_stats.hblkhd + mem_stats.usmblks + mem_stats.uordblks;
97
98
char
memchar[128];
99
sprintf(memchar,
"%12.1f MB"
,memory/1048576.0);
100
std::string mem(memchar);
101
102
return
mem;
103
#else
104
std::ostringstream mem;
105
std::ifstream proc(
"/proc/meminfo"
);
106
std::string s;
107
while
(getline(proc, s), !proc.fail()) {
108
if
(s.substr(0, 7) ==
"MemFree"
) {
109
mem << s;
110
return
mem.str();
111
}
112
113
}
114
return
mem.str();
115
#endif
116
}
117
118
void
ReportTimeAndMemory
(Teuchos::Time
const
&timer,
Teuchos::Comm<int>
const
&Comm)
119
{
120
double
maxTime=0,minTime=0,avgTime=0;
121
double
localTime = timer.totalElapsedTime();
122
#ifdef HAVE_MPI
123
int
ntimers=1, root=0;
124
MPI_Reduce(&localTime,&maxTime,ntimers,MPI_DOUBLE,MPI_MAX,root,MPI_COMM_WORLD);
125
MPI_Reduce(&localTime,&minTime,ntimers,MPI_DOUBLE,MPI_MIN,root,MPI_COMM_WORLD);
126
MPI_Reduce(&localTime,&avgTime,ntimers,MPI_DOUBLE,MPI_SUM,root,MPI_COMM_WORLD);
127
#else
128
maxTime = localTime;
129
minTime = localTime;
130
avgTime = localTime;
131
#endif
132
avgTime /= Comm.getSize();
133
//std::cout << "(" << Comm.getRank() << ") " << localTime << std::endl;
134
if
(Comm.getRank()==0) {
135
std::cout <<
"&&&"
<< timer.name()
136
<<
" max="
<< maxTime <<
" min="
<< minTime <<
" avg="
<< avgTime << std::endl;
137
std::cout <<
"&&&"
<< timer.name() <<
" "
<<
MemUtils::PrintMemoryUsage
() << std::endl;
138
}
139
}
//ReportTimeAndMemory
140
141
}
//namespace MemUtils
142
143
}
//namespace MueLu
MueLu_Memory.hpp
Teuchos::Comm
Definition
MueLu_Memory.hpp:54
MueLu::MemUtils
Definition
MueLu_Memory.cpp:61
MueLu::MemUtils::PrintMemoryUsage
std::string PrintMemoryUsage()
Definition
MueLu_Memory.cpp:63
MueLu::MemUtils::ReportTimeAndMemory
void ReportTimeAndMemory(Teuchos::Time const &timer, Teuchos::Comm< int > const &Comm)
Definition
MueLu_Memory.cpp:118
MueLu::MemUtils::PrintMemoryInfo
std::string PrintMemoryInfo()
Definition
MueLu_Memory.cpp:92
MueLu
Namespace for MueLu classes and methods.
Definition
MueLu_BrickAggregationFactory_decl.hpp:78
src
Utils
MueLu_Memory.cpp
Generated by
1.17.0