http://weknowmemes.com/wp-content/uploads/2012/01/op-will-surely-deliver-lets-just-wait.jpg

Yes, I did actually work on the GVN pass---even got my master's degree.  After
finally defending my thesis (available at https://github.com/ajvondrak/thesis),
I started a teaching job at my university, which proved to be a lot of work.
Thus, I didn't find time to clean up the issues I wanted to fix before pushing
this to the public.  But it's been a long time, and I figured I should actually
put *something* out one way or another.

So, here it is: https://github.com/ajvondrak/factor/tree/gvn

Right now, the global value numbering pass lives in extra/compiler/cfg/gvn,
thus you can simply switch out the USING: in compiler.cfg.optimizer to give it
a whirl.  Now that it's summer, I hope to be able to work on the broken parts
some more.  To wit,
  * I never updated the old value-numbering unit tests, so gvn-tests will fail
    (whether because the global optimization changes test outcomes or just
    because of the tweaked interface).
  * The same tests that fail on my personal machine [1] from a load-all
    test-all without GVN still fail using GVN.  The only previously-passing
    tests that now fail unexpectedly were in math.vectors.simd (memory
    protection faults), so there's something buggy going on with SIMD stuff.
    (This failure isn't mentioned in the thesis because I hadn't done a
    load-all back then.)

Otherwise, the work seems interesting, if nothing else:
  * My thesis lends some documentation to the project, I hope.
  * With GVN, Factor still bootstraps in about the same amount of time.
  * The GVN pass should, ideally, replace the compiler.cfg.copy-prop pass.
  * When I ran them for my thesis a year ago, the benchmarks showed some
    impressive improvements across the board (summarized in the PDF).  These
    were run on my old single-core 3.2 GHz Pentium 4 machine with 2 GB RAM,
    running Debian (testing).  Nowadays, on my 2.83 GHz Intel Core 2 Quad with
    8 GB RAM, I get more erratic / less dramatic results.  Not sure why, but
    it'd probably be interesting to find out.

Factor code has been a pleasure to work with.  Hope these changes are worth
anything.

Thanks,
--Alex Vondrak

[1] Most of the failures were from DLLs I didn't have installed (libpq.so,
libsqlite3.so, libudis86.so.0, libncursesw.so, and libblas.so for tests in db,
furnace, site-watcher, webapps.mason.backend, math.blas.matrices,
math.blas.vectors, tools.disassembler, and curses).  Other than that, some http
tests failed with 500 errors (expecting 404s), io.launcher.unix had a killed
process, and memcached tests fail with Connection refused (111).  Nothing that
seems like a big deal.
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Factor-talk mailing list
Factor-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/factor-talk

Reply via email to