From: Romain Bardou <romain.bardou@inria.fr>
To: caml-list@inria.fr, Xavier Leroy <Xavier.Leroy@inria.fr>
Subject: Re: [Caml-list] Accelerating compilation
Date: Mon, 09 Sep 2013 09:59:34 +0200 [thread overview]
Message-ID: <522D7FE6.6000404@inria.fr> (raw)
In-Reply-To: <522A0336.7030203@inria.fr>
Le 06/09/2013 18:30, Xavier Leroy a écrit :
> On 06/09/13 15:56, Romain Bardou wrote:
>
>> 1) Separate typing and code generation, in ocamlc and in ocamlopt
>> For instance, provide an option -typing-only which would mean "only
>> produce the .cmi but do not produce the .cmo or the .cmx".
>
> I strongly suspect that bytecode generation takes much less time than
> parsing and typechecking, so you wouldn't gain much compared to simply
> compiling to bytecode.
Bytecode compilation is indeed much faster, I learned that with Melt,
which compiles an OCaml file which itself generates a .tex file. I used
to compile the OCaml file with ocamlopt. I gained a lot by using ocamlc
instead. The executable takes more time to execute but it is still much
faster overall.
However, compiling to bytecode is not always an option. In my current
case, it fails at link-time because of some C stubs (I could probably
fix this). Moreover, I compile a model-checker and speed is obviously
needed in that case. Maybe I could isolate the model-checker part…
> Some obvious recommendations:
>
> - Make sure the .opt compilers (ocamlc.opt, ocamlopt.opt) are
> installed. They are significantly faster than their non-.opt
> counterparts, and some Linux distros package the .opt compilers
> separately and don't install them by default.
Indeed, I benchmarked this out of curiosity and it does accelerate the
compilation time by a factor of about 3.
> - Put your project on a fast disk, ideally a SSD. ocamlc can be I/O
> bound sometimes. The only times where I observe somewhat slow
> compilations is when I work in an NFS partition mounted from our
> super-reliable-but-rather-slow NAS.
>
>> 2) Be able to disable Ocamlbuild's digest mechanism and use dates and
>> file sizes instead
>>
>> If I am not mistaken, this is one of the main reasons why Ocamlbuild is
>> slower that make.
>
> It's one possible reason among others, e.g. that ocamlbuild runs
> ocamldep very often. Again, some profiling would help understanding
> the bottleneck(s). But this is a reasonable suggestion.
>
>> 3) Parallel compilation in Ocamlbuild
>> Of course it would help but it is not easy to implement so I'm just
>> putting it there to be exhaustive.
>
> As others said, ocamlbuild has some support for parallelism, but
> it's much less effective than "make -j". One reason could be that
> ocamlbuild discovers dependencies as it goes, so it's doing online
> scheduling, in contrast with make's offline scheduling. But within
> the online scheduling approach, there is certainly room for
> improvement. Suggestions and patches welcome.
--
Romain Bardou
next prev parent reply other threads:[~2013-09-09 7:59 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-09-06 13:56 Romain Bardou
2013-09-06 14:55 ` Markus Mottl
2013-09-06 15:19 ` Romain Bardou
2013-09-06 15:27 ` Gabriel Scherer
2013-09-06 15:33 ` Alain Frisch
2013-09-06 20:51 ` Fabrice Le Fessant
2013-09-09 7:44 ` Romain Bardou
2013-09-11 13:00 ` Francois Berenger
2013-09-11 13:46 ` Wojciech Meyer
2013-09-12 1:23 ` Francois Berenger
2013-09-12 15:15 ` Jacques Le Normand
2013-09-30 8:06 ` [Caml-list] from oasis to obuild (original subject was Re: Accelerating compilation) Francois Berenger
2013-09-30 8:18 ` Török Edwin
2013-09-30 9:00 ` Fabrice Le Fessant
2013-09-30 9:13 ` Anil Madhavapeddy
2013-09-30 11:13 ` Alain Frisch
2013-09-30 11:19 ` Anil Madhavapeddy
2013-09-30 11:27 ` Alain Frisch
2013-09-30 11:36 ` Anil Madhavapeddy
2013-09-30 9:18 ` Francois Berenger
2013-09-30 14:11 ` Sylvain Le Gall
2013-10-01 0:57 ` Francois Berenger
2013-10-01 12:25 ` Sylvain Le Gall
2013-09-07 11:37 ` [Caml-list] Accelerating compilation Matej Kosik
2013-09-08 6:37 ` Francois Berenger
2013-09-06 15:18 ` Gabriel Scherer
2013-09-06 15:28 ` Romain Bardou
2013-09-06 16:04 ` Markus Mottl
2013-09-06 16:30 ` Xavier Leroy
2013-09-07 19:13 ` Wojciech Meyer
2013-09-07 21:42 ` Jacques-Pascal Deplaix
2013-09-08 1:59 ` Markus Mottl
2013-09-09 7:59 ` Romain Bardou [this message]
2013-09-09 8:25 ` Alain Frisch
2013-09-09 8:35 ` Francois Berenger
2013-09-09 10:13 ` Anil Madhavapeddy
2013-09-09 17:08 ` Adrien Nader
2013-09-09 17:17 ` Gabriel Kerneis
2013-09-10 2:01 ` oleg
2013-09-10 10:21 ` Gerd Stolpmann
2013-09-10 16:15 ` Adrien Nader
2013-09-10 16:46 ` Xavier Leroy
2013-09-10 16:53 ` Adrien Nader
2013-09-10 17:43 ` ygrek
2013-09-06 18:45 ` Martin Jambon
2013-09-09 8:15 ` Romain Bardou
2013-09-09 8:36 ` Francois Berenger
2013-09-09 8:41 ` Thomas Refis
2013-09-09 17:32 ` Aleksey Nogin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=522D7FE6.6000404@inria.fr \
--to=romain.bardou@inria.fr \
--cc=Xavier.Leroy@inria.fr \
--cc=caml-list@inria.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox