Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

3章 バイトニックソートのベンチマークがRust 1.48.0以降で実行時エラーになる #3

Open
tatsuya6502 opened this issue Nov 20, 2021 · 3 comments
Assignees

Comments

@tatsuya6502
Copy link
Collaborator

tatsuya6502 commented Nov 20, 2021

読者さまからご報告あり。

本リポジトリーに収録されている ch03/bitonic-sorter #4d44da のベンチマークをRust 1.48.0以降で実行すると、メモリー関連の実行時エラー(例:segmentation fault)になる。

$ cargo run --release --example benchmark -- 25
sorting 33554432 integers (128.0 MB)
cpu info: 8 physical cores, 8 logical cores
seq_sort: sorted 33554432 integers in 12.078293916 seconds
thread '<unnamed>' panicked at 'attempted to leave type `nodrop::NoDrop<(epoch::Epoch, garbage::Bag)>` uninitialized, 
which is invalid', ... /.cargo/registry/src/github.com-1ecc6299db9ec823/crossbeam-epoch-0.3.1/src/sync/queue.rs:57:28
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
zsh: segmentation fault  cargo run --release --example benchmark -- 25

Linux、Windows、macOSで発生することを確認済み。(上のログはmacOS arm64での実行結果)

## Rust 1.56.1、macOS arm64
$ rustc -Vv
rustc 1.56.1 (59eed8a2a 2021-11-01)
binary: rustc
commit-hash: 59eed8a2aac0230a8b53e89d4e99d55912ba6b35
commit-date: 2021-11-01
host: aarch64-apple-darwin
release: 1.56.1
LLVM version: 13.0.0
@tatsuya6502
Copy link
Collaborator Author

実行時エラーのメッセージから、 crossbeam-epochクレート v0.3.1 でエラーが起きていることがわかる。

thread '<unnamed>' panicked at 'attempted to leave type `nodrop::NoDrop<(epoch::Epoch, garbage::Bag)>` uninitialized, 
which is invalid', ... /.cargo/registry/src/github.com-1ecc6299db9ec823/crossbeam-epoch-0.3.1/src/sync/queue.rs:57:28

依存関係

$ cargo tree -i crossbeam-epoch
crossbeam-epoch v0.3.1
└── crossbeam-deque v0.2.0
    ├── rayon v1.0.3
    │   └── bitonic-sorter v0.1.0 (... /rustbook/ch03/bitonic-sorter)
    └── rayon-core v1.4.1
        └── rayon v1.0.3 (*)

@tatsuya6502 tatsuya6502 self-assigned this Nov 20, 2021
@tatsuya6502
Copy link
Collaborator Author

Cargo.lock で指定されている crossbeam-epoch のバージョンが古いことが関係している。

cargo update を実行すると解決した。

$ cargo update                 
    Updating crates.io index
      ...
      Adding crossbeam-channel v0.5.1
    Updating crossbeam-deque v0.2.0 -> v0.8.1
    Updating crossbeam-epoch v0.3.1 -> v0.9.5
    Updating crossbeam-utils v0.2.2 -> v0.8.5
      ...
    Updating rayon v1.0.3 -> v1.5.1
    Updating rayon-core v1.4.1 -> v1.9.1
      ...

$ cargo run --release --example benchmark -- 25
...
sorting 33554432 integers (128.0 MB)
cpu info: 8 physical cores, 8 logical cores
seq_sort: sorted 33554432 integers in 12.119723875 seconds
par_sort: sorted 33554432 integers in 2.450031041 seconds
speed up: 4.95x

おそらく crossbeam-epoch v0.3.1に既知の問題があり、最近のバージョンでは解決しているのだと思われる。

@ykomatsu
Copy link
Collaborator

Windows 10でも同じようにパニックしました。

sorting 33554432 integers (128.0 MB)
cpu info: 2 physical cores, 4 logical cores
seq_sort: sorted 33554432 integers in 65.8484445 seconds
thread '<unnamed>' panicked at 'attempted to leave type `nodrop::NoDrop<(epoch::Epoch, garbage::Bag)>` uninitialized, which is invalid', C:\Users\ykoma\.cargo\registry\src\github.com-1ecc6299db9ec823\crossbeam-epoch-0.3.1\src\sync\queue.rs:57:28
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
error: process didn't exit successfully: `target\release\examples\benchmark.exe 25` (exit code: 0xc0000005, STATUS_ACCESS_VIOLATION)
rustc 1.56.1 (59eed8a2a 2021-11-01)
binary: rustc
commit-hash: 59eed8a2aac0230a8b53e89d4e99d55912ba6b35
commit-date: 2021-11-01
host: x86_64-pc-windows-msvc
release: 1.56.1
LLVM version: 13.0.0

GitHub上の Cargo.lock をアップデートしておけば、新規にクローンする人については問題ないと思いますので、後は既にクローンしている人向けに正誤表か README.md で事前に cargo update してもらうよう説明を入れておくのがいいのではないかと思いました。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants