
Nikolai
26.02.2017
18:16:47

26.02.2017
18:17:43
да понял, ненашел таких файлов
он ищеть inotify.h

Andrey
26.02.2017
18:25:54
есть команда locate inotify.h

Google

Andrey
26.02.2017
18:26:10
вот она покажет каких путей у тебя не хватает. Если такой файл вообще есть в системе

26.02.2017
18:27:25
на windowsе ?
или
?

Andrey
26.02.2017
18:29:07
нет, это для линукса

26.02.2017
18:29:32
у меня win

Alex Фэils?︙
26.02.2017
18:31:27
В смаке, как я думаю

Dmitriy
26.02.2017
23:33:43
/stat@combot

Combot
26.02.2017
23:33:44
combot.org/chat/-1001031904034

Monday Begins on Saturday
27.02.2017
08:30:53
Объясните мне кто-нибудь почему у меня есть vector<int> и list<int> и если я вычисляю сумму всех элементов, то операция на list'е оказывается быстрее. Почему так? Я всегда думал что вектор будет быстрее из-за того что там всё в одном блоке памяти лежит

Taras
27.02.2017
08:32:09

Monday Begins on Saturday
27.02.2017
08:33:06
Я на 10 000 000 создавал, ща код примера выложу где-нибудь
Так. Интересно. С -O3 другие результаты

Google

Stanislav
27.02.2017
08:44:17
о, сегодня ж очередная встреча коммитета

Tema
27.02.2017
08:45:19

Alex Фэils?︙
27.02.2017
08:45:33

Sergey
27.02.2017
08:46:18

Monday Begins on Saturday
27.02.2017
08:46:18
Да я уже разобрался. С флагами оптимизаций сложения вектора быстрее. Причём через std::accumulate быстрее чем через просто цикл
Код-то будет? :)
https://gist.github.com/shelomentsevd/9b5764bacd2698056097d7c683dbf2c0

Mikhail
27.02.2017
08:48:26
не может он быстрее или у тебя for криво написан
кароче, нужен код :)
И в дебаге лист все равно медленне должен быть

Stanislav
27.02.2017
08:49:39
http://melpon.org/wandbox/permlink/I8MYeXPdo8tLvPAb

Taras
27.02.2017
08:49:47

Stanislav
27.02.2017
08:49:55
без всяких оптимизаций видно что лист все равно медленнее

Taras
27.02.2017
08:50:01
Попробуй свой контейнер написать

Vladislav
27.02.2017
08:50:34

Дед Пегас
27.02.2017
08:51:39
Ну вектор быстрей по доступу, это логиншно жеж.

Monday Begins on Saturday
27.02.2017
08:52:52
Первый без -O3 второй с O3

Google

Vladislav
27.02.2017
08:53:45
wat
А, произвольный доступ - конечно.

Monday Begins on Saturday
27.02.2017
08:53:49
В первом случае list быстрее. Чудеса

Sergey
27.02.2017
08:53:51

Taras
27.02.2017
08:54:36

Monday Begins on Saturday
27.02.2017
08:54:50

Taras
27.02.2017
08:54:51
Он сам по себе медленный

Дед Пегас
27.02.2017
08:55:07
Юзай деку вместо листа)

Taras
27.02.2017
08:55:27

Monday Begins on Saturday
27.02.2017
08:55:44

Taras
27.02.2017
08:56:31

Дед Пегас
27.02.2017
08:56:32
http://melpon.org/wandbox/permlink/I8MYeXPdo8tLvPAb
242445 у deque и 696983 у list

Monday Begins on Saturday
27.02.2017
08:57:26
Юзай деку вместо листа)
Надо попробовать. Вообще мне просто на собеседовании спросили что быстрее и почему, а я как-то не смог ответить, теперь вот пытаюсь узнать из-за чего сложение по вектору быстрее

