Герб Саттер на Channel9: Modern C++
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 06.04.14 06:59
Оценка: 22 (6)
Скорей всего, большинство уже успело посмотреть выступление Герба Саттера на Channel9, но, мало ли. Мне оно показалось довольно интересным.

Наиболее интересное для не совсем новичков в C++ в конце лекции, так замеры производительности на вставках в середину массива и списка были для меня удивительным открытием. Кроме того, Саттер немного рассказывает о новом проекте от Microsoft: ParallelSTL, который должен стать доступным публично на следующей неделе. Надежды на кроссплатформенность ParallelSTL не большие, но вдруг?
Re: Герб Саттер на Channel9: Modern C++
От: koodeer  
Дата: 06.04.14 07:57
Оценка:
Здравствуйте, kaa.python.

А чем будет отличаться Parallel STL от уже существующей PPL?
Re[2]: Герб Саттер на Channel9: Modern C++
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 06.04.14 08:03
Оценка:
Здравствуйте, koodeer, Вы писали:

K>Здравствуйте, kaa.python.


K>А чем будет отличаться Parallel STL от уже существующей PPL?


А вот это мы узнаем тогда, когда проект будет открыт. Возможно, в крайнем случае я на это надеюсь и подобное ожидание следует из названия, ParallelSTL будет доступен на всех платформах, по аналогии с STL. Дело в том, что для меня Windows-only библиотека имеет нулевую ценность.
Re: Герб Саттер на Channel9: Modern C++
От: MTD https://github.com/mtrempoltsev
Дата: 06.04.14 10:47
Оценка: +1
Здравствуйте, kaa.python, Вы писали:

KP>замеры производительности на вставках в середину массива и списка были для меня удивительным открытием


Ну заинтриговал. Кто кого заборол?
Re[2]: Герб Саттер на Channel9: Modern C++
От: antropolog  
Дата: 06.04.14 17:14
Оценка: +1 -1
Здравствуйте, MTD, Вы писали:

MTD>Ну заинтриговал. Кто кого заборол?


кеши побороли асимптотику
Re[3]: Герб Саттер на Channel9: Modern C++
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 06.04.14 17:19
Оценка:
MTD>>Ну заинтриговал. Кто кого заборол?
A>кеши побороли асимптотику

Ну а если еще Mill CPU доведут до промышленного исполнения, то победа будет еще более весомой. Кстати, из лекции видно, что побороли не только и не столько кэши, но еще и prefetcher (кстати, как его на русском завать?), что сильно заметно на схемах за переделами L1 и L2.
Re: Герб Саттер на Channel9: Modern C++
От: Jack128  
Дата: 06.04.14 18:31
Оценка:
Здравствуйте, kaa.python, Вы писали:
KP>замеры производительности на вставках в середину массива и списка были для меня удивительным открытием.

Э-э-э, он же списки чисел обрабатывает. Это не интересно и очевидно. Гораздо интереснее, если бы были вставки больших объектов. Ну там вектор векторов vs linked_list векторов. Ну и набор графиков, что будет есть вектора пустые. Или в них по 500 байт данных. Или по 1КБ, или по 10КБ..
Re: Герб Саттер на Channel9: Modern C++
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 07.04.14 10:56
Оценка:
Ну и продолжение рассказа о производительности современных процессоров на конференции //build/.
Re: Герб Саттер на Channel9: Modern C++
От: niXman Ниоткуда https://github.com/niXman
Дата: 07.04.14 11:35
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>... Кроме того, Саттер немного рассказывает о новом проекте от Microsoft: ParallelSTL, который должен стать доступным публично на следующей неделе. Надежды на кроссплатформенность ParallelSTL не большие, но вдруг?


а чем GCC`шное расширение не угодило? работает и в венде и в линуксе, внутрях использует OpenMP.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[2]: Герб Саттер на Channel9: Modern C++
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 07.04.14 11:37
Оценка:
Здравствуйте, niXman, Вы писали:

X>а чем GCC`шное расширение не угодило? работает и в венде и в линуксе, внутрях использует OpenMP.


