Re: Huge memory usage difference
Domingo Alvarez Duarte <[email protected]> Sun, 16 Aug 2020 16:51:34 +0200
| Newsgroups | gmane.comp.gnu.glpk |
|---|---|
| Message-ID | <[email protected]> |
Hello Andrew ! Thank you for reply ! So testing to detect simple expressions can make it usable in those cases ? Can you give one such example where it'll fail ? Cheers ! On 16/8/20 16:44, Andrew Makhorin wrote: > On Sun, 2020-08-16 at 11:53 +0200, Domingo Alvarez Duarte wrote: >> Hello ! >> >> I just found a class of models that can exhibit a huge memory usage >> difference depending on if we add or not add parameter missing values >> when there is a default value declaration for then. >> >> See this model for example >> https://github.com/mingodad/GLPK/commit/539dd9774829dee4a0b8c8199a9d2b94a3c7d9cb: >> >> GLPK-4.65 from pacakage manager 69.85s 3001.9 Mb 1x 1x >> >> GLPK-4.65 with several optimizations 26.02s 1506.0 Mb 0.37x 0.5x >> >> GLPK-4.65 prev + no param add missing 16.36s 21.2 Mb Mb 0.23x >> 0.007x >> >> This huge difference is due to this changes >> https://github.com/mingodad/GLPK/commit/70d4ad7e97cdb34ee6348c864bd3a941cdb0d422 >> . >> >> If you have big models/data and can test then with the master branch of >> https://github.com/mingodad/GLPK and report your results I would >> appreciate it and hope this can lead to more performance improvements in >> GMPL/GLPK. > > It may not work correctly in some cases, because the expression > specified in the default option may recursively refer to elements > of the same parameter (directly or indirectly). > > >> Notice right now the changes mainly affect GMPL model/data generation >> not solver/solving the generated problem. >> >> ==== >> >> /usr/bin/time glpsol-from-package-manager -m mem-default.mod -d >> mem-default.dat >> GLPSOL: GLPK LP/MIP Solver, v4.65 >> Parameter(s) specified in the command line: >> -m mem-default.mod -d mem-default.dat >> Reading model section from mem-default.mod... >> mem-default.mod:23: warning: unexpected end of file; missing end >> statement inserted >> 23 lines were read >> Reading data section from mem-default.dat... >> mem-default.dat:32660: warning: unexpected end of file; missing end >> statement inserted >> 32660 lines were read >> Generating omax... >> Generating c1... >> Generating c2... >> Model has been successfully generated >> GLPK Integer Optimizer, v4.65 >> 13589 rows, 14037 columns, 42743 non-zeros >> 449 integer variables, all of which are binary >> Preprocessing... >> 9 constraint coefficient(s) were reduced >> 4056 rows, 4495 columns, 12792 non-zeros >> 448 integer variables, all of which are binary >> Scaling... >> A: min|aij| = 1.310e-05 max|aij| = 2.660e+02 ratio = 2.031e+07 >> GM: min|aij| = 7.228e-02 max|aij| = 1.384e+01 ratio = 1.914e+02 >> EQ: min|aij| = 5.224e-03 max|aij| = 1.000e+00 ratio = 1.914e+02 >> 2N: min|aij| = 2.620e-03 max|aij| = 1.750e+00 ratio = 6.679e+02 >> Constructing initial basis... >> Size of triangular part is 4056 >> Solving LP relaxation... >> GLPK Simplex Optimizer, v4.65 >> 4056 rows, 4495 columns, 12792 non-zeros >> * 0: obj = 1.000000000e+00 inf = 0.000e+00 (2721) >> * 3122: obj = 5.173823646e+02 inf = 0.000e+00 (0) 3 >> OPTIMAL LP SOLUTION FOUND >> Integer optimization begins... >> Long-step dual simplex will be used >> + 3122: mip = not found yet <= +inf (1; 0) >> + 3122: >>>>> 5.173823646e+02 <= 5.173823646e+02 0.0% (1; 0) >> + 3122: mip = 5.173823646e+02 <= tree is empty 0.0% (0; 1) >> INTEGER OPTIMAL SOLUTION FOUND >> Time used: 0.3 secs >> Memory used: 3001.9 Mb (3147772544 bytes) >> 69.85user 0.88system 1:10.73elapsed 99%CPU (0avgtext+0avgdata >> 3083108maxresident)k >> 0inputs+0outputs (0major+770102minor)pagefaults 0swaps >> >> ==== >> >> ==== >> >> /usr/bin/time myglpsol-with-several-optmizations -m mem-default.mod -d >> mem-default.dat >> GLPSOL: GLPK LP/MIP Solver, v4.65 >> Parameter(s) specified in the command line: >> -m mem-default.mod -d mem-default.dat >> Reading model section from mem-default.mod... >> mem-default.mod:23: warning: unexpected end of file; missing end >> statement inserted >> 23 lines were read >> Reading data section from mem-default.dat... >> mem-default.dat:32660: warning: unexpected end of file; missing end >> statement inserted >> 32660 lines were read >> Generating omax... >> Generating c1... >> Generating c2... >> Model has been successfully generated >> GLPK Integer Optimizer, v4.65 >> 13589 rows, 14037 columns, 42743 non-zeros >> 449 integer variables, all of which are binary >> Preprocessing... >> 9 constraint coefficient(s) were reduced >> 4056 rows, 4495 columns, 12792 non-zeros >> 448 integer variables, all of which are binary >> Scaling... >> A: min|aij| = 1.310e-05 max|aij| = 2.660e+02 ratio = 2.031e+07 >> GM: min|aij| = 7.228e-02 max|aij| = 1.384e+01 ratio = 1.914e+02 >> EQ: min|aij| = 5.224e-03 max|aij| = 1.000e+00 ratio = 1.914e+02 >> 2N: min|aij| = 2.620e-03 max|aij| = 1.750e+00 ratio = 6.679e+02 >> Constructing initial basis... >> Size of triangular part is 4056 >> Solving LP relaxation... >> GLPK Simplex Optimizer, v4.65 >> 4056 rows, 4495 columns, 12792 non-zeros >> * 0: obj = 1.000000000e+00 inf = 0.000e+00 (2721) >> * 3122: obj = 5.173823646e+02 inf = 0.000e+00 (0) 3 >> OPTIMAL LP SOLUTION FOUND >> Integer optimization begins... >> Long-step dual simplex will be used >> + 3122: mip = not found yet <= +inf (1; 0) >> + 3122: >>>>> 5.173823646e+02 <= 5.173823646e+02 0.0% (1; 0) >> + 3122: mip = 5.173823646e+02 <= tree is empty 0.0% (0; 1) >> INTEGER OPTIMAL SOLUTION FOUND >> Time used: 0.3 secs >> Memory used: 1506.0 Mb (1579147056 bytes) >> 26.02user 0.57system 0:26.61elapsed 99%CPU (0avgtext+0avgdata >> 1547792maxresident)k >> 1952inputs+0outputs (9major+386354minor)pagefaults 0swaps >> >> ==== >> >> ==== >> >> /usr/bin/time myglpsol-master -m mem-default.mod -d mem-default.dat >> GLPSOL: GLPK LP/MIP Solver, v4.65 >> Parameter(s) specified in the command line: >> -m mem-default.mod -d mem-default.dat >> Reading model section from mem-default.mod... >> mem-default.mod:23: warning: unexpected end of file; missing end >> statement inserted >> 23 lines were read >> Reading data section from mem-default.dat... >> mem-default.dat:32660: warning: unexpected end of file; missing end >> statement inserted >> 32660 lines were read >> Generating omax... >> Generating c1... >> Generating c2... >> Model has been successfully generated >> GLPK Integer Optimizer, v4.65 >> 13589 rows, 14037 columns, 42743 non-zeros >> 449 integer variables, all of which are binary >> Preprocessing... >> 9 constraint coefficient(s) were reduced >> 4056 rows, 4495 columns, 12792 non-zeros >> 448 integer variables, all of which are binary >> Scaling... >> A: min|aij| = 1.310e-05 max|aij| = 2.660e+02 ratio = 2.031e+07 >> GM: min|aij| = 7.228e-02 max|aij| = 1.384e+01 ratio = 1.914e+02 >> EQ: min|aij| = 5.224e-03 max|aij| = 1.000e+00 ratio = 1.914e+02 >> 2N: min|aij| = 2.620e-03 max|aij| = 1.750e+00 ratio = 6.679e+02 >> Constructing initial basis... >> Size of triangular part is 4056 >> Solving LP relaxation... >> GLPK Simplex Optimizer, v4.65 >> 4056 rows, 4495 columns, 12792 non-zeros >> * 0: obj = 1.000000000e+00 inf = 0.000e+00 (2721) >> * 3122: obj = 5.173823646e+02 inf = 0.000e+00 (0) 3 >> OPTIMAL LP SOLUTION FOUND >> Integer optimization begins... >> Long-step dual simplex will be used >> + 3122: mip = not found yet <= +inf (1; 0) >> + 3122: >>>>> 5.173823646e+02 <= 5.173823646e+02 0.0% (1; 0) >> + 3122: mip = 5.173823646e+02 <= tree is empty 0.0% (0; 1) >> INTEGER OPTIMAL SOLUTION FOUND >> Time used: 0.2 secs >> Memory used: 21.2 Mb (22256384 bytes) >> 16.36user 0.02system 0:16.39elapsed 99%CPU (0avgtext+0avgdata >> 24516maxresident)k >> 2600inputs+0outputs (11major+7226minor)pagefaults 0swaps >> >> ==== >> >> Cheers ! >> >> >>