2022-08-01 18:31:38 +00:00
|
|
|
[package]
|
2022-09-12 19:51:43 +00:00
|
|
|
name = "_ch_rust_blake3"
|
2022-08-01 18:31:38 +00:00
|
|
|
version = "0.1.0"
|
|
|
|
|
|
|
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
|
|
|
|
|
|
|
[dependencies]
|
2022-09-13 20:09:39 +00:00
|
|
|
blake3 = "1.2.0"
|
|
|
|
libc = "0.2.132"
|
2022-08-01 18:31:38 +00:00
|
|
|
|
|
|
|
[lib]
|
|
|
|
crate-type = ["staticlib"]
|
|
|
|
|
Improve performance of BLAKE3 by 11% by enabling LTO for Rust
LTO in Rust produces multiple definition of `rust_eh_personality' (and
few others), and to overcome this --allow-multiple-definition has been
added.
Query for benchmark:
SELECT ignore(BLAKE3(materialize('Lorem ipsum dolor sit amet, consectetur adipiscing elit'))) FROM numbers(1000000000) FORMAT `Null`
upstream : Elapsed: 2.494 sec. Processed 31.13 million rows, 249.08 MB (12.48 million rows/s., 99.86 MB/s.)
upstream + rust lto: Elapsed: 13.56 sec. Processed 191.9 million rows, 1.5400 GB (14.15 million rows/s., 113.22 MB/s.)
llvm BLAKE3 : Elapsed: 3.053 sec. Processed 43.24 million rows, 345.88 MB (14.16 million rows/s., 113.28 MB/s.)
Note, I thought about simply replacing it with BLAKE3 from LLVM, but:
- this will not solve LTO issues for Rust (and in future more libraries
could be added)
- it makes integrating_rust_libraries.md useless (and there is even blog
post)
So instead I've decided to add this quirk (--allow-multiple-definition)
to fix builds.
Signed-off-by: Azat Khuzhin <a.khuzhin@semrush.com>
2023-05-06 16:54:56 +00:00
|
|
|
[profile.release]
|
|
|
|
debug = true
|
|
|
|
|
|
|
|
[profile.release-thinlto]
|
|
|
|
inherits = "release"
|
|
|
|
# BLAKE3 module requires "full" LTO (not "thin") to get additional 10% performance benefit
|
|
|
|
lto = true
|