Тем что оно не входит в Clang? Или входит?
Re[3]: Герб Саттер на Channel9: Modern C++
От: niXman Ниоткуда https://github.com/niXman
Дата: 07.04.14 11:39
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Тем что оно не входит в Clang? Или входит?

ну.. если учесть, что libc++ успешно работает только на линуксе, и частично на макоси, то в венде тебе по любому придется использовать libstdc++. и пофег, clang это или GCC.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[4]: Герб Саттер на Channel9: Modern C++
От: niXman Ниоткуда https://github.com/niXman
Дата: 07.04.14 11:41
Оценка:
Здравствуйте, niXman, Вы писали:

X>ну.. если учесть, что libc++ успешно работает только на линуксе, и частично на макоси

кстати тут я уже не уверен, сталкивался с этим больше года назад. с тех пор наверное уже допилили?...
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[4]: Герб Саттер на Channel9: Modern C++
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 07.04.14 11:41
Оценка: +1
Здравствуйте, niXman, Вы писали:

X>ну.. если учесть, что libc++ успешно работает только на линуксе, и частично на макоси, то в венде тебе по любому придется использовать libstdc++. и пофег, clang это или GCC.


На OSX я могу только libc++ использовать т.к. libstdc++ крайне древний по причине анального GPLv3 рабства.
Re[5]: Герб Саттер на Channel9: Modern C++
От: niXman Ниоткуда https://github.com/niXman
Дата: 07.04.14 11:43
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>На OSX я могу только libc++ использовать т.к. libstdc++ крайне древний по причине анального GPLv3 рабства.

ну хз... я могу и то и то использовать.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[4]: Герб Саттер на Channel9: Modern C++
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 07.04.14 11:47
Оценка:
Здравствуйте, niXman, Вы писали:

X>Здравствуйте, kaa.python, Вы писали:


KP>>На OSX я могу только libc++ использовать т.к. libstdc++ крайне древний по причине анального GPLv3 рабства.

X>ну хз... я могу и то и то использовать.

В моем случае проблема в том, что с OSX выпилено все что связанно с GCC (GDB, libstdc++ и т.д.) начиная с перехода на GPLv3, т.е. с года так 2008-2009. Поэтому у нас тут только libc++ да LLDB здравствуют А собираемый из исходников GDB в корку вешает машину раз в день
Re[5]: Герб Саттер на Channel9: Modern C++
От: niXman Ниоткуда https://github.com/niXman
Дата: 07.04.14 11:49
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>... GPLv3 рабства.

кстати, о чем речь?
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[5]: Герб Саттер на Channel9: Modern C++
От: niXman Ниоткуда https://github.com/niXman
Дата: 07.04.14 11:50
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>В моем случае проблема в том, что с OSX выпилено все что связанно с GCC (GDB, libstdc++ и т.д.) начиная с перехода на GPLv3, т.е. с года так 2008-2009. Поэтому у нас тут только libc++ да LLDB здравствуют А собираемый из исходников GDB в корку вешает машину раз в день


полагаю, виноваты руки
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[6]: Герб Саттер на Channel9: Modern C++
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 07.04.14 11:52
Оценка:
Здравствуйте, niXman, Вы писали:

X>полагаю, виноваты руки


У авторов HomeBrew? Возможно, лично я не вижу смыслу колдовать над сборкой отладчика, если есть уже собранная, отлично работающая алтернатива.
Re[6]: Герб Саттер на Channel9: Modern C++
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 07.04.14 12:04
Оценка:
Здравствуйте, niXman, Вы писали:

KP>>... GPLv3 рабства.

X>кстати, о чем речь?

Она "поглощает" проекты: если ты включаешь библиотеку под GPLv3 в бОльший проект, бОльший проект должен быть перелецинзирован под этой мерзостью.
Она требует передачу прав на вклад в проекты в адрес ФСПО.

Как следствие, использовать компоненты под GPLv3 где-то за пределами Linux стало не возможно
Re[7]: Герб Саттер на Channel9: Modern C++
От: niXman Ниоткуда https://github.com/niXman
Дата: 07.04.14 12:08
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Как следствие, использовать компоненты под GPLv3 где-то за пределами Linux стало не возможно

