Size: a a a

2020 December 11

y

ymdev in Rust Beginners
А цикл задействовать проблематично, так как простых чисех там ооочень много. И возвращать вектор с ними было бы проблематично. Поэтому лучшее, что можно сделать - это не трогать их :)
источник

IB

Ilya Bogdanov in Rust Beginners
ymdev
Я пытался код перевести с плюсов на раст один в один. Ну и типо плюсы собрать, ничего не оптимизируя и раст также
окей, если задача стояла именно в таком виде - ты получил результат. Неоптимизированный раст медленнее, чем неоптимизированные плюсы
источник

MB

Mikail Bagishov in Rust Beginners
Иван Лещенко
Там в LLVM IR уже вызов не попадает
Когда ты собираешь в дебаге, ты по сути замеряешь качество LLVM IR, генерируемого компилятором. Это довольно странное измерение.
источник

MB

Mikail Bagishov in Rust Beginners
https://doc.rust-lang.org/stable/std/hint/fn.black_box.html
вот эта штука в помощь
А еще лучше просто как-нибудь обрабатывай результат
источник

EG

Emmanuel Goldstein in Rust Beginners
ymdev
Я вообщем сделал так https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=90864e118fa7d974ccd70ea952c9d470
На моем дохленьком компе выполняется за 48.61653469s, запускаю через cargo run

И собрал cpp версию g++ ./file.cpp && ./a.out, и он выполнился за 24.8624 sec

Че еще можно сотворить в растом, чтобы он быстрее работал?
Раст очень дорогой в дебаг-режиме, это известный факт
источник

EG

Emmanuel Goldstein in Rust Beginners
Собирать надо в релизе
источник

MB

Mikail Bagishov in Rust Beginners
Например  можно печатать сумму чисел, для которых is_prime == true
источник

EG

Emmanuel Goldstein in Rust Beginners
У тебя там, например, проверки на переполнение остались, по идее.
источник

MB

Mikail Bagishov in Rust Beginners
Mikail Bagishov
Когда ты собираешь в дебаге, ты по сути замеряешь качество LLVM IR, генерируемого компилятором. Это довольно странное измерение.
Ой, я @ymdev отвечал, сорри
источник

EG

Emmanuel Goldstein in Rust Beginners
Как минимум нужно ставить overflow-checks = false
источник

EG

Emmanuel Goldstein in Rust Beginners
Или использовать .wrapping_* операторы
источник

ИЛ

Иван Лещенко... in Rust Beginners
Mikail Bagishov
https://doc.rust-lang.org/stable/std/hint/fn.black_box.html
вот эта штука в помощь
А еще лучше просто как-нибудь обрабатывай результат
А что нужно запихнуть в black_box, чтобы мы получили no-op но без вырезания кода?
источник

EG

Emmanuel Goldstein in Rust Beginners
В плюсах у тебя нету этих проверок по умолчанию, по идее
источник

ИЛ

Иван Лещенко... in Rust Beginners
Я пробовал пихать результат is_prime, но компилятор все-равно вырезал код
источник

EG

Emmanuel Goldstein in Rust Beginners
Иван Лещенко
Я пробовал пихать результат is_prime, но компилятор все-равно вырезал код
Не должен
Покажи код с блекбоксом
источник

EG

Emmanuel Goldstein in Rust Beginners
Если ты пихаешь результат is_prime в блэкбокс, то он будет вызван
источник

MB

Mikail Bagishov in Rust Beginners
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=d192e036d80549053efc35acf4a5b3c4
А еще я немного поменял касты и вроде как на секунду ускорилось
источник

ИЛ

Иван Лещенко... in Rust Beginners
Emmanuel Goldstein
Если ты пихаешь результат is_prime в блэкбокс, то он будет вызван
источник

EG

Emmanuel Goldstein in Rust Beginners
Иван Лещенко
Я пробовал пихать результат is_prime, но компилятор все-равно вырезал код
Кстати, ещё ты замеряешь время через SystemTime, не делай этого
источник

EG

Emmanuel Goldstein in Rust Beginners
Есть Instant для этой цели
источник