You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+51Lines changed: 51 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -28,6 +28,7 @@ We use the GSoC project size parameters for estimating the expected time complex
28
28
-[Bootstrap of rustc with rustc_codegen_gcc](#Bootstrap-of-rustc-with-rustc_codegen_gcc)
29
29
-[Refactoring of rustc_codegen_ssa to make it more convenient for the GCC codegen](#Refactoring-of-rustc_codegen_ssa-to-make-it-more-convenient-for-the-GCC-codegen)
30
30
-[ABI/Layout handling for the automatic differentiation feature](#abilayout-handling-for-the-automatic-differentiation-feature)
31
+
-[Promoting Parallel Front End](#Promoting-Parallel-Front-End)
31
32
-**Infrastructure**
32
33
-[Implement merge functionality in bors](#implement-merge-functionality-in-bors)
Improving compiler performance has always been a focus of the Rust community and one of the main tasks of the compiler team. [Parallelization](https://rustc-dev-guide.rust-lang.org/parallel-rustc.html) of rust compiler is an important and effective approach.
303
+
Currently, the backend end (codegen part) of the compiler has been parallelized, which has brought a huge improvement in the performance of the compiler. However, there is still much room for improvement in the parallelization of the rust front end.
304
+
305
+
The most important and valuable work are two aspects:
306
+
307
+
A) Deadlock [issues](https://github.com/rust-lang/rust/issues?q=is%3Aopen+label%3AWG-compiler-parallel+deadlock) caused by the execution order of compiler queries in a multithreaded environment.
308
+
[Queries](https://rustc-dev-guide.rust-lang.org/query.html) is a unique design of the Rust compiler, which is used to achieve incremental compilation process. It divides the compiler
309
+
process into various parts and caches the execution results of each part. However, queries cache dependencies between multiple threads may cause deadlock.
310
+
[`work-stealing`](https://en.wikipedia.org/wiki/Work_stealing), a method used to improve parallelization performance, is the core reason.
311
+
312
+
To solve these problems, we need to find the part of the compiler process that causes deadlock through the diagnostics and core dump in issues, and adjust the execution order
313
+
of this part so that there will be no circular dependency on the query caches between multiple threads. This [PR](https://github.com/rust-lang/rust/pull/118488) is a good example of solving a deadlock problem.
314
+
315
+
B) Improving the performance of parallel front end
316
+
i) The parallel front end has implemented parallelization in typeck, mir borrow check and other parts. However, there is still a lot of room for improvement:
317
+
- HIR lowering. Modifying the array structure of `tcx.untracked.definitions` so that it can be accessed efficiently in multiple threads is likely to be the key.
318
+
- macro expansion. How to deal with the order problem of name resolution during macro expansion is a difficult point.
319
+
- lex parsing.
320
+
321
+
Achieving the above goals is of big significance to improving the performance of the Rust compiler.
322
+
323
+
**Expected result**
324
+
325
+
Parallel front-end will not cause deadlock problems. We can ensure usability through [UI testing](https://github.com/rust-lang/rust/pull/132051).
326
+
327
+
The parallel front-end can currently achieve full compilation, and 8 threads can reduce the compilation time by more than 20% compared to a single thread.
328
+
Our goal is to increase it to more than 30%. We can test it through the rustc-perf tool.
329
+
330
+
**Desirable skills**
331
+
332
+
Need a certain understanding of the implementation of the compiler process(such as typeck, hir_lowering, macro expansion).
333
+
334
+
**Project size**
335
+
336
+
Medium
337
+
338
+
**Difficulty**
339
+
340
+
Medium to hard.
341
+
342
+
**Mentor**
343
+
- Sparrow Li ([GitHub](https://github.com/SparrowLii), [Zulip](https://rust-lang.zulipchat.com/#narrow/dm/353056-Sparrow-Li))
0 commit comments