Дед Пегас
27.02.2017
08:58:22
Вектор быстрей при доступе при последовательном доступе потому, что элементы последовательно в памяти расположены...
Но тут ваще непростой вопрос.)

Monday Begins on Saturday
27.02.2017
08:58:42

Sergey
27.02.2017
08:58:50

Дед Пегас
27.02.2017
08:59:02
Думаю, они хотели узнать, а почему последовательное расположение в памяти быстрей, чем рандомно...

Stanislav
27.02.2017
08:59:40
Sum is: 25000426
List: 222145 microseconds.
Sum is: 25000426
Vector: 39549 microseconds.
Sum is: 25000426
List cycle: 205900 microseconds.
Sum is: 25000426
Vector cycle: 171095 microseconds.
если ком уто интересно vs2015

Google

Stanislav
27.02.2017
09:00:01
без всяких флагов оптимизаций

Monday Begins on Saturday
27.02.2017
09:00:31

Дед Пегас
27.02.2017
09:00:54

Admin
ERROR: S client not available

Sergey
27.02.2017
09:01:00

Дед Пегас
27.02.2017
09:01:55
Вот что я забыл, это по скорости изменения коллекции (добавление/удаление) быстрей...

Vladislav
27.02.2017
09:02:40
list, заполненный в цикле добавлением в конец, тоже будет расположен в памяти относительно последовательно

Sergey
27.02.2017
09:03:07

Дед Пегас
27.02.2017
09:03:38

Monday Begins on Saturday
27.02.2017
09:03:58
В общем надо про память читать. Я правильно понял?

Дед Пегас
27.02.2017
09:04:04
И про проц)
Воще, кэш же!

Monday Begins on Saturday
27.02.2017
09:05:20
Я это себе туго представляю, но получается что вектор какую-то свою часть хранит прямо в кэше, а список всё хранит в памяти?

Дед Пегас
27.02.2017
09:05:38
Туда ж целыми кусочками копируются данные из памяти)

Sergey
27.02.2017
09:06:38

Sasha
27.02.2017
09:08:11

Sergey
27.02.2017
09:08:53

Monday Begins on Saturday
27.02.2017
09:12:43
Кэш это тоже по сути память же? Может ли быть такое, что list случайно весь попадет в кэш и тогда операция по нему будет быстрее?

Michael
27.02.2017
09:15:00
лист очень маловероятно, вектор да

Sergey
27.02.2017
09:15:12
В общем. И вектор, и список лежат в памяти. Вектор — последовательно, а лист — не всегда, у каждой вершинки есть указатель на следующую и он может указывать на другой участок памяти
Просто когда процессор хочет посчитать, например, ту же сумму чисел в кеш отправляется целый кешлайн, например, 64 байта. Он берет первую чиселку, кладет в аккумулятор. Идет за второй, а она такая — оп, тоже есть в кешлайне, за ней не надо идти в оперативную память по медленной шине. Таким образом в кешлайне лежит, например, сразу восемь чиселок, которые надо добавить к аккумулятору.
Если лист лежит в памяти последовательно, то процесс, по идее, должен быть таким же. А если элементы как-то неоднородно в памяти лежат, за ними приходится ходить в память (опять-таки, шина в оперативную память очень медленная и читать оттуда очень дорого по сравнению с чтением из кэша)

Google

Sergey
27.02.2017
09:16:33
В общем. И вектор, и список лежат в памяти. Вектор — последовательно, а лист — не всегда, у каждой вершинки есть указатель на следующую и он может указывать на другой участок памяти
Просто когда процессор хочет посчитать, например, ту же сумму чисел в кеш отправляется целый кешлайн, например, 64 байта. Он берет первую чиселку, кладет в аккумулятор. Идет за второй, а она такая — оп, тоже есть в кешлайне, за ней не надо идти в оперативную память по медленной шине. Таким образом в кешлайне лежит, например, сразу восемь чиселок, которые надо добавить к аккумулятору.
Если лист лежит в памяти последовательно, то процесс, по идее, должен быть таким же. А если элементы как-то неоднородно в памяти лежат, за ними приходится ходить в память (опять-таки, шина в оперативную память очень медленная и читать оттуда очень дорого по сравнению с чтением из кэша)
Господи, чем я занимаюсь, лишь бы не работать...


