This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: incremental compiler project
- From: Manuel LÃpez-IbÃÃez <lopezibanez at gmail dot com>
- To: Jeff Law <law at redhat dot com>
- Cc: David Kunsman <dmkunsman at gmail dot com>, Tom Tromey <tom at tromey dot com>, GCC Development <gcc at gcc dot gnu dot org>
- Date: Fri, 4 Sep 2015 18:31:43 +0200
- Subject: Re: incremental compiler project
- Authentication-results: sourceware.org; auth=none
- References: <CAPVyUPD0eAyAuPOktpjqpY=UKx0t2YEvFQxMUMY2Lv2pwUAjLA at mail dot gmail dot com> <55E87708 dot 7010901 at gmail dot com> <87twrap6c2 dot fsf at tromey dot com> <CAPVyUPDX9YiCSp8WjafmuYpwAqx4jt-2r_7U4XXO4Zg_HmuzgQ at mail dot gmail dot com> <55E9BC4E dot 5040508 at redhat dot com>
On 4 September 2015 at 17:44, Jeff Law <law@redhat.com> wrote:
> On 09/04/2015 09:40 AM, David Kunsman wrote:
>>
>> what do you think about the sub project in the wiki:
>>
>> Parallel Compilation:
>>
>> One approach is to make the front end multi-threaded. (I've pretty
>> much abandoned this idea. There are too many mutable tree fields,
>> making this a difficult project. Also, threads do not interact well
>> with fork, which is currently needed by the code generation approach.)
>
> You should get in contact with David Malcolm as these issues are directly
> related to his JIT work.
See https://gcc.gnu.org/wiki/JIT
If I remember correctly from past discussions, making the C/C++ FEs
multi-threaded is not really desired. People already compile multiple
files in parallel using 'make -j' and it is expected that many
bottlenecks would require sequential execution anyway. Adding locks
within the FEs may make them slower rather than faster.
However, making the FEs thread-safer would be great for JIT and for
converting them into reusable libraries (or if someone comes up with a
feasible GCC server design).
>> This will entail removing most global variables, marking some with
>> __thread, and wrapping a few with locks.
>
> Yes, but that's work that is already in progress. Right now David's got a
> big log and context switch in place, but we really want to drive down the
> amount of stuff in that context switch.
Removing global variables would already be a big help. For example,
most flag_* global variables (example: flag_no_line_commands) can be
encoded in struct gcc_options and could be removed. This would be a
small project to start with, since one can do the conversion one at a
time.
Cheers,
Manuel.