Skip to content

Commit 6e185f6

Browse files
authored
Merge pull request #21 from SparrowLii/parallel-front-end
Add a project idea about promoting parallel front end
2 parents 8995551 + e71fe2d commit 6e185f6

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

README.md

Lines changed: 53 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+
- [Improving parallel frontend](#improving-parallel-frontend)
3132
- **Infrastructure**
3233
- [Implement merge functionality in bors](#implement-merge-functionality-in-bors)
3334
- [Improve bootstrap](#Improve-bootstrap)
@@ -294,6 +295,58 @@ Medium to hard.
294295
**Zulip streams**
295296
- [Idea discussion](https://rust-lang.zulipchat.com/#narrow/channel/390790-wg-autodiff)
296297

298+
### Improving parallel frontend
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 frontend.
304+
305+
The most important and valuable work in this area are two aspects:
306+
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+
[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 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+
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+
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+
- 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 problem.
319+
- Lexing and/or parsing.
320+
321+
Achieving the above goals is of big significance to improving the performance of the Rust compiler.
322+
323+
The project could choose either one of these two areas, or try to tackle both of them together.
324+
325+
**Expected result**
326+
327+
Parallel frontend will not cause deadlock issues. We can ensure usability through [UI testing](https://github.com/rust-lang/rust/pull/132051).
328+
329+
The performance of the compiler will be improved, ideally at least by a couple of percentage points.
330+
331+
**Desirable skills**
332+
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.
334+
335+
**Project size**
336+
337+
Medium to hard (depending on the chosen scope).
338+
339+
**Difficulty**
340+
341+
Medium to hard.
342+
343+
**Mentor**
344+
- Sparrow Li ([GitHub](https://github.com/SparrowLii), [Zulip](https://rust-lang.zulipchat.com/#narrow/dm/353056-Sparrow-Li))
345+
346+
**Zulip streams**
347+
- Idea discussion (TODO)
348+
- [Parallel frontend working group](https://rust-lang.zulipchat.com/#narrow/channel/187679-t-compiler.2Fwg-parallel-rustc)
349+
297350
## Infrastructure
298351

299352
### Implement merge functionality in bors

0 commit comments

Comments
 (0)