The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Facebook открыл код C++ библиотеки Folly, opennews (??), 03-Июн-12, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


23. "Facebook открыл код C++ библиотеки Folly"  +5 +/
Сообщение от VoDA (ok), 04-Июн-12, 02:30 
> То же самое что есть у любой крупной конторы - свой закос
> под STL, обросший своими же костылями. Такое есть и у Google
> и у Яндекс, логично что такой же урод родился и у
> Facebook. Грустно то, что местный менеджмент не пресекает костыли  на
> корню.

Грустно, что компаниям ТРЕБУЕТСЯ перепиливать либы вместо использования стандартных для получения высокой скорости.


Ответить | Правка | Наверх | Cообщить модератору

24. "Facebook открыл код C++ библиотеки Folly"  +2 +/
Сообщение от R (?), 04-Июн-12, 03:06 
> Грустно, что компаниям ТРЕБУЕТСЯ перепиливать либы вместо использования стандартных для
> получения высокой скорости.

Да вроде как все закономерно - если хочется стандартного (т.е. универсального, чтоб на всех платформах одинаково и без костылей) - то и получится не самый быстрый вариант. А если нужна высокая скорость - то не получится универсальность, поскольку, придется "пилить костыли" под конкретную платформу и под конкретные наборы данных.
Увы, "за все нужно платить" (С)

Ответить | Правка | Наверх | Cообщить модератору

28. "Facebook открыл код C++ библиотеки Folly"  +1 +/
Сообщение от kshetragia (ok), 04-Июн-12, 07:42 
Под конкретные наборы данных - да.
Под конкретную платформу - нет.

Меня не волнует как это реализовано внутри. Пусть даже алгоритм уникален для каждой платформы. Главное, чтобы интерфейс был одинаков.

Ответить | Правка | Наверх | Cообщить модератору

29. "Facebook открыл код C++ библиотеки Folly"  +/
Сообщение от тоже Анонимemail (ok), 04-Июн-12, 08:51 
Вас будет волновать, как оно устроено внутри, когда каждый нюанс умножится на количество информации.
Если вектор из STL, например, несколько неаккуратно ест память (с редко используемым запасом), то при умножении на миллиарды векторов получится лишний датацентр для поддержки этого запаса. Простая замена его на "велосипед", экономящий память, позволит внезапно и безболезненно сократить расходы...
Ответить | Правка | Наверх | Cообщить модератору

34. "Facebook открыл код C++ библиотеки Folly"  +/
Сообщение от Ваня (??), 04-Июн-12, 10:44 
Хоть один что-то понял...

Плюс независимость от изменений стандартов и пр. мутотни. Было два параметра, сделали три - не трогает и не колышет.

Итог: прогнозируемое поведение. Когда это твой бизнес и твои деньги - это резко становится очень важным.

Ответить | Правка | Наверх | Cообщить модератору

35. "Facebook открыл код C++ библиотеки Folly"  +/
Сообщение от тоже Аноним (ok), 04-Июн-12, 11:02 
Ну, изменение стандартов и параметров в STL - это очень маловероятно.
Но абстрагирование от деталей языка и библиотек обычно здорово облегчает сопровождение программы.
Ответить | Правка | Наверх | Cообщить модератору

47. "Facebook открыл код C++ библиотеки Folly"  +2 +/
Сообщение от anonymous (??), 04-Июн-12, 13:56 
> Хоть один что-то понял...
> Плюс независимость от изменений стандартов и пр. мутотни. Было два параметра, сделали
> три - не трогает и не колышет.
> Итог: прогнозируемое поведение. Когда это твой бизнес и твои деньги - это
> резко становится очень важным.

Действительно, это классический аргумент защитников парадигмы NIH (Not Invited Here).

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

Ответить | Правка | К родителю #34 | Наверх | Cообщить модератору