хм.. так это что получается, если в венде использовать mingw, то каждая программа собранная mingw`ом — нарушает лицензию? а если программа распространяется в исходниках, то автор этих исходников нарушителем не является?
(не силен в лицензиях и подобной лабуде)
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[4]: Герб Саттер на Channel9: Modern C++
От: Lazin Россия http://evgeny-lazin.blogspot.com
Дата: 07.04.14 12:13
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Ну а если еще Mill CPU доведут до промышленного исполнения, то победа будет еще более весомой. Кстати, из лекции видно, что побороли не только и не столько кэши, но еще и prefetcher (кстати, как его на русском завать?), что сильно заметно на схемах за переделами L1 и L2.


Prefetcher уже очень давно является частью любого современного x86 CPU. Есть даже инструкция (SSE PREFETCH0-2), позволяющая подсказывать prefetcher-у, какуие адреса вы собираетесь читать.
Re[3]: Герб Саттер на Channel9: Modern C++
От: Evgeny.Panasyuk Россия  
Дата: 08.04.14 04:41
Оценка:
Здравствуйте, antropolog, Вы писали:

MTD>>Ну заинтриговал. Кто кого заборол?

A>кеши побороли асимптотику

"асимптотика" одинаковая — перед вставкой и удалением делается линейный поиск.
Re[4]: Герб Саттер на Channel9: Modern C++
От: Evgeny.Panasyuk Россия  
Дата: 08.04.14 05:07
Оценка: 1 (1)
Здравствуйте, kaa.python, Вы писали:

KP> Кстати, из лекции видно, что побороли не только и не столько кэши, но еще и prefetcher (кстати, как его на русском завать?), что сильно заметно на схемах за переделами L1 и L2.


Помимо prefertcher'а, не менее важно КПД использования memory bandwidth. Из памяти приходят не отдельные байты, а целые куски размером с cache-line — по 64 байта.
При работе с массивом КПД=100%, так как все элементы расположены вплотную. При работе же со связанным списком, из 64 полученных байт, полезной нагрузкой являются только 4 байта (в этом тесте использовались int32).
Re[2]: Герб Саттер на Channel9: Modern C++
От: Evgeny.Panasyuk Россия  
Дата: 08.04.14 05:29
Оценка:
Здравствуйте, Jack128, Вы писали:

KP>>замеры производительности на вставках в середину массива и списка были для меня удивительным открытием.

J>Э-э-э, он же списки чисел обрабатывает. Это не интересно и очевидно. Гораздо интереснее, если бы были вставки больших объектов. Ну там вектор векторов vs linked_list векторов.

Учитывая rv-refs или swaptimization, не вижу принципиальной разницы между вектором/списком из слов (int32) и из групп по три слова (std::vector).
Возможно ты подразумевал вектор/список из std::array<char, big_N>?
Re[4]: Асимптотика
От: Qbit86 Кипр
Дата: 08.04.14 05:40
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

A>>кеши побороли асимптотику


EP>"асимптотика" одинаковая — перед вставкой и удалением делается линейный поиск.


antropolog говорил про асимптотику вставки, а не про асимптотику поиска места для вставки.
Глаза у меня добрые, но рубашка — смирительная!
Re[5]: Асимптотика
От: Evgeny.Panasyuk Россия  
Дата: 08.04.14 05:44
Оценка:
Здравствуйте, Qbit86, Вы писали:

A>>>кеши побороли асимптотику

EP>>"асимптотика" одинаковая — перед вставкой и удалением делается линейный поиск.
Q>antropolog говорил про асимптотику вставки, а не про асимптотику поиска места для вставки.

Так измеряется ведь общее время, т.е. Θ(N) + Θ(1) = Θ(N)
Re[3]: Герб Саттер на Channel9: Modern C++
От: Jack128  
Дата: 08.04.14 07:13
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Возможно ты подразумевал вектор/список из std::array<char, big_N>?


да, конечно.
Re[2]: Герб Саттер на Channel9: Modern C++
От: TarasB  
Дата: 08.04.14 09:00
Оценка:
Здравствуйте, Jack128, Вы писали:

J> Гораздо интереснее, если бы были вставки больших объектов. Ну там вектор векторов vs linked_list векторов.


А с чего вектор-то большой? 12 байт всего лишь.
А конструкторы копии вроде бы при вставке в середину не вызываются.
Re[2]: Герб Саттер на Channel9: Modern C++
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 09.04.14 09:03
Оценка:
Здравствуйте, Jack128, Вы писали:

J>Э-э-э, он же списки чисел обрабатывает. Это не интересно и очевидно. Гораздо интереснее, если бы были вставки больших объектов. Ну там вектор векторов vs linked_list векторов. Ну и набор графиков, что будет есть вектора пустые. Или в них по 500 байт данных. Или по 1КБ, или по 10КБ..


Немного про вставку объектов.
Re[8]: Герб Саттер на Channel9: Modern C++
От: Abyx Россия  
Дата: 10.04.14 18:06
Оценка:
Здравствуйте, niXman, Вы писали:

X>Здравствуйте, kaa.python, Вы писали:


KP>>Как следствие, использовать компоненты под GPLv3 где-то за пределами Linux стало не возможно

X>хм.. так это что получается, если в венде использовать mingw, то каждая программа собранная mingw`ом — нарушает лицензию? а если программа распространяется в исходниках, то автор этих исходников нарушителем не является?
X>(не силен в лицензиях и подобной лабуде)

