58 #include <Teuchos_CommHelpers.hpp> 63 #elif defined(__unix__) || \ 66 (defined(__APPLE__) && \ 69 # include <sys/resource.h> 70 # if defined(__APPLE__) && \ 72 # include <mach/mach.h> 73 # elif (defined(_AIX) || \ 74 defined(__TOS__AIX__)) || \ 75 (defined(__sun__) || \ 82 # elif defined(__linux__) || \ 85 defined(__gnu_linux__) 87 # endif // defined(__APPLE__) && ... 89 # error "Cannot define getPeakRSS( ) or getCurrentRSS( ) for an unknown OS." 90 #endif // defined(_WIN32) 115 if (0 ==
comm.getRank())
117 s <<
"Estimated memory usage across all processors:" << endl
118 <<
" Current Peak " << endl
119 <<
" ------------ ------------" << endl <<
" Min: ";
136 s << std::setw(9) << std::setfill(
' ');
139 else if (num < (1 << 20))
140 s << (static_cast<double>(num) / (1 << 10)) <<
" KB ";
141 else if (num < (1 << 30))
142 s << (static_cast<double>(num) / (1 << 20)) <<
" MB ";
144 s << (static_cast<double>(num) / (1 << 30)) <<
" GB ";
157 return current + peak;
171 PROCESS_MEMORY_COUNTERS info;
172 GetProcessMemoryInfo(GetCurrentProcess(), &info,
sizeof(info));
173 mem = (size_t)(info.PeakWorkingSetSize);
176 # elif (defined(_AIX) || \ 177 defined(__TOS__AIX__)) || \ 178 (defined(__sun__) || \ 181 (defined(__SVR4) || \ 183 struct psinfo psinfo;
185 if ((fd = open(
"/proc/self/psinfo", O_RDONLY)) == -1)
187 if (read(fd, &psinfo,
sizeof(psinfo)) !=
sizeof(psinfo))
193 mem = (size_t)(psinfo.pr_rssize * 1024L);
196 # elif defined(__unix__) || \ 199 (defined(__APPLE__) && \ 201 struct rusage rusage;
202 getrusage(RUSAGE_SELF, &rusage);
203 # if defined(__APPLE__) && \ 205 mem = (size_t)(rusage.ru_maxrss);
207 mem = (size_t)(rusage.ru_maxrss * 1024L);
208 # endif // defined(__APPLE__) && ... 213 # endif // defined(_WIN32) 228 PROCESS_MEMORY_COUNTERS info;
229 GetProcessMemoryInfo(GetCurrentProcess(), &info,
sizeof(info));
230 mem = (size_t)(info.WorkingSetSize);
233 # elif defined(__APPLE__) && \ 235 struct mach_task_basic_info info;
236 mach_msg_type_number_t infoCount = MACH_TASK_BASIC_INFO_COUNT;
237 if (task_info(mach_task_self(), MACH_TASK_BASIC_INFO,
238 (task_info_t)(&info), &infoCount) != KERN_SUCCESS)
240 mem = (size_t)(info.resident_size);
243 # elif defined(__linux__) || \ 244 defined(__linux) || \ 246 defined(__gnu_linux__) 249 if ((fp = fopen(
"/proc/self/statm",
"r")) == NULL)
251 if (fscanf(fp,
"%*s%ld", &rss) != 1)
257 mem = (size_t)(rss) * (size_t)(sysconf(_SC_PAGESIZE));
262 # endif // defined(_WIN32) 274 size_t min(0), max(0), tot(0);
The memory usage information.
MemUsage getCurrentRSS(const Teuchos::Comm< int > &comm)
MemUsage getMemoryUsage(const Teuchos::Comm< int > &comm)
Get memory usage in B.
TEUCHOS_DEPRECATED void reduceAll(const Comm< Ordinal > &comm, const EReductionType reductType, const Packet &send, Packet *globalReduct)
MemUsage getPeakRSS(const Teuchos::Comm< int > &comm)
Teuchos::RCP< const Teuchos::Comm< int > > comm
void pretty(std::ostream &s, size_t num)
void printMemoryUsage(std::ostream &s, const Teuchos::Comm< int > &comm)
Print memory usage to stream.
MemUsage reduceMemUsage(size_t &mem, const Teuchos::Comm< int > &comm, const MemUsageType &type)
Reduce the memory usage over all the processors.