Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
  • May 14 01:33
    poulson closed #276
  • May 14 01:33
    poulson commented #276
  • May 14 01:30

    poulson on master

    Update README.md (compare)

  • May 14 01:24

    poulson on master

    added logo (compare)

  • May 10 21:37
    jedbrown commented #276
  • May 10 21:25
    poulson commented #276
  • May 10 21:21
    jedbrown commented #276
  • May 10 17:08
    poulson commented #276
  • May 10 17:03
    tesch1 opened #276
  • Apr 10 13:18
    JM1 commented #275
  • Apr 10 13:16
    JM1 synchronize #275
  • Apr 10 08:56
    JM1 opened #275
  • Mar 06 03:47
    Raviteja1996 closed #274
  • Mar 05 05:46
    Raviteja1996 opened #274
  • Feb 11 21:53
    BenBrock commented #228
  • Feb 11 21:52
    BenBrock commented #228
  • Feb 11 21:51
    poulson commented #228
  • Feb 11 21:50
    poulson commented #228
  • Feb 11 21:45
    BenBrock commented #228
  • Jan 23 23:57
    adambaskerville commented #273
Aidan Dang
@AidanGG
I'll get started on a build. It doesn't take too long for me with make -j4
Jack Poulson
@poulson
also, it's possible to introduce #pragma statements into the code to try to avoid unsafe math optimizations
Aidan Dang
@AidanGG
-O2 on Release seems to work.
Jack Poulson
@poulson
then it seems -O3 is indeed doing some overly aggressive floating-point optimizations
it would be a shame to need to use -O2 for every file
Jack Poulson
@poulson
I see the issue in Debug and Release builds with 2 MPI processes
Aidan Dang
@AidanGG
Would it be worth going to -Os or -O1 or -O0?
Jack Poulson
@poulson
I don't think it is the optimization levels anymore
I will look into it
Jack Poulson
@poulson
Getting the 31'st singular value of the following secular SVD problem seems to be failing:
whichValue=31
d
0 
1.058049026775339e-14 
3.264165070167235e-14 
5.678278474169334e-14 
7.549675375178582e-14 
8.999682272132982e-14 
1.221972146245e-13 
1.31165743725131e-13 
1.509690856648426e-13 
1.935346943178186e-13 
2.227587276398722e-13 
2.484596565403951e-13 
2.735452664152349e-13 
2.95093712074214e-13 
3.072195747847108e-13 
3.312626545827337e-13 
3.576227579361058e-13 
4.11481521016379e-13 
4.368380737442849e-13 
4.654660121458798e-13 
4.917724349672351e-13 
5.351048585795176e-13 
5.808559195909003e-13 
6.026777472426812e-13 
6.250594383003799e-13 
6.766753212719467e-13 
7.244153585408541e-13 
7.776124345286146e-13 
8.164772181710468e-13 
8.467548733006103e-13 
9.071477145232044e-13 
1.01805321890874e-12 
0.5007056599251847 
0.5083143333578168 
0.5140067545248999 
0.5300828281216288 
0.5432158063056066 
0.558449173485537 
0.5693619673962667 
0.5858774959661275 
0.6000038931533331 
0.607556229381327 
0.6195702898722641 
0.627471185160503 