67. "Facebook открыл код C++ библиотеки Folly"  +/
Сообщение от Ytch (?), 04-Июн-12, 23:11 
>> Хоть один что-то понял...
>> Плюс независимость от изменений стандартов и пр. мутотни. Было два параметра, сделали
>> три - не трогает и не колышет.
>> Итог: прогнозируемое поведение. Когда это твой бизнес и твои деньги - это
>> резко становится очень важным.
> Действительно, это классический аргумент защитников парадигмы NIH (Not Invited Here).
> На практике они порождают и поддерживают легенду о том, что их велосипед
> самый качественный, самый быстрый, самый стабильный, ну и так далее.

Если возникла реальная потребность и делали не студенты, то, для конкретного случая(!), так оно и получается (быстрее, стабильнее, компактнее - нужное подчеркнуть), к сожалению (а может и к счастью, кто знает).

> Ньюанс в маленьком: корректно сравнить этот велосипед с альтернативой не представляется возможным.

Для конкретного случая (а не для всех возможных вариантов использования!) очень даже возможно. Результирующий ассемблерный листинг не врет, точка. Там все видно, кто сколько тактов (байтов) на что потратил. Я, конечно, смотрю сугубо со своей embedded колокольни, но то, что возможно "не колышет" прикладных программеров (в обмен на удобство и универсальность) для нас очень даже важно (вплоть до переписывания особо нагружаемых вещей на асме, если "прижмет"), тут уж, извините, все "зубры" "правильного" программирования идут нафиг.

Ответить | Правка | Наверх | Cообщить модератору

73. "Facebook открыл код C++ библиотеки Folly"  +/
Сообщение от Аноним (-), 05-Июн-12, 00:27 
> Я, конечно, смотрю сугубо со своей embedded колокольни, но то, что возможно "не колышет" прикладных программеров (в обмен на удобство и универсальность) для нас очень даже важно (вплоть до переписывания особо нагружаемых вещей на асме, если "прижмет"), тут уж, извините, все "зубры" "правильного" программирования идут нафиг.

Со своей геймдев-колокольни вижу то же самое. Красивые абстракции - это замечательно, но код который пишется близко к телу и заточен под микроархитектуру - будет уродлив всегда, т.к. уродлива сама микроархитектура. Ну точнее, на нее плохо ложатся абстракции, как-то так.

"У нас" постоянно велосипедят аллокатор и многие другие компоненты, для которых казалось бы есть готовая замена. Однако производительность в случае конкретной игры всегда выше на своем, заточенном под задачу.

Ответить | Правка | Наверх | Cообщить модератору

82. "Facebook открыл код C++ библиотеки Folly"  +1 +/
Сообщение от anonimous (?), 05-Июн-12, 09:49 

> "У нас" постоянно велосипедят аллокатор и многие другие компоненты, для которых казалось
> бы есть готовая замена. Однако производительность в случае конкретной игры всегда
> выше на своем, заточенном под задачу.

Вот это как раз "правильно" и "хорошо". Если allocator совместим по интерфейсам, вы имеете возможноть сравнивать несколько allocator'ов и выбирать лучшую стратегию для конкретной задачи.

А вот когда вам суют allocator и говорят, что он самый супер-пупер, вот только интерфейс у него самобытный и скрытых side-эффектов ещё вагон и инфраструктура для него специфичная нужна... Затраты на "попробовать" оказываются столь велики, что отказаться от него не хватает духу. Ну, и лобби, конечно присутствует.

Ответить | Правка | Наверх | Cообщить модератору

39. "Facebook открыл код C++ библиотеки Folly"  +/
Сообщение от VoDA (ok), 04-Июн-12, 12:06 
> Если вектор из STL, например, несколько неаккуратно ест память (с редко используемым
> запасом), то при умножении на миллиарды векторов получится лишний датацентр для
> поддержки этого запаса. Простая замена его на "велосипед", экономящий память, позволит
> внезапно и безболезненно сократить расходы...

Продолжим пример: этот вектор потребляет на 1% памяти больше. Тогда чтобы набралось издержек на лишний датацентр нужно чтобы у компании уже было 100 ДЦ. Даже Гугл не набрал столько.

