Changeset 2427
- Timestamp:
- 11/22/22 12:43:52 (17 months ago)
- Location:
- XIOS3/branches/xios-3.0-beta
- Files:
-
- 6 added
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS3/branches/xios-3.0-beta/bld.cfg
r2417 r2427 53 53 bld::target xios_server.exe 54 54 bld::target generic_testcase.exe 55 bld::target test_ugrid.exe55 #bld::target test_ugrid.exe 56 56 #bld::target test_regular.exe 57 57 #bld::target test_xios2_cmip6.exe -
XIOS3/branches/xios-3.0-beta/src/client.cpp
r2335 r2427 18 18 #include "workflow_graph.hpp" 19 19 #include "release_static_allocation.hpp" 20 #include "mem_checker.hpp" 20 21 21 22 namespace xios … … 519 520 report(0)<< " Memory report : increasing it by a factor will increase performance, depending of the volume of data wrote in file at each time step of the file"<<endl ; 520 521 report(100)<<CTimer::getAllCumulatedTime()<<endl ; 522 report(100)<<CMemChecker::getAllCumulatedMem()<<endl ; 521 523 CWorkflowGraph::drawWorkFlowGraph_client(); 522 524 -
XIOS3/branches/xios-3.0-beta/src/cxios.cpp
r2335 r2427 54 54 bool CXios::checkSumRecv=false ; 55 55 bool CXios::checkSumSend=false ; 56 bool CXios::logMemory=false ; 56 57 57 58 CDaemonsManager* CXios::daemonsManager_=nullptr ; … … 115 116 checkSumSend = getin<bool>("checksum_send_fields", false); 116 117 checkSumRecv = getin<bool>("checksum_recv_fields", false); 118 119 logMemory = getin<bool>("log_memory", false); 117 120 118 121 globalComm=MPI_COMM_WORLD ; … … 149 152 CClient::openErrorStream(); 150 153 } 154 CMemChecker::logMem("CXios::initClientSide"); 151 155 } 152 156 CATCH … … 154 158 void CXios::clientFinalize(void) 155 159 { 160 CMemChecker::logMem("CXios::clientFinalize", true); 161 156 162 CClient::finalize() ; 157 163 … … 231 237 #endif 232 238 CMemChecker::get("xios").suspend() ; 233 report(0)<<CMemChecker::getAllCumulatedMem() ;234 239 CServer::closeInfoStream(); 235 240 } -
XIOS3/branches/xios-3.0-beta/src/cxios.hpp
r2335 r2427 68 68 static bool checkSumRecv; //!< For debugging, compute a checksum of fields received by the model through the XIOS client 69 69 70 static bool logMemory; //!< Activate memory monitoring for all XIOS process 71 70 72 static const string defaultPoolId ; 71 73 static const string defaultServerId ; -
XIOS3/branches/xios-3.0-beta/src/filter/model_to_client_source_filter.cpp
r2143 r2427 5 5 #include <limits> 6 6 #include "workflow_graph.hpp" 7 #include "mem_checker.hpp" 7 8 8 9 namespace xios … … 37 38 packet->data.resize(connector->getDstSize()) ; 38 39 connector->transfer(data, packet->data, nanValue) ; 40 41 CMemChecker::logMem( "CModelToClientSourceFilter::streamData" ); 39 42 40 43 if (hasMissingValue_) -
XIOS3/branches/xios-3.0-beta/src/filter/temporal_filter.cpp
r2195 r2427 3 3 #include "calendar_util.hpp" 4 4 #include "workflow_graph.hpp" 5 #include "mem_checker.hpp" 5 6 6 7 namespace xios … … 117 118 packet = data[0]; 118 119 120 CMemChecker::logMem( "CTemporalFilter::apply" ); 121 119 122 isFirstOperation = false; 120 123 graphCycleCompleted = true; -
XIOS3/branches/xios-3.0-beta/src/interface/c/iccalendar.cpp
r1761 r2427 4 4 #include "exception.hpp" 5 5 #include "timer.hpp" 6 #include "mem_checker.hpp" 6 7 #include "context.hpp" 7 8 #include "context_client.hpp" … … 12 13 TRY 13 14 { 15 CMemChecker::get("XIOS update calendar").resume(); 14 16 CTimer::get("XIOS").resume(); 15 17 CTimer::get("XIOS update calendar").resume(); … … 23 25 CTimer::get("XIOS update calendar").suspend(); 24 26 CTimer::get("XIOS").suspend(); 27 CMemChecker::get("XIOS update calendar").suspend(); 25 28 } 26 29 CATCH_DUMP_STACK -
XIOS3/branches/xios-3.0-beta/src/interface/c/icdata.cpp
r2266 r2427 25 25 #include "mpi.hpp" 26 26 #include "timer.hpp" 27 #include "mem_checker.hpp" 27 28 #include "array_new.hpp" 28 29 … … 119 120 TRY 120 121 { 122 CMemChecker::get("XIOS close definition").resume(); 123 121 124 CTimer::get("XIOS").resume(); 122 125 CTimer::get("XIOS close definition").resume(); … … 125 128 CTimer::get("XIOS close definition").suspend(); 126 129 CTimer::get("XIOS").suspend(); 130 131 CMemChecker::get("XIOS close definition").suspend(); 127 132 } 128 133 CATCH_DUMP_STACK … … 419 424 TRY 420 425 { 426 CMemChecker::get("XIOS send field").resume(); 421 427 CTimer::get("XIOS").resume(); 422 428 CTimer::get("XIOS send field").resume(); … … 428 434 CTimer::get("XIOS send field").suspend(); 429 435 CTimer::get("XIOS").suspend(); 436 CMemChecker::get("XIOS send field").suspend(); 430 437 } 431 438 CATCH_DUMP_STACK … … 446 453 TRY 447 454 { 455 CMemChecker::get("XIOS send field").resume(); 448 456 CTimer::get("XIOS").resume(); 449 457 CTimer::get("XIOS send field").resume(); … … 458 466 CTimer::get("XIOS send field").suspend(); 459 467 CTimer::get("XIOS").suspend(); 468 CMemChecker::get("XIOS send field").suspend(); 460 469 } 461 470 CATCH_DUMP_STACK … … 476 485 TRY 477 486 { 487 CMemChecker::get("XIOS send field").resume(); 478 488 CTimer::get("XIOS").resume(); 479 489 CTimer::get("XIOS send field").resume(); … … 488 498 CTimer::get("XIOS send field").suspend(); 489 499 CTimer::get("XIOS").suspend(); 500 CMemChecker::get("XIOS send field").suspend(); 490 501 } 491 502 CATCH_DUMP_STACK … … 508 519 TRY 509 520 { 521 CMemChecker::get("XIOS send field").resume(); 510 522 CTimer::get("XIOS").resume(); 511 523 CTimer::get("XIOS send field").resume(); … … 520 532 CTimer::get("XIOS send field").suspend(); 521 533 CTimer::get("XIOS").suspend(); 534 CMemChecker::get("XIOS send field").suspend(); 522 535 } 523 536 CATCH_DUMP_STACK … … 542 555 TRY 543 556 { 557 CMemChecker::get("XIOS send field").resume(); 544 558 CTimer::get("XIOS").resume(); 545 559 CTimer::get("XIOS send field").resume(); … … 554 568 CTimer::get("XIOS send field").suspend(); 555 569 CTimer::get("XIOS").suspend(); 570 CMemChecker::get("XIOS send field").suspend(); 556 571 } 557 572 CATCH_DUMP_STACK … … 578 593 TRY 579 594 { 595 CMemChecker::get("XIOS send field").resume(); 580 596 CTimer::get("XIOS").resume(); 581 597 CTimer::get("XIOS send field").resume(); … … 590 606 CTimer::get("XIOS send field").suspend(); 591 607 CTimer::get("XIOS").suspend(); 608 CMemChecker::get("XIOS send field").suspend(); 592 609 } 593 610 CATCH_DUMP_STACK … … 613 630 { 614 631 632 CMemChecker::get("XIOS send field").resume(); 615 633 CTimer::get("XIOS").resume(); 616 634 CTimer::get("XIOS send field").resume(); … … 625 643 CTimer::get("XIOS send field").suspend(); 626 644 CTimer::get("XIOS").suspend(); 645 CMemChecker::get("XIOS send field").suspend(); 627 646 } 628 647 CATCH_DUMP_STACK … … 649 668 TRY 650 669 { 670 CMemChecker::get("XIOS send field").resume(); 651 671 CTimer::get("XIOS").resume(); 652 672 CTimer::get("XIOS send field").resume(); … … 661 681 CTimer::get("XIOS send field").suspend(); 662 682 CTimer::get("XIOS").suspend(); 683 CMemChecker::get("XIOS send field").suspend(); 663 684 } 664 685 CATCH_DUMP_STACK … … 683 704 TRY 684 705 { 706 CMemChecker::get("XIOS send field").resume(); 685 707 CTimer::get("XIOS").resume(); 686 708 CTimer::get("XIOS send field").resume(); … … 695 717 CTimer::get("XIOS send field").suspend(); 696 718 CTimer::get("XIOS").suspend(); 719 CMemChecker::get("XIOS send field").suspend(); 697 720 } 698 721 CATCH_DUMP_STACK … … 712 735 TRY 713 736 { 737 CMemChecker::get("XIOS send field").resume(); 714 738 CTimer::get("XIOS").resume(); 715 739 CTimer::get("XIOS send field").resume(); … … 726 750 CTimer::get("XIOS send field").suspend(); 727 751 CTimer::get("XIOS").suspend(); 752 CMemChecker::get("XIOS send field").suspend(); 728 753 } 729 754 CATCH_DUMP_STACK … … 742 767 TRY 743 768 { 769 CMemChecker::get("XIOS send field").resume(); 744 770 CTimer::get("XIOS").resume(); 745 771 CTimer::get("XIOS send field").resume(); … … 756 782 CTimer::get("XIOS send field").suspend(); 757 783 CTimer::get("XIOS").suspend(); 784 CMemChecker::get("XIOS send field").suspend(); 758 785 } 759 786 CATCH_DUMP_STACK … … 774 801 TRY 775 802 { 803 CMemChecker::get("XIOS send field").resume(); 776 804 CTimer::get("XIOS").resume(); 777 805 CTimer::get("XIOS send field").resume(); … … 788 816 CTimer::get("XIOS send field").suspend(); 789 817 CTimer::get("XIOS").suspend(); 818 CMemChecker::get("XIOS send field").suspend(); 790 819 } 791 820 CATCH_DUMP_STACK … … 807 836 TRY 808 837 { 838 CMemChecker::get("XIOS send field").resume(); 809 839 CTimer::get("XIOS").resume(); 810 840 CTimer::get("XIOS send field").resume(); … … 821 851 CTimer::get("XIOS send field").suspend(); 822 852 CTimer::get("XIOS").suspend(); 853 CMemChecker::get("XIOS send field").suspend(); 823 854 } 824 855 CATCH_DUMP_STACK … … 843 874 TRY 844 875 { 876 CMemChecker::get("XIOS send field").resume(); 845 877 CTimer::get("XIOS").resume(); 846 878 CTimer::get("XIOS send field").resume(); … … 857 889 CTimer::get("XIOS send field").suspend(); 858 890 CTimer::get("XIOS").suspend(); 891 CMemChecker::get("XIOS send field").suspend(); 859 892 } 860 893 CATCH_DUMP_STACK … … 878 911 TRY 879 912 { 913 CMemChecker::get("XIOS send field").resume(); 880 914 CTimer::get("XIOS").resume(); 881 915 CTimer::get("XIOS send field").resume(); … … 892 926 CTimer::get("XIOS send field").suspend(); 893 927 CTimer::get("XIOS").suspend(); 928 CMemChecker::get("XIOS send field").suspend(); 894 929 } 895 930 CATCH_DUMP_STACK … … 913 948 TRY 914 949 { 950 CMemChecker::get("XIOS send field").resume(); 915 951 CTimer::get("XIOS").resume(); 916 952 CTimer::get("XIOS send field").resume(); … … 927 963 CTimer::get("XIOS send field").suspend(); 928 964 CTimer::get("XIOS").suspend(); 965 CMemChecker::get("XIOS send field").suspend(); 929 966 } 930 967 CATCH_DUMP_STACK … … 948 985 TRY 949 986 { 987 CMemChecker::get("XIOS send field").resume(); 950 988 CTimer::get("XIOS").resume(); 951 989 CTimer::get("XIOS recv field").resume(); … … 960 998 CTimer::get("XIOS recv field").suspend(); 961 999 CTimer::get("XIOS").suspend(); 1000 CMemChecker::get("XIOS send field").suspend(); 962 1001 } 963 1002 CATCH_DUMP_STACK … … 976 1015 TRY 977 1016 { 1017 CMemChecker::get("XIOS send field").resume(); 978 1018 CTimer::get("XIOS").resume(); 979 1019 CTimer::get("XIOS recv field").resume(); … … 988 1028 CTimer::get("XIOS recv field").suspend(); 989 1029 CTimer::get("XIOS").suspend(); 1030 CMemChecker::get("XIOS send field").suspend(); 990 1031 } 991 1032 CATCH_DUMP_STACK … … 1003 1044 TRY 1004 1045 { 1046 CMemChecker::get("XIOS send field").resume(); 1005 1047 CTimer::get("XIOS").resume(); 1006 1048 CTimer::get("XIOS recv field").resume(); … … 1015 1057 CTimer::get("XIOS recv field").suspend(); 1016 1058 CTimer::get("XIOS").suspend(); 1059 CMemChecker::get("XIOS send field").suspend(); 1017 1060 } 1018 1061 CATCH_DUMP_STACK … … 1031 1074 TRY 1032 1075 { 1076 CMemChecker::get("XIOS send field").resume(); 1033 1077 CTimer::get("XIOS").resume(); 1034 1078 CTimer::get("XIOS recv field").resume(); … … 1043 1087 CTimer::get("XIOS recv field").suspend(); 1044 1088 CTimer::get("XIOS").suspend(); 1089 CMemChecker::get("XIOS send field").suspend(); 1045 1090 } 1046 1091 CATCH_DUMP_STACK … … 1061 1106 TRY 1062 1107 { 1108 CMemChecker::get("XIOS send field").resume(); 1063 1109 CTimer::get("XIOS").resume(); 1064 1110 CTimer::get("XIOS recv field").resume(); … … 1073 1119 CTimer::get("XIOS recv field").suspend(); 1074 1120 CTimer::get("XIOS").suspend(); 1121 CMemChecker::get("XIOS send field").suspend(); 1075 1122 } 1076 1123 CATCH_DUMP_STACK … … 1092 1139 TRY 1093 1140 { 1141 CMemChecker::get("XIOS send field").resume(); 1094 1142 CTimer::get("XIOS").resume(); 1095 1143 CTimer::get("XIOS recv field").resume(); … … 1104 1152 CTimer::get("XIOS recv field").suspend(); 1105 1153 CTimer::get("XIOS").suspend(); 1154 CMemChecker::get("XIOS send field").suspend(); 1106 1155 } 1107 1156 CATCH_DUMP_STACK … … 1123 1172 TRY 1124 1173 { 1174 CMemChecker::get("XIOS send field").resume(); 1125 1175 CTimer::get("XIOS").resume(); 1126 1176 CTimer::get("XIOS recv field").resume(); … … 1135 1185 CTimer::get("XIOS recv field").suspend(); 1136 1186 CTimer::get("XIOS").suspend(); 1187 CMemChecker::get("XIOS send field").suspend(); 1137 1188 } 1138 1189 CATCH_DUMP_STACK … … 1155 1206 TRY 1156 1207 { 1208 CMemChecker::get("XIOS send field").resume(); 1157 1209 CTimer::get("XIOS").resume(); 1158 1210 CTimer::get("XIOS recv field").resume(); … … 1167 1219 CTimer::get("XIOS recv field").suspend(); 1168 1220 CTimer::get("XIOS").suspend(); 1221 CMemChecker::get("XIOS send field").suspend(); 1169 1222 } 1170 1223 CATCH_DUMP_STACK … … 1190 1243 TRY 1191 1244 { 1245 CMemChecker::get("XIOS send field").resume(); 1192 1246 CTimer::get("XIOS").resume(); 1193 1247 CTimer::get("XIOS recv field").resume(); … … 1204 1258 CTimer::get("XIOS recv field").suspend(); 1205 1259 CTimer::get("XIOS").suspend(); 1260 CMemChecker::get("XIOS send field").suspend(); 1206 1261 } 1207 1262 CATCH_DUMP_STACK … … 1221 1276 TRY 1222 1277 { 1278 CMemChecker::get("XIOS send field").resume(); 1223 1279 CTimer::get("XIOS").resume(); 1224 1280 CTimer::get("XIOS recv field").resume(); … … 1235 1291 CTimer::get("XIOS recv field").suspend(); 1236 1292 CTimer::get("XIOS").suspend(); 1293 CMemChecker::get("XIOS send field").suspend(); 1237 1294 } 1238 1295 CATCH_DUMP_STACK … … 1253 1310 TRY 1254 1311 { 1312 CMemChecker::get("XIOS send field").resume(); 1255 1313 CTimer::get("XIOS").resume(); 1256 1314 CTimer::get("XIOS recv field").resume(); … … 1267 1325 CTimer::get("XIOS recv field").suspend(); 1268 1326 CTimer::get("XIOS").suspend(); 1327 CMemChecker::get("XIOS send field").suspend(); 1269 1328 } 1270 1329 CATCH_DUMP_STACK … … 1284 1343 TRY 1285 1344 { 1345 CMemChecker::get("XIOS send field").resume(); 1286 1346 CTimer::get("XIOS").resume(); 1287 1347 CTimer::get("XIOS recv field").resume(); … … 1298 1358 CTimer::get("XIOS recv field").suspend(); 1299 1359 CTimer::get("XIOS").suspend(); 1360 CMemChecker::get("XIOS send field").suspend(); 1300 1361 } 1301 1362 CATCH_DUMP_STACK … … 1316 1377 TRY 1317 1378 { 1379 CMemChecker::get("XIOS send field").resume(); 1318 1380 CTimer::get("XIOS").resume(); 1319 1381 CTimer::get("XIOS recv field").resume(); … … 1330 1392 CTimer::get("XIOS recv field").suspend(); 1331 1393 CTimer::get("XIOS").suspend(); 1394 CMemChecker::get("XIOS send field").suspend(); 1332 1395 } 1333 1396 CATCH_DUMP_STACK … … 1351 1414 TRY 1352 1415 { 1416 CMemChecker::get("XIOS send field").resume(); 1353 1417 CTimer::get("XIOS").resume(); 1354 1418 CTimer::get("XIOS recv field").resume(); … … 1365 1429 CTimer::get("XIOS recv field").suspend(); 1366 1430 CTimer::get("XIOS").suspend(); 1431 CMemChecker::get("XIOS send field").suspend(); 1367 1432 } 1368 1433 CATCH_DUMP_STACK … … 1385 1450 TRY 1386 1451 { 1452 CMemChecker::get("XIOS send field").resume(); 1387 1453 CTimer::get("XIOS").resume(); 1388 1454 CTimer::get("XIOS recv field").resume(); … … 1399 1465 CTimer::get("XIOS recv field").suspend(); 1400 1466 CTimer::get("XIOS").suspend(); 1467 CMemChecker::get("XIOS send field").suspend(); 1401 1468 } 1402 1469 CATCH_DUMP_STACK … … 1421 1488 TRY 1422 1489 { 1490 CMemChecker::get("XIOS send field").resume(); 1423 1491 CTimer::get("XIOS").resume(); 1424 1492 CTimer::get("XIOS recv field").resume(); … … 1435 1503 CTimer::get("XIOS recv field").suspend(); 1436 1504 CTimer::get("XIOS").suspend(); 1505 CMemChecker::get("XIOS send field").suspend(); 1437 1506 } 1438 1507 CATCH_DUMP_STACK -
XIOS3/branches/xios-3.0-beta/src/interface/fortran/ixios.F90
r2338 r2427 38 38 ASSIGNMENT(=) 39 39 USE itimer, ONLY : xios(timer_resume), xios(timer_suspend), xios(timer_reset), xios(timer_get_time) 40 USE imem_checker, ONLY : xios(mem_checker_get), xios(mem_checker_log) 40 41 41 42 USE ifield, ONLY : txios(field), txios(fieldgroup), xios(is_valid_field), xios(is_valid_fieldgroup) -
XIOS3/branches/xios-3.0-beta/src/io/netCdfInterface.cpp
r1957 r2427 10 10 #include "netCdfInterface.hpp" 11 11 #include "netCdfException.hpp" 12 #include "mem_checker.hpp" 12 13 13 14 namespace xios … … 22 23 int CNetCdfInterface::create(const StdString& fileName, int cMode, int& ncId) 23 24 { 25 CMemChecker::get("NetCDF create").resume(); 24 26 int status = nc_create(fileName.c_str(), cMode, &ncId); 25 27 if (NC_NOERR != status) … … 34 36 throw CNetCdfException(e); 35 37 } 38 CMemChecker::get("NetCDF create").suspend(); 36 39 37 40 return status; … … 49 52 int CNetCdfInterface::createPar(const StdString& fileName, int cMode, MPI_Comm comm, MPI_Info info, int& ncId) 50 53 { 54 CMemChecker::get("NetCDF create").resume(); 51 55 int status = xios::nc_create_par(fileName.c_str(), cMode, comm, info, &ncId); 52 56 if (NC_NOERR != status) … … 61 65 throw CNetCdfException(e); 62 66 } 67 CMemChecker::get("NetCDF create").suspend(); 63 68 64 69 return status; … … 74 79 int CNetCdfInterface::open(const StdString& fileName, int oMode, int& ncId) 75 80 { 81 CMemChecker::get("NetCDF open").resume(); 76 82 int status = nc_open(fileName.c_str(), oMode, &ncId); 77 83 if (NC_NOERR != status) … … 86 92 throw CNetCdfException(e); 87 93 } 94 CMemChecker::get("NetCDF open").suspend(); 88 95 89 96 return status; … … 102 109 int CNetCdfInterface::openPar(const StdString& fileName, int oMode, MPI_Comm comm, MPI_Info info, int& ncId) 103 110 { 111 CMemChecker::get("NetCDF open").resume(); 104 112 int status = xios::nc_open_par(fileName.c_str(), oMode, comm, info, &ncId); 105 113 if (NC_NOERR != status) … … 114 122 throw CNetCdfException(e); 115 123 } 124 CMemChecker::get("NetCDF open").suspend(); 116 125 117 126 return status; … … 125 134 int CNetCdfInterface::close(int ncId) 126 135 { 136 CMemChecker::get("NetCDF close").resume(); 127 137 int status = nc_close(ncId); 128 138 if (NC_NOERR != status) … … 136 146 throw CNetCdfException(e); 137 147 } 148 CMemChecker::get("NetCDF close").suspend(); 138 149 139 150 return status; … … 147 158 int CNetCdfInterface::reDef(int ncId) 148 159 { 160 CMemChecker::get("NetCDF other").resume(); 149 161 int status = nc_redef(ncId); 150 162 if (NC_NOERR != status) … … 158 170 throw CNetCdfException(e); 159 171 } 172 CMemChecker::get("NetCDF other").suspend(); 160 173 161 174 return status; … … 169 182 int CNetCdfInterface::endDef(int ncId) 170 183 { 184 CMemChecker::get("NetCDF other").resume(); 171 185 int status = nc_enddef(ncId); 172 186 if (NC_NOERR != status) … … 181 195 throw CNetCdfException(e); 182 196 } 197 CMemChecker::get("NetCDF other").suspend(); 183 198 184 199 return status; … … 773 788 int CNetCdfInterface::setFill(int ncid, bool fill) 774 789 { 790 CMemChecker::get("NetCDF other").resume(); 775 791 int old_fill_mode; 776 792 int status = nc_set_fill(ncid, fill ? NC_FILL: NC_NOFILL, &old_fill_mode); … … 786 802 throw CNetCdfException(e); 787 803 } 804 CMemChecker::get("NetCDF other").suspend(); 788 805 789 806 return status; … … 801 818 int CNetCdfInterface::defVarFill(int ncid, int varId, int noFill, void* fillValue) 802 819 { 820 CMemChecker::get("NetCDF other").resume(); 803 821 int status = nc_def_var_fill(ncid, varId, noFill, fillValue); 804 822 if (NC_NOERR != status) … … 814 832 throw CNetCdfException(e); 815 833 } 834 CMemChecker::get("NetCDF other").suspend(); 816 835 817 836 return status; … … 829 848 int CNetCdfInterface::varParAccess(int ncid, int varId, int access) 830 849 { 850 CMemChecker::get("NetCDF other").resume(); 831 851 int status = nc_var_par_access(ncid, varId, access); 832 852 if (NC_NOERR != status) … … 841 861 throw CNetCdfException(e); 842 862 } 863 CMemChecker::get("NetCDF other").suspend(); 843 864 844 865 return status; … … 852 873 int CNetCdfInterface::sync(int ncid) 853 874 { 875 CMemChecker::get("NetCDF other").resume(); 854 876 int status = nc_sync(ncid); 855 877 if (NC_NOERR != status) … … 864 886 throw CNetCdfException(e); 865 887 } 888 CMemChecker::get("NetCDF other").suspend(); 866 889 867 890 return status; -
XIOS3/branches/xios-3.0-beta/src/io/netCdfInterface_impl.hpp
r1158 r2427 13 13 #include "netCdfInterface.hpp" 14 14 #include "netCdfException.hpp" 15 #include "mem_checker.hpp" 15 16 16 17 namespace xios … … 28 29 int CNetCdfInterface::getAttType(int ncid, int varId, const StdString& attrName, T* data) 29 30 { 31 CMemChecker::get("NetCDF get/put").resume(); 30 32 int status = ncGetAttType(ncid, varId, attrName.c_str(), data); 31 33 if (NC_NOERR != status) … … 39 41 throw CNetCdfException(sstr.str()); 40 42 } 43 CMemChecker::get("NetCDF get/put").suspend(); 41 44 42 45 return status; … … 57 60 StdSize numVal, const T* data) 58 61 { 62 CMemChecker::get("NetCDF get/put").resume(); 59 63 int status = ncPutAttType(ncid, varId, attrName.c_str(), numVal, data); 60 64 if (NC_NOERR != status) … … 69 73 throw CNetCdfException(sstr.str()); 70 74 } 75 CMemChecker::get("NetCDF get/put").suspend(); 71 76 72 77 return status; … … 85 90 int CNetCdfInterface::getVaraType(int ncid, int varId, const StdSize* start, const StdSize* count, T* data) 86 91 { 92 CMemChecker::get("NetCDF get/put").resume(); 87 93 int status = ncGetVaraType(ncid, varId, start, count, data); 88 94 if (NC_NOERR != status) … … 96 102 throw CNetCdfException(sstr.str()); 97 103 } 104 CMemChecker::get("NetCDF get/put").suspend(); 98 105 99 106 return status; … … 112 119 int CNetCdfInterface::putVaraType(int ncid, int varId, const StdSize* start, const StdSize* count, const T* data) 113 120 { 121 CMemChecker::get("NetCDF get/put").resume(); 114 122 int status = ncPutVaraType(ncid, varId, start, count, data); 115 123 if (NC_NOERR != status) … … 123 131 throw CNetCdfException(sstr.str()); 124 132 } 133 CMemChecker::get("NetCDF get/put").suspend(); 125 134 126 135 return status; -
XIOS3/branches/xios-3.0-beta/src/mem_checker.cpp
r2235 r2427 1 1 #include "mem_checker.hpp" 2 #include "cxios.hpp" 2 3 #include "mpi.hpp" 3 4 #include <string> … … 5 6 #include <iostream> 6 7 #include <sstream> 7 #include <fstream> 8 9 #include <fcntl.h> 10 #include <iomanip> 11 #include <unistd.h> 12 #include <cstring> 8 13 9 14 namespace xios … … 13 18 bool CMemChecker::enabled_=true; 14 19 bool CMemChecker::first_=true; 15 16 CMemChecker::CMemChecker(const std::string& name) : name_(name) 20 double CMemChecker::vsize_init_=0; 21 double CMemChecker::rss_init_=0; 22 double CMemChecker::vmhwm_init_=0; 23 double CMemChecker::time_init_=0; 24 std::ofstream CMemChecker::fout_; 25 int CMemChecker::flush_counter_=1; 26 27 CMemChecker::CMemChecker(const std::string& name) : name_(name) 17 28 { 18 29 if (first_) check() ; … … 26 37 first_=false ; 27 38 } 28 double CMemChecker::getMem(void) 29 { 30 if (first_) check() ; 31 if (!enabled_) return 0; 39 40 // Return vector of memories amount : 41 // - vector[0] : virtual memory (vsize) from /proc/self/stat 42 // - vector[1] : resident set size (rss) from /proc/self/stat 43 std::vector<double> CMemChecker::getMem(void) 44 { 45 std::vector<double> memories(0); 46 memories.clear(); 47 48 if (first_) check() ; 49 if (!enabled_) return memories; 32 50 std::ifstream statStream("/proc/self/stat",std::ios_base::in); 33 51 std::string dummy ; … … 35 53 unsigned long vsize; 36 54 statStream>>vsize ; 37 return vsize ; 38 } 55 memories.push_back(vsize); 56 unsigned long rss; 57 statStream>>rss ; 58 memories.push_back(rss*4096); 59 return memories ; 60 } 61 62 // Return vector of memories amount, register values (see _init) as first call as reference : 63 // - vector[0] : virtual memory (vsize) from /proc/self/stat 64 // - vector[1] : resident set size (rss) from /proc/self/stat 65 // - vector[2] : Peak resident set size (VmHWM) from /proc/self/status 66 std::vector<double> CMemChecker::getMemories(void) 67 { 68 std::vector<double> memories; 69 70 if (first_) check() ; 71 if (!enabled_) return memories; 72 std::ifstream statStream("/proc/self/stat",std::ios_base::in); 73 std::string dummy ; 74 for(int i=1;i<=22;i++) statStream>>dummy ; 75 76 // 1 - Virtual 77 unsigned long vsize; 78 statStream>>vsize ; 79 if (vsize_init_==0) { 80 vsize_init_ = vsize; 81 time_init_=MPI_Wtime(); 82 } 83 vsize -= vsize_init_; 84 memories.push_back(vsize); 85 86 // 2 - RSS 87 unsigned long rss; 88 statStream>>rss ; 89 if (rss_init_==0) { 90 rss_init_ = rss; 91 } 92 rss -= rss_init_; 93 rss *= 4096; //getconf("PAGE_SIZE"); 94 memories.push_back(rss); 95 96 // 3 - Peak 97 char sbuf[1024]; 98 std::ifstream file( "/proc/self/status" ); 99 if( file.fail() ) { 100 return memories; 101 } 102 int fd = open( "/proc/self/status", O_RDONLY, 0 ); 103 int num_read=read( fd, sbuf, ( sizeof sbuf )-1 ); 104 close( fd ); 105 if( !num_read ) { 106 return memories; 107 } 108 // Peak resident set size 109 char *S=strstr( sbuf, "VmHWM:" )+6; 110 double vmhwm = ( int )atoi( S ); 111 if (vmhwm_init_==0) { 112 vmhwm_init_ = vmhwm; 113 } 114 vmhwm -= vmhwm_init_; 115 memories.push_back(vmhwm); 116 117 return memories; 118 } 119 120 void CMemChecker::logMem( std::string id, bool finalizeLog ) 121 { 122 if ( !CXios::logMemory ) return ; 123 124 int rk = 0; 125 MPI_Comm_rank( MPI_COMM_WORLD, &rk ); 126 std::string logName("xios_memory_"+std::to_string(rk)+".csv"); 127 vector<double> mem = getMemories(); 128 if (!mem[0]) { 129 fout_.open( logName ); 130 fout_ << "time,event,vsize,rss,VmHWM" << std::endl; 131 } 132 133 fout_.precision(4); 134 // Time format : YYYY-MM-DD HH:MM:SS.XXX -> seconds * 1000. 135 fout_ << (MPI_Wtime()-time_init_) << "," << id 136 << "," << mem[0]/1024./1024. 137 << "," << mem[1]/1024./1024. 138 << "," << mem[2]/1024. 139 << std::endl; 140 141 if ((MPI_Wtime()-time_init_)>flush_counter_*600.) 142 { 143 fout_.flush(); 144 flush_counter_++; 145 } 146 147 if (finalizeLog) 148 { 149 fout_.close(); 150 } 151 } 152 39 153 40 154 void CMemChecker::suspend(void) … … 42 156 if (first_) check() ; 43 157 if (!enabled_) return ; 44 if (!suspended_) cumulatedMem_ += getMem() - lastMem_; 158 if (!suspended_) 159 { 160 vector<double> mem = getMem(); 161 cumulatedMem_.resize( mem.size() ); 162 for (int i=0;i<mem.size() ; i++) 163 { 164 cumulatedMem_[i] += mem[i] - lastMem_[i]; 165 } 166 } 45 167 suspended_ = true; 46 168 } … … 50 172 if (first_) check() ; 51 173 if (!enabled_) return ; 52 if (suspended_) lastMem_ = getMem(); 174 if (suspended_) 175 { 176 vector<double> mem = getMem(); 177 lastMem_.resize( mem.size() ); 178 for (int i=0;i<mem.size() ; i++) 179 { 180 lastMem_[i] = mem[i]; 181 } 182 } 53 183 suspended_ = false; 54 184 } 55 185 56 186 void CMemChecker::reset(void) 57 187 { 58 188 if (first_) check() ; 59 189 if (!enabled_) return ; 60 cumulatedMem_ = 0.;190 cumulatedMem_.clear(); 61 191 suspended_ = true; 62 192 } 63 193 64 double CMemChecker::getCumulatedMem(void) 65 { 66 if (first_) check() ; 67 if (!enabled_) return 0; 194 std::vector<double> CMemChecker::getCumulatedMem(void) 195 { 196 std::vector<double> memories; 197 memories.clear(); 198 if (first_) check() ; 199 if (!enabled_) return memories; 68 200 return cumulatedMem_; 69 201 } … … 93 225 for(std::map<std::string,CMemChecker>::iterator it=allMemChecker_.begin();it!=allMemChecker_.end();++it) 94 226 { 95 strOut<<"MemChecker : "<<it->first<<" --> consumed memory : " ; 96 double mem=it->second.getCumulatedMem() ; 97 if (mem>=Tb) strOut<< mem / Tb<<" Tb"<<std::endl ; 98 else if (mem>=Gb) strOut<< mem / Gb<<" Gb"<<std::endl ; 99 else if (mem>=Mb) strOut<< mem / Mb<<" Mb"<<std::endl ; 100 else if (mem>=Kb) strOut<< mem / Kb<<" Kb"<<std::endl ; 101 else strOut<< mem <<" bytes"<<std::endl ; 227 vector<double> mem=it->second.getCumulatedMem() ; 228 if (mem.size()>0) 229 { 230 strOut<<"MemChecker : "<<it->first<<" --> consumed memory : " ; 231 if ((fabs(mem[0])>=Tb)||(fabs(mem[1])>=Tb)) strOut<< mem[0] / Tb<<" Tb - "<<mem[1] / Tb<<" Tb"<<std::endl ; 232 else if ((fabs(mem[0])>=Gb)||(fabs(mem[1])>=Gb)) strOut<< mem[0] / Gb<<" Gb - "<<mem[1] / Gb<<" Gb"<<std::endl ; 233 else if ((fabs(mem[0])>=Mb)||(fabs(mem[1])>=Mb)) strOut<< mem[0] / Mb<<" Mb - "<<mem[1] / Mb<<" Mb"<<std::endl ; 234 else if ((fabs(mem[0])>=Kb)||(fabs(mem[1])>=Kb)) strOut<< mem[0] / Kb<<" Kb - "<<mem[1] / Kb<<" Kb"<<std::endl ; 235 else strOut<< mem[0] <<" bytes - "<<mem[1] <<" bytes"<<std::endl ; 236 } 102 237 } 103 238 return strOut.str() ; -
XIOS3/branches/xios-3.0-beta/src/mem_checker.hpp
r2274 r2427 4 4 #include <string> 5 5 #include <map> 6 #include <fstream> 7 #include <vector> 6 8 7 9 namespace xios … … 14 16 void resume(void); 15 17 void reset(void); 16 double getCumulatedMem(void); 17 static double getMem(void); 18 std::vector<double> getCumulatedMem(void); 19 static std::vector<double> getMem(void); 20 static std::vector<double> getMemories(void); 21 static void logMem( std::string id, bool finalizeLog = false ); 18 22 static CMemChecker& get(std::string name); 19 23 static std::string getAllCumulatedMem(void) ; … … 23 27 private: 24 28 static void check(void) ; 25 doublecumulatedMem_;26 doublelastMem_;29 std::vector<double> cumulatedMem_; 30 std::vector<double> lastMem_; 27 31 bool suspended_; 28 32 std::string name_; … … 32 36 static bool first_ ; 33 37 static bool enabled_ ; 38 39 static double vsize_init_; 40 static double rss_init_; 41 static double vmhwm_init_; 42 static double time_init_; 43 static std::ofstream fout_; 44 static int flush_counter_; 34 45 }; 35 46 } -
XIOS3/branches/xios-3.0-beta/src/node/context.cpp
r2423 r2427 17 17 #include "xios_spl.hpp" 18 18 #include "timer.hpp" 19 #include "mem_checker.hpp" 19 20 #include "memtrack.hpp" 20 21 #include <limits> … … 873 874 TRY 874 875 { 876 CMemChecker::logMem( "CContext::closeDefinition" ); 877 875 878 CTimer::get("Context : close definition").resume() ; 876 879 … … 1154 1157 1155 1158 CTimer::get("Context : close definition").suspend() ; 1159 CMemChecker::logMem( "CContext::closeDefinition_END" ); 1156 1160 } 1157 1161 CATCH_DUMP_ATTR … … 2102 2106 garbageCollector.invalidate(calendar->getCurrentDate()); 2103 2107 } 2108 CMemChecker::logMem( "CContext::updateCalendar_"+std::to_string(step) ); 2104 2109 } 2105 2110 else if (prevStep == step) -
XIOS3/branches/xios-3.0-beta/src/server.cpp
r2399 r2427 13 13 #include "tracer.hpp" 14 14 #include "timer.hpp" 15 #include "mem_checker.hpp" 15 16 #include "event_scheduler.hpp" 16 17 #include "string_tools.hpp" … … 159 160 CServer::openInfoStream(CXios::serverFile); 160 161 CServer::openErrorStream(CXios::serverFile); 162 163 CMemChecker::logMem( "CServer::initialize" ); 161 164 162 165 ///////////////////////////////////////// … … 429 432 CXios::getMpiGarbageCollector().release() ; // release unfree MPI ressources 430 433 434 CMemChecker::logMem( "CServer::finalize", true ); 431 435 if (!is_MPI_Initialized) 432 436 { … … 438 442 report(0)<<"Performance report : Ratio : "<<CTimer::get("Process events").getCumulatedTime()/CTimer::get("XIOS server").getCumulatedTime()*100.<<"%"<<endl ; 439 443 report(100)<<CTimer::getAllCumulatedTime()<<endl ; 444 report(100)<<CMemChecker::getAllCumulatedMem()<<endl ; 440 445 441 446 CWorkflowGraph::drawWorkFlowGraph_server();
Note: See TracChangeset
for help on using the changeset viewer.