sip: feature: make build faster by running configure and codegen in parallel

Phil Thompson phil at riverbankcomputing.com
Fri Jun 17 20:33:46 BST 2022


Thanks but I’m not looking at optimisations until all the C code has 
been replaced by Python code.

Phil

On 17/06/2022 19:43, Milan Hauth wrote:
> done parallel configure in
> https://github.com/milahu/sip/tree/parallel-configure
> 
> used in
> https://github.com/NixOS/nixpkgs/pull/177530
> 
> with parallel configure on 32 cores
> the pyqt6 build takes 400 instead of 500 seconds
> 
> parallel codegen is harder, because, for example:
> QtCore codegen must run before QtOpenGL codegen
> because QtCore defines %Feature PyQt_OpenGL_ES2
> 
> WIP for parallel codegen in
> https://github.com/milahu/sip/tree/parallel-codegen
> 
> please feel free to use my code
> 
> 
> 2022-06-11 22:29 GMT+02:00, Milan Hauth <milahu at gmail.com>:
>> currently there are two bottlenecks in sip: configure and codegen
>> 
>> these run on a single core, which takes some time
>> 
>> code:
>> 
>> sipbuild/project.py
>> 
>> ```py
>>     def update_buildable_bindings(self):
>>        # ...
>> 
>>         # TODO perf: run this in parallel
>>         for b in list(self.bindings.values()):
>>             if not b.is_buildable():
>>                 del self.bindings[b.name]
>> ```
>> 
>> is_buildable is implemented for example by pyqt-builder in
>> pyqtbuild/bindings.py
>> 
>> ```py
>>     def is_buildable(self):
>> ```
>> 
>> challenge:
>> capture stdout and stderr of the configure's
>> and send them to logfiles, to allow later inspection
>> 
>> bottleneck 2 is codegen:
>> 
>> sipbuild/builder.py
>> 
>> ```py
>>         # TODO perf: run this in parallel
>>         for bindings in project.bindings.values():
>>             project.progress(
>>                     "Generating the {0} 
>> bindings".format(bindings.name))
>> ```
>> 
>> the build phase of pyqt-builder
>> already runs parallel with the --jobs argument
>> 
>> pyqtbuild/builder.py
>> 
>> ```py
>>         options.append(
>>                 Option('jobs', option_type=int,
>>                         help="run N make jobs in parallel", 
>> metavar='N'))
>> ```
>> 


More information about the PyQt mailing list