у лицензии gcc есть специальное исключение, см. GCC RUNTIME LIBRARY EXCEPTION — http://gcc.gnu.org/onlinedocs/libstdc++/manual/license.html
In Zen We Trust
Re[5]: Герб Саттер на Channel9: Modern C++
От: BulatZiganshin  
Дата: 14.04.14 21:33
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Помимо prefertcher'а, не менее важно КПД использования memory bandwidth. Из памяти приходят не отдельные байты, а целые куски размером с cache-line — по 64 байта.

EP>При работе с массивом КПД=100%, так как все элементы расположены вплотную. При работе же со связанным списком, из 64 полученных байт, полезной нагрузкой являются только 4 байта (в этом тесте использовались int32).

на самом деле всё гораздо хуже. при последовательном чтении памяти запросы конвейризуются, и можно выжать 20-30 ГБ/с. при случайном чтении от отправки запроса до получения ответа проходит 40-50 нс. т.е. разница в b/w будет не в 16 раз, а в 300
Люди, я люблю вас! Будьте бдительны!!!
Re[6]: Герб Саттер на Channel9: Modern C++
От: Evgeny.Panasyuk Россия  
Дата: 14.04.14 22:03
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

EP>>Помимо prefertcher'а, не менее важно КПД использования memory bandwidth. Из памяти приходят не отдельные байты, а целые куски размером с cache-line — по 64 байта.

EP>>При работе с массивом КПД=100%, так как все элементы расположены вплотную. При работе же со связанным списком, из 64 полученных байт, полезной нагрузкой являются только 4 байта (в этом тесте использовались int32).
BZ>на самом деле всё гораздо хуже. при последовательном чтении памяти запросы конвейризуются, и можно выжать 20-30 ГБ/с. при случайном чтении от отправки запроса до получения ответа проходит 40-50 нс. т.е. разница в b/w будет не в 16 раз, а в 300

Так это и есть prefertcher, то есть он помогает скрыть latency за счёт конвейрезации.

В общем тут два основных фактора:
1. КПД использования memory bandwidth. Для связного списка int32 оно крайне неэффективное, и душит производительность во много раз.
2. Эффективность сокрытия latency prefetcher'ом. В общем случае, у связного списка паттерны доступа рандомные, поэтому prefetcher неэффективен. Это также даёт падение производительности в разы.

Оба фактора умножаются друг с другом, что в итоге даёт крайне низкую фактически-полезную memory bandwidth (которая часто является bottleneck'ом).
Re[6]: Герб Саттер на Channel9: Modern C++
От: Evgeny.Panasyuk Россия  
Дата: 14.04.14 22:10
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>при последовательном чтении памяти запросы конвейризуются, и можно выжать 20-30 ГБ/с.


Да, и кстати, даже при последовательном доступе, для получения такого bandwidth одного ядра недостаточно (что показывали простые тесты на Nehalem и Sandy Bridge).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.