Hi Lee,

> On Jul 14, 2014, at 19:01, Lee Skillen <lskil...@vulcanft.com> wrote:
> 
> Hi,
> 
> We've been utilising JCC frequently recently during development and
> often have a need to recompile our JCC-based extensions due to changes
> in the wrapped code - Doing so incurs a reasonably lengthy
> re-compilation effort due to the serial nature of the extension
> building via distutils.
> 
> To help with this we currently have a potential patch that would add
> parallel building support to JCC within Linux (based partially off
> public domain code for distutils, via monkey patching.)  Would this be
> something that might be of interest to be integrated into the mainline
> trunk?
> 
> The following are some quick and dirty statistics for building the jcc
> pylucene itself (incl. java lucene which accounts for about 30-ish
> seconds upfront) - The JCC files are split using --files 8, and each
> build is preceded with a make clean:
> 
> Serial (unpatched):
> 
> real    5m1.502s
> user    5m22.887s
> sys     0m7.749s
> 
> Parallel (patched, 4 physical cores, 8 hyperthreads, 8 parallel jobs):
> 
> real    1m37.382s
> user    7m16.658s
> sys     0m8.697s
> 
> Furthermore, some additional changes were made to the wrapped file
> generation to make the generated code more ccache friendly (additional
> deterministic sorting for methods and some usage of an ordered set).
> With these in place and the CC and CCACHE_COMPILERCHECK environment
> variables set to "ccache gcc" and "content" respectively, and ensuring
> ccache is installed, subsequent compilation time is reduced again as
> follows:
> 
> Parallel (patched, 4 physical cores, 8 hyperthreads, 8 parallel jobs,
> ccache enabled):
> 
> real    0m43.051s
> user    1m10.392s
> sys     0m4.547s
> 
> This was a run in which nothing changed between runs, so a realistic
> run in which changes occur it'll be a figure between 0m43.051s and
> 1m37.382s, depending on how drastic the change was. If many changes
> are expected and you want to keep it more cache friendly then using a
> higher --files would probably work (to an extent), or ideally use
> --files separate, although it doesn't currently work for me (need to
> investigate).
> 
> Any thoughts appreciated.

This is a pretty cool feature !
The scary part is depending on monkey patching distutils... 
When that breaks, it's a pain to maintain: I've been having to make my 
workaround for now years-old setuptools issue-43 via monkey patching more 
complicated as more and more branches and versions of setuptools have appeared 
over time.

Any chance these distutils patches could be merged into distutils upstream 
first ?

If you're using JCC only, there is no need to build PyLucene but I assume you 
know that already. Building JCC by itself is pretty fast.

Andi..

> 
> Cheers,
> Lee
> 
> -- 
> Lee Skillen
> 
> Vulcan Financial Technologies
> 1st Floor, 47 Malone Road, Belfast, BT9 6RY
> 
> Office:  +44 (0)28 95 817888
> Web:     www.vulcanft.com

Reply via email to