Skip to content

[EXPERIMENT] Test 8-bit tags for hashbrown - #146909

Draft
Amanieu wants to merge 1 commit into
rust-lang:mainfrom
Amanieu:perf-hashbrown-8bit
Draft

Amanieu wants to merge 1 commit into
rust-lang:mainfrom
Amanieu:perf-hashbrown-8bit

Conversation

@Amanieu

@Amanieu Amanieu commented Sep 22, 2025

Copy link
Copy Markdown
Member

@rustbot rustbot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-libs Relevant to the library team, which will review and decide on the PR/issue. labels Sep 22, 2025
@Amanieu

Amanieu commented Sep 22, 2025

Copy link
Copy Markdown
Member Author

@bors try @rust-timer queue

@rust-timer

This comment has been minimized.

rust-bors Bot added a commit that referenced this pull request Sep 22, 2025
[EXPERIMENT] Test 8-bit tags for hashbrown
@rust-bors

This comment has been minimized.

@rustbot rustbot added the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Sep 22, 2025
@Amanieu
Amanieu force-pushed the perf-hashbrown-8bit branch from 3142422 to f3c36ce Compare September 22, 2025 20:26
@rustbot rustbot added A-tidy Area: The tidy tool T-bootstrap Relevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap) labels Sep 22, 2025
@Amanieu

Amanieu commented Sep 22, 2025

Copy link
Copy Markdown
Member Author

@bors try cancel

@rust-bors

rust-bors Bot commented Sep 22, 2025

Copy link
Copy Markdown
Contributor

Try build cancelled. Cancelled workflows:

@Amanieu

Amanieu commented Sep 22, 2025

Copy link
Copy Markdown
Member Author

@bors try

rust-bors Bot added a commit that referenced this pull request Sep 22, 2025
[EXPERIMENT] Test 8-bit tags for hashbrown
@rust-bors

This comment has been minimized.

@rust-log-analyzer

Copy link
Copy Markdown
Collaborator

The job aarch64-gnu-llvm-20-1 failed! Check out the build log: (web) (plain enhanced) (plain)

Click to see the possible cause of the failure (guessed by this bot)
[TIMING:start] compile::Std { target: aarch64-unknown-linux-gnu, build_compiler: Compiler { stage: 1, host: aarch64-unknown-linux-gnu, forced_compiler: false }, crates: [], force_recompile: false, extra_rust_args: [], is_for_mir_opt_tests: false }
[TIMING:start] compile::StartupObjects { compiler: Compiler { stage: 1, host: aarch64-unknown-linux-gnu, forced_compiler: false }, target: aarch64-unknown-linux-gnu }
[TIMING:end] compile::StartupObjects { compiler: Compiler { stage: 1, host: aarch64-unknown-linux-gnu, forced_compiler: false }, target: aarch64-unknown-linux-gnu } -- 0.000
##[group]Building stage1 library artifacts (stage1 -> stage1, aarch64-unknown-linux-gnu)
    Updating git repository `https://github.com/gaujay/hashbrown.git`
    Updating crates.io index
---
   Compiling rustc-std-workspace-alloc v1.99.0 (/checkout/library/rustc-std-workspace-alloc)
   Compiling panic_unwind v0.0.0 (/checkout/library/panic_unwind)
   Compiling gimli v0.32.0
