Это только код самой функции, а не полный код всего теста производительности. Проблема скорее всего в последнем.
Нужен полноценный MCVE, что бы мы гаданием неуказанной информации не занимались.
Это только код самой функции, а не полный код всего теста производительности. Проблема скорее всего в последнем.
Нужен полноценный MCVE, что бы мы гаданием неуказанной информации не занимались.
extern crate test;
use self::test::Bencher;
#[bench]
fn benchmark(b: &mut Bencher)
{
b.iter(|| {
let operations = vec![
Operation::Print("Hello"), // Print использует &'static str
Operation::MakeLabel(0),
Operation::MakeJump(1),
Operation::Print("Не напечатается"),
Operation::MakeLabel(1),
Operation::Print("Мы здесь :)"),
];
let mut map: HashMap<usize,usize> = HashMap::new();
sort_labels(&mut map,operations);
})
}
Опять же, с критерионом получается в районе копеечных time: [137.35 ns 140.80 ns 144.49 ns]. С bencher
время +/- то же - сотня с хвостом наносекунд. Что ты делаешь что бы у тебя миллисекунды вылезали?
ты замеряешь скорость выполнения программы или участка кода?
Ну, логично, что плохой.
Это ж всего лишь пример, что можно измерить и увидеть (измерения, кстати, не всегда в бенчмарках производятся).
Смысла в
println!
внутри бенчмарка нет
Если мы не измеряем println!.
это означает, что в нем только 1 элемент
Для примера это было не важно. Полагаю у автора вопроса есть более адекватный источник данных и лучшее представление о том, что должно быть в данных, мы ж тут больше, как верно замечено, в телепатии упражнялись
Теперь это скорее «следствие ведут крабоведы»
Так да измеряю как раз скорость выполнения именно участка кода, а не всей программы, конкретно как
sort_labels записывает все в HashMap
Внимательно прочти мой коммент Ускорить цикл for и предоставь всю информацию.
Не знаю почему и как, но после того как убрал lto = true в Cargo.toml и обновился до найтли 2018-11-12 cкорость стала быстрее и теперь равна 831 ns при векторе размером 34. Спасибо всем тем кто помогал
Покажите вывод cat /proc/cpuinfo | grep constant_tsc
.
Это к чему. Если tsc на разных ядрах идут с разной скоростью, то показывать может что попало.
ну и заодно:
cat /sys/devices/system/clocksource/clocksource0/available_clocksource
и
cat /sys/devices/system/clocksource/clocksource0/current_clocksource