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
+21-19Lines changed: 21 additions & 19 deletions
Original file line number
Diff line number
Diff line change
@@ -28,7 +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)
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.
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 frontend.
304
304
305
-
The most important and valuable work are two aspects:
305
+
The most important and valuable work in this area are two aspects:
306
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.
307
+
A) Diagnosing and fixing 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
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.
309
+
process into various parts and caches the execution results of each part. However, queries caching 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
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.
312
+
To solve these problems, we need to find the part of the compiler process that causes deadlock through diagnosing coredumps in issues, and adjusting the execution order
313
+
of this part of code so that there will be no circular dependencies 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
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:
315
+
B) Improving the performance of the parallel frontend
316
+
The parallel frontend has implemented parallelization in type checking, MIR borrow checking and other parts of the compiler. However, there is still a lot of room for improvement:
317
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.
318
+
-Macro expansion. How to deal with the order problem of name resolution during macro expansion is a difficult problem.
319
+
-Lexing and/or parsing.
320
320
321
321
Achieving the above goals is of big significance to improving the performance of the Rust compiler.
322
322
323
+
The project could choose either one of these two areas, or try to tackle both of them together.
324
+
323
325
**Expected result**
324
326
325
-
Parallel front-end will not cause deadlock problems. We can ensure usability through [UI testing](https://github.com/rust-lang/rust/pull/132051).
327
+
Parallel frontend will not cause deadlock issues. We can ensure usability through [UI testing](https://github.com/rust-lang/rust/pull/132051).
326
328
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
+
The performance of the compiler will be improved, ideally at least by a couple of percentage points.
329
330
330
331
**Desirable skills**
331
332
332
-
Need a certain understanding of the implementation of the compiler process(such as typeck, hir_lowering, macro expansion).
333
+
Intermediate knowledge of Rust. A basic understanding of the implementation of the compiler process(such as typeck, hir_lowering, macro expansion) would be ideal.
333
334
334
335
**Project size**
335
336
336
-
Medium
337
+
Medium to hard (depending on the chosen scope).
337
338
338
339
**Difficulty**
339
340
@@ -343,7 +344,8 @@ Medium to hard.
343
344
- Sparrow Li ([GitHub](https://github.com/SparrowLii), [Zulip](https://rust-lang.zulipchat.com/#narrow/dm/353056-Sparrow-Li))
0 commit comments