Дед Пегас
27.02.2017
09:17:17
Учишь людей. И это хорошо. Омниссия одобряет!


Aleksei
27.02.2017
09:18:00
В общем. И вектор, и список лежат в памяти. Вектор — последовательно, а лист — не всегда, у каждой вершинки есть указатель на следующую и он может указывать на другой участок памяти
Просто когда процессор хочет посчитать, например, ту же сумму чисел в кеш отправляется целый кешлайн, например, 64 байта. Он берет первую чиселку, кладет в аккумулятор. Идет за второй, а она такая — оп, тоже есть в кешлайне, за ней не надо идти в оперативную память по медленной шине. Таким образом в кешлайне лежит, например, сразу восемь чиселок, которые надо добавить к аккумулятору.
Если лист лежит в памяти последовательно, то процесс, по идее, должен быть таким же. А если элементы как-то неоднородно в памяти лежат, за ними приходится ходить в память (опять-таки, шина в оперативную память очень медленная и читать оттуда очень дорого по сравнению с чтением из кэша)
в листе еще есть оверхед на адрес следующего элемента


Дед Пегас
27.02.2017
09:18:36
Да, поэтому кол-во чиселок к кэше будет меньше.

Sergey
27.02.2017
09:19:20
А, ну да
Тем более, в случае с std::list это doubly linked list, поэтому там два указателя


Monday Begins on Saturday
27.02.2017
09:20:14
В общем. И вектор, и список лежат в памяти. Вектор — последовательно, а лист — не всегда, у каждой вершинки есть указатель на следующую и он может указывать на другой участок памяти
Просто когда процессор хочет посчитать, например, ту же сумму чисел в кеш отправляется целый кешлайн, например, 64 байта. Он берет первую чиселку, кладет в аккумулятор. Идет за второй, а она такая — оп, тоже есть в кешлайне, за ней не надо идти в оперативную память по медленной шине. Таким образом в кешлайне лежит, например, сразу восемь чиселок, которые надо добавить к аккумулятору.
Если лист лежит в памяти последовательно, то процесс, по идее, должен быть таким же. А если элементы как-то неоднородно в памяти лежат, за ними приходится ходить в память (опять-таки, шина в оперативную память очень медленная и читать оттуда очень дорого по сравнению с чтением из кэша)
? я все понял, спасибо


Alex Фэils?︙
27.02.2017
09:21:13
В общем. И вектор, и список лежат в памяти. Вектор — последовательно, а лист — не всегда, у каждой вершинки есть указатель на следующую и он может указывать на другой участок памяти
Просто когда процессор хочет посчитать, например, ту же сумму чисел в кеш отправляется целый кешлайн, например, 64 байта. Он берет первую чиселку, кладет в аккумулятор. Идет за второй, а она такая — оп, тоже есть в кешлайне, за ней не надо идти в оперативную память по медленной шине. Таким образом в кешлайне лежит, например, сразу восемь чиселок, которые надо добавить к аккумулятору.
Если лист лежит в памяти последовательно, то процесс, по идее, должен быть таким же. А если элементы как-то неоднородно в памяти лежат, за ними приходится ходить в память (опять-таки, шина в оперативную память очень медленная и читать оттуда очень дорого по сравнению с чтением из кэша)
#fyi #list #vector #memory

Cyber
27.02.2017
09:38:48

Viktor
27.02.2017
10:36:01
Народ, не могли бы вы объяснить, что значит эта запись на Си?
полный контекст

Daniil
27.02.2017
10:37:36
Спасибо за скрины вместо пасты