From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21045 invoked by alias); 7 Feb 2019 14:14:03 -0000 Mailing-List: contact gcc-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-owner@gcc.gnu.org Received: (qmail 21019 invoked by uid 89); 7 Feb 2019 14:14:01 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=BAYES_00,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=D*br, serial, D*suse.cz, Szabolcs X-HELO: mail-qt1-f194.google.com Received: from mail-qt1-f194.google.com (HELO mail-qt1-f194.google.com) (209.85.160.194) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 07 Feb 2019 14:13:58 +0000 Received: by mail-qt1-f194.google.com with SMTP id y4so6512419qtc.10 for ; Thu, 07 Feb 2019 06:13:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=usp-br.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=p05s4BCDVd4Hn5wsQT9vFca5P6QyAWB9OEeFqmtQ4zQ=; b=eKSJ/kZ5lo2YnFP+g2cV0344wYutu4E4zqdpkwffBvPTY2v4McfCHgikJ6zFLceZiT 1TxNiXXl95vtMk/PhJH/M2alho7AhSq3om4/ZQHm/3soEqB3/2OQEFMnd2nq8tEa6Qoy P+41YcM96SdNrMexaUkPQB9kOoTe1DUIQVLDyeFTzBuHwH7TV/4r8aGB7zxrE2COYuTO kWMLivHTba8Ms0FOFL+4PRYvpM44VpvioCabyBfLtm3lOl6glfnBYDezEYG3GhhKjuHi CvJk+FAEp47aCVwbHMXSLgqwwIgjFlJIDqHfmk89to1JsyesVXnX02iQZ2aEkKrnxCcm MkTw== Return-Path: Received: from smtp.gmail.com ([143.107.45.1]) by smtp.gmail.com with ESMTPSA id c20sm15544515qtj.56.2019.02.07.06.13.54 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Thu, 07 Feb 2019 06:13:56 -0800 (PST) Date: Thu, 07 Feb 2019 14:14:00 -0000 From: Giuliano Belinassi To: Richard Biener Cc: GCC Development , kernel-usp@googlegroups.com, gold@ime.usp.br, Alfredo Goldman Subject: Re: Parallelize the compilation using Threads Message-ID: <20190207141351.fgxkcrq6tawgcocl@smtp.gmail.com> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: NeoMutt/20180716 X-IsSubscribed: yes X-SW-Source: 2019-02/txt/msg00023.txt.bz2 Hi, Since gimple-match.c takes so long to compile, I was wondering if it might be possible to reorder the compilation so we can push its compilation early in the dependency graph. I've attached a graphic showing what I mean and the methodology into PR84402 (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84402). Maybe there is a simple change that can be made into Makefile? Or maybe an feature to Make itself to compute the elapsed time for each file and create a better scheduling for the next compilation? Giuliano. On 11/19, Richard Biener wrote: > On Fri, Nov 16, 2018 at 8:00 PM Giuliano Augusto Faulin Belinassi > wrote: > > > > Hi! Sorry for the late reply again :P > > > > On Thu, Nov 15, 2018 at 8:29 AM Richard Biener > > wrote: > > > > > > On Wed, Nov 14, 2018 at 10:47 PM Giuliano Augusto Faulin Belinassi > > > wrote: > > > > > > > > As a brief introduction, I am a graduate student that got interested > > > > > > > > in the "Parallelize the compilation using threads"(GSoC 2018 [1]). I > > > > am a newcommer in GCC, but already have sent some patches, some of > > > > them have already been accepted [2]. > > > > > > > > I brought this subject up in IRC, but maybe here is a proper place to > > > > discuss this topic. > > > > > > > > From my point of view, parallelizing GCC itself will only speed up the > > > > compilation of projects which have a big file that creates a > > > > bottleneck in the whole project compilation (note: by big, I mean the > > > > amount of code to generate). > > > > > > That's true. During GCC bootstrap there are some of those (see PR84402). > > > > > > > > One way to improve parallelism is to use link-time optimization where > > > even single source files can be split up into multiple link-time units. But > > > then there's the serial whole-program analysis part. > > > > Did you mean this: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84402 ? > > That is a lot of data :-) > > > > It seems that 'phase opt and generate' is the most time-consuming > > part. Is that the 'GIMPLE optimization pipeline' you were talking > > about in this thread: > > https://gcc.gnu.org/ml/gcc/2018-03/msg00202.html > > It's everything that comes after the frontend parsing bits, thus this > includes in particular RTL optimization and early GIMPLE optimizations. > > > > > Additionally, I know that GCC must not > > > > change the project layout, but from the software engineering perspective, > > > > this may be a bad smell that indicates that the file should be broken > > > > into smaller files. Finally, the Makefiles will take care of the > > > > parallelization task. > > > > > > What do you mean by GCC must not change the project layout? GCC > > > happily re-orders functions and link-time optimization will reorder > > > TUs (well, linking may as well). > > > > > > > That was a response to a comment made on IRC: > > > > On Thu, Nov 15, 2018 at 9:44 AM Jonathan Wakely wrote: > > >I think this is in response to a comment I made on IRC. Giuliano said > > >that if a project has a very large file that dominates the total build > > >time, the file should be split up into smaller pieces. I said "GCC > > >can't restructure people's code. it can only try to compile it > > >faster". We weren't referring to code transformations in the compiler > > >like re-ordering functions, but physically refactoring the source > > >code. > > > > Yes. But from one of the attachments from PR84402, it seems that such > > files exist on GCC, > > https://gcc.gnu.org/bugzilla/attachment.cgi?id=43440 > > > > > > My questions are: > > > > > > > > 1. Is there any project compilation that will significantly be improved > > > > if GCC runs in parallel? Do someone has data about something related > > > > to that? How about the Linux Kernel? If not, I can try to bring some. > > > > > > We do not have any data about this apart from experiments with > > > splitting up source files for PR84402. > > > > > > > 2. Did I correctly understand the goal of the parallelization? Can > > > > anyone provide extra details to me? > > > > > > You may want to search the mailing list archives since we had a > > > student application (later revoked) for the task with some discussion. > > > > > > In my view (I proposed the thing) the most interesting parts are > > > getting GCCs global state documented and reduced. The parallelization > > > itself is an interesting experiment but whether there will be any > > > substantial improvement for builds that can already benefit from make > > > parallelism remains a question. > > > > As I agree that documenting GCC's global states is good for the > > community and the development of GCC, I really don't think this a good > > motivation for parallelizing a compiler from a research standpoint. > > True ;) Note that my suggestions to the other GSoC student were > purely based on where it's easiest to experiment with paralellization > and not where it would be most beneficial. > > > There must be something or someone that could take advantage of the > > fine-grained parallelism. But that data from PR84402 seems to have the > > answer to it. :-) > > > > On Thu, Nov 15, 2018 at 4:07 PM Szabolcs Nagy wrote: > > > > > > On 15/11/18 10:29, Richard Biener wrote: > > > > In my view (I proposed the thing) the most interesting parts are > > > > getting GCCs global state documented and reduced. The parallelization > > > > itself is an interesting experiment but whether there will be any > > > > substantial improvement for builds that can already benefit from make > > > > parallelism remains a question. > > > > > > in the common case (project with many small files, much more than > > > core count) i'd expect a regression: > > > > > > if gcc itself tries to parallelize that introduces inter thread > > > synchronization and potential false sharing in gcc (e.g. malloc > > > locks) that does not exist with make parallelism (glibc can avoid > > > some atomic instructions when a process is single threaded). > > > > That is what I am mostly worried about. Or the most costly part is not > > parallelizable at all. Also, I would expect a regression on very small > > files, which probably could be avoided implementing this feature as a > > flag? > > I think the the issue should be avoided by avoiding fine-grained paralellism. > Which might be somewhat hard given there are core data structures that > are shared (the memory allocator for a start). > > The other issue I am more worried about is that we probably have to > interact with make somehow so that we do not end up with 64 threads > when one does -j8 on a 8 core machine. That's basically the same > issue we run into with -flto and it's threaded WPA writeout or recursive > invocation of make. > > > > > On Fri, Nov 16, 2018 at 11:05 AM Martin Jambor wrote: > > > > > > Hi Giuliano, > > > > > > On Thu, Nov 15 2018, Richard Biener wrote: > > > > You may want to search the mailing list archives since we had a > > > > student application (later revoked) for the task with some discussion. > > > > > > Specifically, the whole thread beginning with > > > https://gcc.gnu.org/ml/gcc/2018-03/msg00179.html > > > > > > Martin > > > > > > > Yes, I will research this carefully ;-) > > > > Thank you