Информация об изменениях

Сообщение Re[4]: замеры) от 26.07.2023 14:12

Изменено 26.07.2023 14:21 Sm0ke

Re[4]: замеры)
Здравствуйте, McQwerty, Вы писали:

MQ>Здравствуйте, Sm0ke, Вы писали:


S>>Замерил на годболте через chrono: https://godbolt.org/z/dK4jsoxG3

S>>На массиве с 90к элементов

MQ>Дополнил тест следующим вариантом (с предварительным resize и последующим erase для v_dest):

MQ>
MQ>    {
MQ>        v_dest.clear();
MQ>        v_dest. resize (v_src. size ()); // 1
MQ>        const some_time v_start = std::chrono::system_clock::now(); // 2
MQ>        my_container::iterator d = v_dest. begin ();
MQ>        for (auto x : v_src)
MQ>        {
MQ>            * d = x >> 1;
MQ>            d += x & 1 ^ 1;
MQ>        }
MQ>        v_dest. erase (d, v_dest. end ());
MQ>        const some_time v_stop = std::chrono::system_clock::now();
MQ>        std::cout
MQ>            << "mcq: "
MQ>            << std::chrono::duration_cast<std::chrono::microseconds>(v_stop - v_start)
MQ>            << '\n'
MQ>        ;
MQ>    }
MQ>


А если всё же поменять местами строчки 1 и 2 ?

MQ>Выхлоп для тех-же 90'000 элементов:

MQ>

Program returned: 0
MQ>for: 337us
MQ>mcq: 132us
MQ>for: 195us
MQ>algo: 181us
MQ>algo: 192us
MQ>for div: 415us
MQ>for div: 457us
MQ>algo div: 526us
MQ>algo div: 600us

Re[4]: замеры)
Здравствуйте, McQwerty, Вы писали:

MQ>Здравствуйте, Sm0ke, Вы писали:


S>>Замерил на годболте через chrono: https://godbolt.org/z/dK4jsoxG3

S>>На массиве с 90к элементов

MQ>Дополнил тест следующим вариантом (с предварительным resize и последующим erase для v_dest):

MQ>
MQ>    {
MQ>        v_dest.clear();
MQ>        v_dest. resize (v_src. size ()); // 1
MQ>        const some_time v_start = std::chrono::system_clock::now(); // 2
MQ>        my_container::iterator d = v_dest. begin ();
MQ>        for (auto x : v_src)
MQ>        {
MQ>            * d = x >> 1;
MQ>            d += x & 1 ^ 1;
MQ>        }
MQ>        v_dest. erase (d, v_dest. end ());
MQ>        const some_time v_stop = std::chrono::system_clock::now();
MQ>        std::cout
MQ>            << "mcq: "
MQ>            << std::chrono::duration_cast<std::chrono::microseconds>(v_stop - v_start)
MQ>            << '\n'
MQ>        ;
MQ>    }
MQ>


А если всё же поменять местами строчки 1 и 2 ?
Ведь остальные способы работают изначально с пустым dst

Пофиксил, и почистил от остатков неполного рефактора: https://godbolt.org/z/5E8sco1Pv

mcq: 266us
mcq: 113us
for: 108us
for: 107us
algo: 118us
algo: 152us
for div: 382us
for div: 318us
algo div: 481us
algo div: 474us