С другой стороны - этот же вектор упрощает программирование на 1% (продолжая потреблять на тот же 1% больше памяти). Для компании отдать приложению на 1% больше ОЗУ практически бесплатно - вместо планки 2Гб поставить 4Гб обойдется в 450 руб (сейчас же даже блейды таскают на 16Гб и больше).

С другой стороны 1% от ЗП программиста это примерно 14-16 тыс рублей в месяц (сама ЗП, налоги, выплаты в гс-фонды).

Так что если вы работаете не в гос-структуре (где лучше больше освоить, но меньше сделать), то главные критерий - производительность программиста, а не такты процессора или байты ОЗУ.

Ответить | Правка | К родителю #29 | Наверх | Cообщить модератору

40. "Facebook открыл код C++ библиотеки Folly"  +/
Сообщение от тоже Аноним (ok), 04-Июн-12, 12:23 
Вы неправильно продолжаете пример. Стандартный вектор при добавлении элемента сверх выделенной памяти добавляет себе еще до полстолька памяти про запас, в зависимости от реализации. Это совсем не 1%.
Экономия памяти, конечно, выльется в лишние такты, но в вебе процессор давно уже не узкое место, а вот память... Вместо 2Гб 4Гб - это просто. Но сервера датацентров FB, надо думать, не дураки собирали, и памятью они забиты по максимуму.

Программирование же не усложнится вовсе, если вместо std::vector будет использоваться fb::vector. Напротив, может упроститься - за счет ненужности низкоуровневых оптимизаций там, где std::vector был неудачен.

Так что - оба раза мимо.

Ответить | Правка | Наверх | Cообщить модератору

48. "Facebook открыл код C++ библиотеки Folly"  +/
Сообщение от ктото (?), 04-Июн-12, 16:12 
> Стандартный вектор при добавлении элемента сверх выделенной памяти добавляет себе еще до полстолька памяти про запас, в зависимости от реализации.

std::vector::reserve, не?

Ответить | Правка | Наверх | Cообщить модератору

49. "Facebook открыл код C++ библиотеки Folly"  +/
Сообщение от тоже Аноним (ok), 04-Июн-12, 16:21 
И так по всему коду, чудом предугадывая, сколько именно памяти понадобится в процессе жизни вектора?
Ответить | Правка | Наверх | Cообщить модератору

69. "Facebook открыл код C++ библиотеки Folly"  +/
Сообщение от Ytch (?), 04-Июн-12, 23:18 
> И так по всему коду, чудом предугадывая, сколько именно памяти понадобится в
> процессе жизни вектора?

Большая часть DSP и embedded программирования строится на точном знании чего, сколько и когда именно понадобится. Безо всяких "чудес предугадывания".
Это я сейчас в целом, не касаясь конкретно ни STL, ни чего-либо ещё - просто чтобы немножко снизить чрезмерную категоричность высказываний. Без обид.

Ответить | Правка | Наверх | Cообщить модератору

78. "Facebook открыл код C++ библиотеки Folly"  +/
Сообщение от тоже Анонимemail (ok), 05-Июн-12, 08:57 
Ну, это же совсем другая область. Речь о веб-библиотеке. В которой можно уверенно говорить о непредсказуемости данных. Потому что случаи, когда их пытались предсказать, обычно потом лечились заплатками, устраняющими уязвимости.
Но даже без этого нюанса решение проблем предложенным путем создаст серьезный оверхед для программистов и при этом совершенно не обязательно - реальный выигрыш в производительности и экономии ресурсов. Так что решение со всей очевидностью "не катит".
Ответить | Правка | Наверх | Cообщить модератору

85. "Facebook открыл код C++ библиотеки Folly"  +/
Сообщение от anonimous (?), 05-Июн-12, 10:35 
> И так по всему коду, чудом предугадывая, сколько именно памяти понадобится в процессе
> жизни вектора?

Много вставок, последовательный доступ? --- list или single_list

Известны оценки, нужен произвольный доступ --- vector.

Большой разброс по количеству элементов, но добавляем только с концов? --- deque.

Много элементов, нужна упорядоченность? --- map (это красно-черное дерево).

