Сообщение 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>
А если всё же поменять местами строчки 1 и 2 ?
MQ>Выхлоп для тех-же 90'000 элементов:
MQ>
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>
А если всё же поменять местами строчки 1 и 2 ?
Ведь остальные способы работают изначально с пустым dst
Пофиксил, и почистил от остатков неполного рефактора: https://godbolt.org/z/5E8sco1Pv
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