[llvm-dev] [RFC] Moving tools/llvm-mca/lib into lib/MCA

Clement Courbet via llvm-dev llvm-dev at lists.llvm.org
Wed Dec 12 03:58:01 PST 2018


(on the correct mailing list)


Hi all,

tl;dr: We'd like to propose moving tools/llvm-mca/lib into lib/MCA and
create a new MCA library in LLVM.

llvm-mca has recently been split
<https://bugs.llvm.org/show_bug.cgi?id=37696> into its core part and the
tool part.

   -

   The core part simulates the execution of a basic block of machine
   instructions as modeled by the llvm SchedModel.
   -

   The tool part deals with the plumbing and interacting with the user.


The core part can be used by parts of LLVM that deal with cost modeling
(e.g. scheduling and vectorization). MCA provides a more realistic target
for optimization than the heuristics typically used to drive these passes.
We think that using approaches based on fine-grained cost modeling can
greatly improve the performance of critically hot code, by trading compile
time for performance.

As an example of how MCA can be used to improve scheduling, we have built a
prototype machine scheduler that optimizes the simulated latency of a block
of code under the constraints of the scheduling DAG. We've had interesting
wins of 2-3% on assembly kernels for webp
<https://github.com/webmproject/libwebp/commit/67748b41dbb21a43e88f2b6ddf6117f4338873a3>
and gemmlowp <https://github.com/google/gemmlowp/pull/91>*.

The patch is completely mechanical and can be seen here
<https://reviews.llvm.org/D55557>. It only moves the files and updates all
references.

We'd like to hear if there are any things comments/objections to this
change.

Thanks !

*note: We did this before llvm-mca was released and were using a different
simulator, but the idea remains the same.

On Wed, Dec 12, 2018 at 11:44 AM Clement Courbet <courbet at google.com> wrote:

> Hi all,
>
> tl;dr: We'd like to propose moving tools/llvm-mca/lib into lib/MCA and
> create a new MCA library in LLVM.
>
> llvm-mca has recently been split
> <https://bugs.llvm.org/show_bug.cgi?id=37696> into its core part and the
> tool part.
>
>    -
>
>    The core part simulates the execution of a basic block of machine
>    instructions as modeled by the llvm SchedModel.
>    -
>
>    The tool part deals with the plumbing and interacting with the user.
>
>
> The core part can be used by parts of LLVM that deal with cost modeling
> (e.g. scheduling and vectorization). MCA provides a more realistic target
> for optimization than the heuristics typically used to drive these passes.
> We think that using approaches based on fine-grained cost modeling can
> greatly improve the performance of critically hot code, by trading compile
> time for performance.
>
> As an example of how MCA can be used to improve scheduling, we have built
> a prototype machine scheduler that optimizes the simulated latency of a
> block of code under the constraints of the scheduling DAG. We've had
> interesting wins of 2-3% on assembly kernels for webp
> <https://github.com/webmproject/libwebp/commit/67748b41dbb21a43e88f2b6ddf6117f4338873a3>
> and gemmlowp <https://github.com/google/gemmlowp/pull/91>*.
>
> The patch is completely mechanical and can be seen here
> <https://reviews.llvm.org/D55557>. It only moves the files and updates
> all references.
>
> We'd like to hear if there are any things comments/objections to this
> change.
>
> Thanks !
>
> *note: We did this before llvm-mca was released and were using a different
> simulator, but the idea remains the same.
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20181212/1e36faa3/attachment.html>


More information about the llvm-dev mailing list