Можете построить хорошую хэш-функцию для ваших данных, упорядоченность не нужна? --- unordered_map.

Т.е. явно сформулированные гарантии для контейнеров, использование контейнеров с нужными свойствами, внимание к алгоритмам.

  

Ответить | Правка | К родителю #49 | Наверх | Cообщить модератору

86. "Facebook открыл код C++ библиотеки Folly"  +/
Сообщение от тоже Аноним (ok), 05-Июн-12, 11:05 
Представьте себе, с азами STL большинство присутствующих знакомы.
Речь о конкретной нише, в которой важны конкретные факторы. И универсальные контейнеры, внезапно, показывают неоптимальное для этих условий поведение. Поэтому пишется специфический контейнер, заменяющий универсальный и при этом реализующий оптимизации, возможные в этих конкретных условиях.
На лабораторных такие случаи, конечно, не разбирают...
Ответить | Правка | Наверх | Cообщить модератору

94. "Facebook открыл код C++ библиотеки Folly"  +/
Сообщение от anonymous (??), 05-Июн-12, 14:42 
> Представьте себе, с азами STL большинство присутствующих знакомы.
> Речь о конкретной нише, в которой важны конкретные факторы. И универсальные контейнеры,
> внезапно, показывают неоптимальное для этих условий поведение. Поэтому пишется специфический
> контейнер, заменяющий универсальный и при этом реализующий оптимизации, возможные в этих
> конкретных условиях.
> На лабораторных такие случаи, конечно, не разбирают...

С азами (т.е. слышали такую аббревиатуру) --- да, похоже Вы _знакомы_. На практике оказывается, что 4/5 считают свой случай совершенно уникальным (мне надо пихать объекты в стек) и стандартные контейнеры для этого совершенно не подходят (использовал vector, получается ужасно).

Ответить | Правка | Наверх | Cообщить модератору

96. "Facebook открыл код C++ библиотеки Folly"  +/
Сообщение от тоже Аноним (ok), 05-Июн-12, 15:42 
Тогда вопрос к вам, как к специалисту.
Требуется обрабатывать огромное количество данных, размер которых заранее неизвестен, но никаких особенных функций, кроме произвольного доступа к ним, не требуется.
Какой контейнер и как вы будете использовать?
Требования - минимизация расхода памяти и, во вторую очередь, процессорного времени.
Вектор уже оценен и сочтен неудачным, поскольку предусматривает использование памяти сверх необходисти.

Ответить | Правка | Наверх | Cообщить модератору

100. "Facebook открыл код C++ библиотеки Folly"  +/
Сообщение от anonymous (??), 05-Июн-12, 17:52 
> Тогда вопрос к вам, как к специалисту.

Если как к специалисту, то придется потратить определенное время нам обоим на выжимание из Вас адекватной непротиворечивой постановки. Я не Мессинг, чтобы угадывать алгоритм "обрабатывания" (оценка сложности для доступа, оценка сложности для вставки, если она нужна, необходимы ли операции "предыдущий", "следующий", упорядоченность, индексирование, однозначность, etc.), сколько весит "огромное" но "заранее неизвестное", что такое "сверх надобности" и т.д. и т.п.

Ответить | Правка | К родителю #96 | Наверх | Cообщить модератору

103. "Facebook открыл код C++ библиотеки Folly"  +/
Сообщение от тоже Аноним (ok), 05-Июн-12, 18:55 
А вот вилять не надо.
Первое же требование - минимизация расхода памяти - сворачивает ваш список в трубочку.
Потому что любой контейнер STL расходует ее больше, чем вектор (начиная со сколько-нибудь большого содержимого).
Никаких подробностей не требуется.
Ответить | Правка | К родителю #100 | Наверх | Cообщить модератору

54. "Facebook открыл код C++ библиотеки Folly"  +/
Сообщение от Crazy Alex (??), 04-Июн-12, 18:25 
Если у вас экземпляров кода много - то программист становится дешевле железок. На порядки.
Ответить | Правка | К родителю #39 | Наверх | Cообщить модератору

