Ускорить цикл for

Это только код самой функции, а не полный код всего теста производительности. Проблема скорее всего в последнем.

Нужен полноценный 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 время +/- то же - сотня с хвостом наносекунд. Что ты делаешь что бы у тебя миллисекунды вылезали? :slight_smile:

2 лайка

ты замеряешь скорость выполнения программы или участка кода?

Ну, логично, что плохой.
Это ж всего лишь пример, что можно измерить и увидеть (измерения, кстати, не всегда в бенчмарках производятся).

Смысла в println! внутри бенчмарка нет

Если мы не измеряем println!.

это означает, что в нем только 1 элемент

Для примера это было не важно. Полагаю у автора вопроса есть более адекватный источник данных и лучшее представление о том, что должно быть в данных, мы ж тут больше, как верно замечено, в телепатии упражнялись :slight_smile:

Теперь это скорее «следствие ведут крабоведы» :slight_smile:

Так да измеряю как раз скорость выполнения именно участка кода, а не всей программы, конкретно как
sort_labels записывает все в HashMap

Внимательно прочти мой коммент Ускорить цикл for и предоставь всю информацию.

Не знаю почему и как, но после того как убрал lto = true в Cargo.toml и обновился до найтли 2018-11-12 cкорость стала быстрее и теперь равна 831 ns при векторе размером 34. Спасибо всем тем кто помогал :smile:

1 лайк

Покажите вывод cat /proc/cpuinfo | grep constant_tsc.

Это к чему. Если tsc на разных ядрах идут с разной скоростью, то показывать может что попало.

ну и заодно:
cat /sys/devices/system/clocksource/clocksource0/available_clocksource
и
cat /sys/devices/system/clocksource/clocksource0/current_clocksource