rho=5.44831e-24
z
0.8825077510160421 
-0.07358221320511406 
-0.03174202316169126 
0.04131276385906558 
-0.04434525804425347 
0.06731278591028068 
-0.05539554252257473 
-0.03512118498070101 
0.04512260091902331 
-0.1180721177417332 
0.08284806075424916 
-0.07444791552043822 
0.02259784498068728 
-0.0331198865827843 
0.01047460095220662 
-0.06333080808951928 
0.08922022110821659 
-0.07376550709419979 
0.05879641325099103 
-0.08369171424713648 
0.0687436019461881 
-0.03520100042130667 
0.1502895817945899 
-0.02136545584620814 
0.04613737435858611 
-0.1283945980959928 
0.06240166369683361 
-0.02550239013481107 
0.1565066351625207 
-0.08300592774083522 
0.2288923560918465 
0.07921931672967193 
0.001204468554921371 
0.03546379899021058 
0.01490605201498635 
0.006952012394837491 
0.00430796577937792 
0.006494679505778383 
0.0121694830195294 
0.003459607121991713 
0.008990606149639263 
0.01465219982739229 
-0.003086397925868282 
0.001933556220246539
I need to get some sleep but can look into this tomorrow.
Aidan Dang
@AidanGG
Sure thing. Thanks a lot.
Jack Poulson
@poulson
one thing to notice is that this is a problem diag(d)^2 + rho z z^T, where || diag(d)^2 ||_2 ~= 0.36 but || rho z z^T ||_2 = | rho | ~= 10^-24.
so the rank-one update has a norm below machine precision
Jack Poulson
@poulson
I am testing a set of changes to El::SecularSVD, El::SecularSingularValue, El::SecularEVD, and El::SecularEigenvalue that ignore the rank-one update if its relative norm is less than 10 * eps
Jack Poulson
@poulson
nevermind, that matrix is slightly above the reasonable tolerance since one should compute the square-root of that ratio, i.e., ~10^-12
Jack Poulson
@poulson
I think I fixed the problem
The trivial helper routine secular_svd::RelativeEigenvalueToRelativeSingularValue was to blame, as it was assuming that one of the intermediate calculations was always positive
this would be true in exact arithmetic but seems to fail in some extreme cases and I am patching it to clip to zero
Jack Poulson
@poulson
@AidanGG I committed fixes, albeit in a bit of a rush
Ryan H. Lewis
@rhl-
@poulson does: lapack::BidiagSVDQRAlg modify the data in the bidiagonal matrix ?
nevermind , I see it does.
Jack Poulson
@poulson
yes, you are correct
Aidan Dang
@AidanGG
I'll get onto testing it. I've created my own local branch that includes this fix on lp_data and the zero shift fix on master.
Jack Poulson
@poulson
did I commit it to lp_data by accident?
I will commit it to master
it should be in master now
Jack Poulson
@poulson
phew, the lp_data branch now contains a substantial refactoring of the MPSReader class that now supports RANGES sections
Aidan Dang
@AidanGG
Hi Jack, I've uploaded another (670 x 670 real double, 64-bit Int, 2x2 grid) matrix that's having an issue "SecularLast solver did not converge in 400 iterations": https://drive.google.com/open?id=0B3uyvVfsuP46X3J3N3VnQzlqb00
I'll try it on Debug to see if I have issues there.
Aidan Dang
@AidanGG
Ok, so it does seem to be failing for me on Debug as well.
Jack Poulson
@poulson
Are the other matrices passing?
Aidan Dang
@AidanGG
Sorry, which other matrices, the last ones I sent you? Those ones work fine, but I can check that again.
Jack Poulson
@poulson
no need to check again, I just wanted to clarify
Aidan Dang
@AidanGG
The last one I sent is OK for me.
Jack Poulson
@poulson
hmm, that succeeds for me with an up-to-date build using D&C
Aidan Dang
@AidanGG
It could just be a thing with my gcc version. I'll check it on my local cluster with a different GCC.
Jack Poulson
@poulson
are you sure that you are linking to an install of HEAD?
and picking up the right headers?
Aidan Dang
@AidanGG
Yep, I did a clean build before sending it to you.
Jack Poulson
@poulson
with that said, floating-point differs on different machines and you could be hitting a rare corner case that I'm not
would you mind running with the 'progress' field of 'SecularSVDCtrl' set to 'true'?
Aidan Dang
@AidanGG
Sure, I'll try that.
Aidan Dang
@AidanGG
If I up the secular iterations, it ends with
Relative interval is [0.979796,0.979796], sigmaEst=0.979796
Stepped out of bounds
Relative interval is [0.979796,0.979796], sigmaEst=0.979796
Stepped out of bounds
Relative interval is [0.979796,0.979796], sigmaEst=0.979796
Stepped out of bounds
Relative interval is [0.979796,0.979796], sigmaEst=0.979796
Stepped out of bounds
Relative interval is [0.979796,0.979796], sigmaEst=0.979796
Stepped out of bounds
Relative interval is [0.979796,0.979796], sigmaEst=0.979796
Stepped out of bounds
Relative interval is [0.979796,0.979796], sigmaEst=0.979796
Stepped out of bounds
Relative interval is [0.979796,0.979796], sigmaEst=0.979796
Stepped out of bounds
Relative interval is [0.979796,0.979796], sigmaEst=0.979796
Stepped out of bounds
Aidan Dang
@AidanGG
Running on local cluster seems OK, so I'll just put it down to one of those rare issues.
Jack Poulson
@poulson
does everything converge with one MPI process?
and, since it seems it is process 2 having issues on the first machine, with what I assume is a four process run, would you mind sending me the output with only process two having the secularCtrl.progress flag equal to true?
also, the output you sent doesn't have any error messages printed except for that process 2 aborted, which is strange
I think you're seeing a lot of noise from other processes and that it would be useful to only have process 2 print the secularCtrl.progress = true information