58. "Facebook открыл код C++ библиотеки Folly"  +/
Сообщение от Ананимуз (?), 04-Июн-12, 19:04 
> С другой стороны 1% от ЗП программиста это примерно 14-16 тыс рублей в месяц (сама ЗП, налоги, выплаты в гс-фонды).

Программист, обходящийся конторе в полтора ляма ежемесячно? Это наверное очень хороший программист и его наверняка не затруднит помочь конторе сэкономить на железе в пользу своей зарплаты.
Ну а если между цифрами таки должны стоять точки, то видно что при увеличении количества экземпляров кода, расходы на железо действительно стремительно растут выше экономии на программисте.

Ответить | Правка | К родителю #39 | Наверх | Cообщить модератору

45. "Facebook открыл код C++ библиотеки Folly"  +/
Сообщение от kshetragia (ok), 04-Июн-12, 13:43 
Значит STL реализация вектора не подходит в данном случае и должна быть подходящая "искаробки".

  man queue - там почему-то не стесняются указать чего и как лучше использовать:

Linked lists are the simplest of the doubly linked data structures and support only the above functionality over singly-linked lists.

     Tail queues add the following functionality:
           1.   Entries can be added at the end of a list.
           2.   They may be traversed backwards, from tail to head.
           3.   They may be concatenated.
     However:
           1.   All list insertions and removals must specify the head of the
                list.
           2.   Each head entry requires two pointers rather than one.
           3.   Code size is about 15% greater and operations run about 20%
                slower than singly-linked lists.

И как видите, меня снова не волнует как оно устроено внутри. достаточно знать чем мне грозит использование функциональности.

Ответить | Правка | К родителю #29 | Наверх | Cообщить модератору

38. "Facebook открыл код C++ библиотеки Folly"  +2 +/
Сообщение от VoDA (ok), 04-Июн-12, 11:58 
> Да вроде как все закономерно - если хочется стандартного (т.е. универсального, чтоб на всех платформах одинаково и без костылей) - то и получится не самый быстрый вариант. А если нужна высокая скорость - то не получится универсальность, поскольку, придется "пилить костыли" под конкретную платформу и под конкретные наборы данных.

я под стандартным понимаю соответствие внешнему API и идентичное поведение при использовании API. А как оно будет внутри - на самолете, на самокате или окостылено по небалуйся - не волнует. Главное соответствует спеке и работает.

Так что было бы круто, если все либы от Гугла, Яндекса и прочих Мордокниг реализовали стандартное API и таким образом их можно было бы интегрировать в базовые либы.

List list = new List(); // базовая реализация
List list = new ListFromFacebookImprovedForIntegers(); // улучшенная реализация от Мордокниги

> Увы, "за все нужно платить" (С)

Вопрос в том кто платит и за что.

Ответить | Правка | К родителю #24 | Наверх | Cообщить модератору

61. "Facebook открыл код C++ библиотеки Folly"  +/
Сообщение от Crazy Alex (??), 04-Июн-12, 20:57 
Ну вот сразу навскидку - чтобы указанное сделать List должен все свои методы иметь виртуальными. Что для многих случаев будет вести к основательным потерям в производительности.
Это не говоря о том, что в разных фирмах coding guidelines могут капитально отличаться.
Ответить | Правка | Наверх | Cообщить модератору

68. "Facebook открыл код C++ библиотеки Folly"  +/
Сообщение от all_glory_to_the_hypnotoad (ok), 04-Июн-12, 23:14 
> Так что было бы круто, если все либы от Гугла, Яндекса и прочих Мордокниг реализовали стандартное API и таким образом их можно было бы интегрировать в базовые либы.

это совершенно не было бы круто, ибо API тоже нужно разрабатывать, точно так же, как и писать сам код и мозговать алгоритмы. Твоия идиллия возможна если это самое API вдруг спустит с небес сам Он и скажет - лучше не придумаете.

Но такого не бывает, пока ещё.

Разнообразие в подходах помогает найти нормальное решение в процессе эволюции и ествественного отбора наиболее удачных реализаций.

Ответить | Правка | К родителю #38 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру