[llvm-dev] FW: [GSoC 2021] Some ideas & questions about the Enzyme GSoC project

Chuyang Chen via llvm-dev llvm-dev at lists.llvm.org
Tue Mar 30 09:03:55 PDT 2021


A thing I forgot to mention is that a Rust feature named "compiler plugin"
do satisfy the requirement of "emitting extra debuginfo to the generated IR
code", but it's unstable and won't be stabilized in the foreseeable future.
Moreover, as to "using lld as its linker and add the Enzyme pass to lld",
compiler plugins help nothing.

 

From: Chuyang Chen <chuyangchen at foxmail.com> 
Sent: Tuesday, March 30, 2021 11:44 PM
To: wmoses at mit.edu
Cc: llvm-dev at lists.llvm.org; 'Enzyme AD' <enzyme-dev at googlegroups.com>
Subject: [GSoC 2021] Some ideas & questions about the Enzyme GSoC project

 

Hello, I'm working on the GSoC project "Integrate Enzyme into Rust to
provide high-performance differentiation in Rust". I have skimmed over the
codebase and now I have some preliminary ideas about the project.

 

As you have said, the project can be divided to two main parts:

1.      passing and parsing Rust type metadata into LLVM / Enzyme type
analysis, and

2.      integrating the Enzyme API/pass into rust.

 

Integrating Enzyme API to rust is trivial by using proc_macros in Rust.
However, passing Rust type metadata to LLVM and integrating the Enzyme pass
into rust is difficult if we don't modify the Rust compiler. The Rust
compiler seems to lack ability to emit metadata to LLVM, and if we want to
add the Enzyme pass without modifying the compiler, the only way is, I
think, using a command like



which is not user-friendly. I sought hard for a nonintrusive way to
implement them but got nothing, so it seems that the only option is
modifying the Rust compiler to let it

1.      emit extra debuginfo to the generated IR code, and

2.      use lld as its linker and add the Enzyme pass to lld

with a specific option, say "--enzyme"

 

However, is it appropriate to modify the compiler to just port a plugin to
it, though the modification won't be big or impact the rest of the compiler?

 

PS: Another question is about differentiating closures in Rust, but that can
be postponed to the following discussions.

 

Chuyang Chen

MSc Student

At Department of Computer Science and Technology, Nanjing University

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210331/6983ff99/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image001.png
Type: image/png
Size: 30328 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210331/6983ff99/attachment-0001.png>


More information about the llvm-dev mailing list