Skip to content

Commit 6cdd011

Browse files
committed
Add a project idea about promoting parallel front end
1 parent 8995551 commit 6cdd011

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

README.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ We use the GSoC project size parameters for estimating the expected time complex
2828
- [Bootstrap of rustc with rustc_codegen_gcc](#Bootstrap-of-rustc-with-rustc_codegen_gcc)
2929
- [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)
3030
- [ABI/Layout handling for the automatic differentiation feature](#abilayout-handling-for-the-automatic-differentiation-feature)
31+
- [Promoting Parallel Front End](#Promoting-Parallel-Front-End)
3132
- **Infrastructure**
3233
- [Implement merge functionality in bors](#implement-merge-functionality-in-bors)
3334
- [Improve bootstrap](#Improve-bootstrap)
@@ -294,6 +295,56 @@ Medium to hard.
294295
**Zulip streams**
295296
- [Idea discussion](https://rust-lang.zulipchat.com/#narrow/channel/390790-wg-autodiff)
296297

298+
### Promoting-Parallel-Front-End
299+
300+
**Description**
301+
302+
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))
344+
345+
**Zulip streams**
346+
- [Zulip channel](https://rust-lang.zulipchat.com/#narrow/channel/187679-t-compiler.2Fwg-parallel-rustc)
347+
297348
## Infrastructure
298349

299350
### Implement merge functionality in bors

0 commit comments

Comments
 (0)