[RUSTC-TIMING] rustc_std_workspace_alloc test:false 0.031
   Compiling hashbrown v0.16.0 (https://github.com/gaujay/hashbrown.git?branch=8-bits-tag#fcce0699)
[RUSTC-TIMING] panic_unwind test:false 0.100
error[E0308]: mismatched types
     --> /cargo/git/checkouts/hashbrown-19ea029273e5a732/fcce069/src/control/group/neon.rs:72:61
      |
   72 |             let cmp = neon::vceq_u8(self.0, neon::vdup_n_u8(tag.0));
      |                                             --------------- ^^^^^ expected `u8`, found `i8`
      |                                             |
      |                                             arguments to this function are incorrect
      |
note: function defined here
     --> /checkout/library/core/src/../../stdarch/crates/core_arch/src/arm_shared/neon/generated.rs:10793:8
      |
10793 | pub fn vdup_n_u8(value: u8) -> uint8x8_t {
      |        ^^^^^^^^^
help: you can convert an `i8` to a `u8` and panic if the converted value doesn't fit
      |
   72 |             let cmp = neon::vceq_u8(self.0, neon::vdup_n_u8(tag.0.try_into().unwrap()));
      |                                                                  ++++++++++++++++++++

error[E0308]: mismatched types
    --> /cargo/git/checkouts/hashbrown-19ea029273e5a732/fcce069/src/raw/mod.rs:1707:40
     |
1707 |             for bit in group.match_tag(tag_hash) {
     |                              --------- ^^^^^^^^ expected `Tag`, found `i32`
     |                              |
     |                              arguments to this method are incorrect
     |
note: method defined here
    --> /cargo/git/checkouts/hashbrown-19ea029273e5a732/fcce069/src/control/group/neon.rs:70:19
     |
  70 |     pub(crate) fn match_tag(self, tag: Tag) -> BitMask {
     |                   ^^^^^^^^^       --------

error[E0308]: mismatched types
    --> /cargo/git/checkouts/hashbrown-19ea029273e5a732/fcce069/src/raw/mod.rs:1916:40
     |
1916 |             for bit in group.match_tag(tag_hash) {
     |                              --------- ^^^^^^^^ expected `Tag`, found `i32`
     |                              |
     |                              arguments to this method are incorrect
     |
note: method defined here
    --> /cargo/git/checkouts/hashbrown-19ea029273e5a732/fcce069/src/control/group/neon.rs:70:19
     |
  70 |     pub(crate) fn match_tag(self, tag: Tag) -> BitMask {
     |                   ^^^^^^^^^       --------

error[E0308]: mismatched types
    --> /cargo/git/checkouts/hashbrown-19ea029273e5a732/fcce069/src/raw/mod.rs:4085:39
     |
4085 |         let bitmask = group.match_tag(tag_hash).into_iter();
     |                             --------- ^^^^^^^^ expected `Tag`, found `i32`
     |                             |
     |                             arguments to this method are incorrect
     |
note: method defined here
    --> /cargo/git/checkouts/hashbrown-19ea029273e5a732/fcce069/src/control/group/neon.rs:70:19
     |
  70 |     pub(crate) fn match_tag(self, tag: Tag) -> BitMask {
     |                   ^^^^^^^^^       --------

error[E0308]: mismatched types
    --> /cargo/git/checkouts/hashbrown-19ea029273e5a732/fcce069/src/raw/mod.rs:4139:53
     |
4139 |                 self.bitmask = self.group.match_tag(self.tag_hash).into_iter();
     |                                           --------- ^^^^^^^^^^^^^ expected `Tag`, found `i32`
     |                                           |
     |                                           arguments to this method are incorrect
     |
note: method defined here
    --> /cargo/git/checkouts/hashbrown-19ea029273e5a732/fcce069/src/control/group/neon.rs:70:19
     |
  70 |     pub(crate) fn match_tag(self, tag: Tag) -> BitMask {
     |                   ^^^^^^^^^       --------

[RUSTC-TIMING] alloc test:false 6.295
   Compiling std_detect v0.1.5 (/checkout/library/std_detect)
For more information about this error, try `rustc --explain E0308`.

@rust-bors

rust-bors Bot commented Sep 22, 2025

Copy link
Copy Markdown
Contributor

☀️ Try build successful (CI)
Build commit: d29dae6 (d29dae6c92b168ee50770c080643f888f6b5cd62, parent: ce4beebecb77821734079cff47d8af08f9f27f11)

@rust-timer

This comment has been minimized.

@rust-timer

Copy link
Copy Markdown
Collaborator

Finished benchmarking commit (d29dae6): comparison URL.

Overall result: ❌✅ regressions and improvements - please read the text below

Benchmarking this pull request means it may be perf-sensitive – we'll automatically label it not fit for rolling up. You can override this, but we strongly advise not to, due to possible changes in compiler perf.

Next Steps: If you can justify the regressions found in this try perf run, please do so in sufficient writing along with @rustbot label: +perf-regression-triaged. If not, please fix the regressions and do another perf run. If its results are neutral or positive, the label will be automatically removed.

@bors rollup=never
@rustbot label: -S-waiting-on-perf +perf-regression

Instruction count

Our most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.

mean range count
Regressions ❌
(primary)
0.3% [0.1%, 1.1%] 82
Regressions ❌
(secondary)
0.3% [0.1%, 1.1%] 78
Improvements ✅
(primary)
-1.2% [-1.7%, -0.8%] 2
Improvements ✅
(secondary)
-0.2% [-0.3%, -0.1%] 3
All ❌✅ (primary) 0.2% [-1.7%, 1.1%] 84

Max RSS (memory usage)

Results (primary 2.4%, secondary 0.9%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
3.9% [2.5%, 6.7%] 3
Regressions ❌
(secondary)
2.5% [1.2%, 3.8%] 2
Improvements ✅
(primary)
-2.0% [-2.0%, -2.0%] 1
Improvements ✅
(secondary)
-2.5% [-2.5%, -2.5%] 1
All ❌✅ (primary) 2.4% [-2.0%, 6.7%] 4

Cycles

Results (primary 1.9%, secondary 2.2%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
1.9% [1.9%, 1.9%] 1
Regressions ❌
(secondary)
2.2% [1.7%, 2.6%] 3
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) 1.9% [1.9%, 1.9%] 1

Binary size

Results (primary 0.1%, secondary 0.1%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
0.2% [0.0%, 0.8%] 45
Regressions ❌
(secondary)
0.2% [0.2%, 0.2%] 3
Improvements ✅
(primary)
-0.3% [-0.9%, -0.1%] 7
Improvements ✅
(secondary)
-0.3% [-0.3%, -0.3%] 1
All ❌✅ (primary) 0.1% [-0.9%, 0.8%] 52

Bootstrap: 472.191s -> 472.724s (0.11%)
Artifact size: 389.95 MiB -> 390.24 MiB (0.07%)

@rustbot rustbot added perf-regression Performance regression. and removed S-waiting-on-perf Status: Waiting on a perf run to be completed. labels Sep 22, 2025
@bors

bors commented Nov 22, 2025

Copy link
Copy Markdown
Collaborator

☔ The latest upstream changes (presumably #149159) made this pull request unmergeable. Please resolve the merge conflicts.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-tidy Area: The tidy tool perf-regression Performance regression. S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-bootstrap Relevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap) T-libs Relevant to the library team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants