@ProCxx

Страница 2106 из 2477
Vyacheslav
31.05.2018
16:01:47
Денис
31.05.2018
16:05:01
Во сколько раз быстрее будут работать С-указатели на фунции вместо std::function? Во сколько раз будет быстрее работать прямой вызов (inline) вместо указателя на функцию?
Лучше тогда уж лямбды - они побыстрее std::function будут, т.к. их компилятор хорошо инлайнит (https://stackoverflow.com/questions/13722426/why-can-lambdas-be-better-optimized-by-the-compiler-than-plain-functions)

Yura
31.05.2018
16:05:28
Друзья, добрый день! Я студент первого курса по программированию, опыта практического почти нет. Скажите пожалуйста, какие требования по знаниям для джуна? Спасибо.

Alexander
31.05.2018
16:06:36
Не пойдёт.
7.14 Functions Function calls may slow down a program for the following reasons:  The function call makes the microprocessor jump to a different code address and back again. This may take up to 4 clock cycles. In most cases the microprocessor is able to overlap the call and return operations with other calculations to save time.  The code cache works less efficiently if the code is fragmented and scattered around in memory.  Function parameters are stored on the stack in 32-bit mode. Storing the parameters on the stack and reading them again takes extra time. The delay is significant if a parameter is part of a critical dependency chain.  Extra time is needed for setting up a stack frame, saving and restoring registers, and possibly save exception handling information.  Each function call statement occupies a space in the branch target buffer (BTB). Contentions in the BTB can cause branch mispredictions if the critical part of a program has many calls and branches.

Google
Yura
31.05.2018
16:06:58
Тебе в google сразу?)
Хехехех ну можно и Фейсбук, ладно уж))

Alexander
31.05.2018
16:07:18
Не пойдёт.
http://www.agner.org/optimize/optimizing_cpp.pdf

Vyacheslav
31.05.2018
16:08:19
Лучше тогда уж лямбды - они побыстрее std::function будут, т.к. их компилятор хорошо инлайнит (https://stackoverflow.com/questions/13722426/why-can-lambdas-be-better-optimized-by-the-compiler-than-plain-functions)
К сожалению колбеки в интерфейс можно только Си-указателями на функции или std::function организовать (абстрактные функции не предлагать). Может что-то новое появилось?

Alexander
31.05.2018
16:08:57
https://www.boost.org/doc/libs/1_67_0/doc/html/function/misc.html#id1617757

и ещё кто-то про функтор забыл

Alexander
31.05.2018
16:10:31
Я не про hardware часть спрашивал. Inline тела функции он по определению будет быстрее вызова через указатель. Вопрос в том, насколько в среднем он будет быстрее, по Вашему опыту.
так, стоп. по МОЕМУ опыту нехуй таким заниматься и отдать это на откуп компилятору почти всегда будет норм решением

Vyacheslav
31.05.2018
16:10:44
Alexander
31.05.2018
16:10:56
используешь инлайн - раздуваешь код - проседает кеш инструкций и так далее

с другой стороны вызовов меньше

Google
Alexander
31.05.2018
16:11:29
О, Спасибо!!
рекомендую к прочтению не эти книги, а все остальные. Книга по оптимизации С++ у Агнера наиболее слабая, имхо

Денис
31.05.2018
16:28:21
https://meduza.io/quiz/ruby-ili-perl-ugadayte-yazyk-programmirovaniya-po-kodu
Тогда уж сразу https://tproger.ru/quiz/cpp-quiz/

Vyacheslav
31.05.2018
16:44:17
Тогда уж сразу https://tproger.ru/quiz/cpp-quiz/
Мозгодробительный тест. Проходя его уже устал. 3/7.

Vl@d
31.05.2018
17:20:37
А что используется в алгоритмах с++17 вместо get_temporary_buffer|? new, delete`?

test
31.05.2018
17:25:10
Хорошая книга для начинающего в c++ ?

Mr.
31.05.2018
17:31:29
кто знает встроенный метод сортировки массива по убыванию? Типо sort(a, a + n), только по убыванию?

Mr.
31.05.2018
17:32:24
Спс

test
31.05.2018
17:32:34
Спс.

Vl@d
31.05.2018
17:38:05
Не совсем понял вопрос
http://en.cppreference.com/w/cpp/memory/get_temporary_buffer написано, что deprecated, а что тогда использовать?

Alex
31.05.2018
18:43:48
Есть вектор из объектов (с некими полями из строк и чисел) Нужно написать программу, для поиска объектов, подходящих по заданным условиям Т.е. может быть [Такое-то поле (переменная) больше/меньше/равно/... Какому-то числу] И/ИЛИ [Такая-то строка равна/не равна/... чему-то] Т.е. по сути simple sql parser Есть какие-нить идеи элегантной реализации?

Может-быть как-то помещать нужные функции (сравнения) в вектор? Т.е. создать функцию для '>', '==' А остальные сравнения - можно от этих двух вывести

Но как реализовывать оператор ИЛИ

Где-то в голове крутится элегантное решение, с уровнями вложенности и чем-то подобным Но, не могу достать Нет идей?

Google
Alex
31.05.2018
18:48:47
boost::multiindex не поможет?
Охота свой костыль, с целью, хмм, да просто ради интереса даже

Alexander
31.05.2018
18:49:43
Alex
31.05.2018
18:59:52
Где-то в голове крутится элегантное решение, с уровнями вложенности и чем-то подобным Но, не могу достать Нет идей?
Создам класс Expression. В нём 4 переменные - Expression *left, *right; bool isTrue; enum Operator { '&&', '||'} Парсим входную строку, разрезаем на правую и левую часть - и так, пока не останется только одно вырадение (аля first>5), тогда устанавливаем isTrue Это не сильно, кхем, плохо?

Assasin
31.05.2018
19:14:16
Создам класс Expression. В нём 4 переменные - Expression *left, *right; bool isTrue; enum Operator { '&&', '||'} Парсим входную строку, разрезаем на правую и левую часть - и так, пока не останется только одно вырадение (аля first>5), тогда устанавливаем isTrue Это не сильно, кхем, плохо?
Если хочется навелосипедить свой парсер, можешь порыться в моем не очень сложном велосипеде на php: https://github.com/iassasin/phplate/blob/master/src/TemplateLexer.php Его основная идея в том, что есть prefix операторы, infix и postfix, у каждого есть свой уровень, который учитывается при поиске обработчика этого оператора (функция findOperator). Начинать погружение в парсер можно с функции parseExpression. Вот тут я его еще пытался перенести на плюсы, но тут только абстрактная реализация: https://github.com/iassasin/configen/blob/master/src/parser/synparser/lexer_expression.hpp По идее, если определить к нему таблицу операторов с уровнями и их обработчики, должно заработать, но я не проверял, время как то кончилось, некогда было велосипедить дальше. В общем, если будет полезно, прошу.

Igor
31.05.2018
19:50:25
почитай дракона
Зачем? Генерируешь лексер и пишешь парсер через рекурсивный спуск (как парсят большинство реальных языков), никакой особой теории тут не надо.

Matwey
31.05.2018
20:01:58
А чо парсер?

Вы считаете что язык запроса из парсера состоит?

А планировать исполнение вы не собираетесь?

Assasin
31.05.2018
20:09:47
ну прежде чем что-то планировать, сначала нужно спарсить, что именно

планировать - это уже отдельная сложная задача, конечно

Matwey
31.05.2018
20:10:34
Ну lex/bison поможет

И можно планировать! :)

Assasin
31.05.2018
20:11:06
ну Alex хочет свой велосипед для парсера)

Matwey
31.05.2018
20:11:17
Пусть хочет велосипед для планировщика!

Это интереснее

ILIK
31.05.2018
22:15:11
есть кто не спит ?

Igor
31.05.2018
22:18:16
Google
Axbor
01.06.2018
05:05:26
В 200. В 20000.
Серезно? ?

Kirill
01.06.2018
05:17:32
Вопрос на самом деле очень странный. Std function хранится в куче, и на создание идет оверхед, но он минимален. Во время вызова тот же самый косвенный вызов получается. Все пользуются виртуальными функциями и не говорят что прям оверхед ппц. А вторая часть вопроса. Инлайн дает 0 оверхед, это даже не вызов, по этому вопрос ВО СКОЛЬКО БОЛЬШЕ дает ответ в бесконечность. Любой даже минимальный оверхед будет в бесконечность раз дольше. Правило следующее, не париться перформансом пока не припрет, читаемость и масштабируемость на начальных этапах важнее чем мнимый перформанс

Spoonson
01.06.2018
05:24:32
инлайн дает оверхед из-за раздуваемого кода, он начинает хуже в кэш попадать. Так что оверхед (по крайне мере, иногда) бывает.

Ilia
01.06.2018
05:35:35
Ilia
01.06.2018
05:39:53
Профи т

Alex
01.06.2018
05:40:34
Сам не пробовал, но говорят что оптимизации, особенно низкоуровневые с asm вставками помогают быть ценным и незаменимым сотрудником в буквальном смысле.

Stanislav
01.06.2018
05:43:25
уж лучше написать гору непортабельного кода на асме

Alex
01.06.2018
05:45:24
банальщина, это даже ЧСВ не потешит и пацанов не удивишь

Spoonson
01.06.2018
06:39:03
Наоборот. Ему надо что-то в кэш положить, а оно уже там есть
не совсем понял. С такой логикой сама функция тоже в кэш попасть может.

Ilia
01.06.2018
06:41:01
Что ж непонятно?

Inlinening ускоряет, я объясняю почему

Spoonson
01.06.2018
06:43:05
но обьяснение про попадание в кэш подходит и не к заинлайненой функции

/dev
01.06.2018
07:00:27
Ваша правда, но это уже черная магия кешмисы считать)
где начинается подобная чернуха, без профайлера лучше не соваться

Google
Kirill
01.06.2018
07:00:44
Что ж непонятно?
Тут имелся ввиду например инлайн вызов при луп анролинге, там простыня вызовов будет

Ruslan
01.06.2018
07:01:42
Ваша правда, но это уже черная магия кешмисы считать)
Хехе. Значит я в чёрные маги записался. Даже хуже

Kirill
01.06.2018
07:02:41
где начинается подобная чернуха, без профайлера лучше не соваться
Вообще оптимизация без профайлера и метрик это гадание на гуще. Причем любая, как оно работает на самом деле и в представлении программиста это обычно две разные вещи

Alexander
01.06.2018
07:08:00
ЗАТО БЫСТРЕЕ!!!1!

написал кучу кода на асме, и тебя не уволят

Andre
01.06.2018
08:36:51
Ух ё, кто пришел!

Ilia
01.06.2018
08:38:34
но обьяснение про попадание в кэш подходит и не к заинлайненой функции
Как же? У тебя у НЕЗАинлайненной функии одно тело. У ЗАинлайненой -- много, но одинаковые.

Matwey
01.06.2018
08:39:24
Как же? У тебя у НЕЗАинлайненной функии одно тело. У ЗАинлайненой -- много, но одинаковые.
И тела разные могут быть, после того как по ним оптимизатор проедет

Не понято как кэш должен догадваться об том что это одно и то же.

Spoonson
01.06.2018
08:39:58
Ilia
01.06.2018
08:40:04
НЕЗАинлайненная фукция будет просто в одном экземпляре. Её не нужно 20 раз подгуржать. ЗАинлайненная будет в 20-30 экземлярах а код один и тот же, подгружать в кэш не надо...

/dev
01.06.2018
08:44:18
Как же? У тебя у НЕЗАинлайненной функии одно тело. У ЗАинлайненой -- много, но одинаковые.
совсем не факт, что одинаковые, оптимизатор же каждый раз честно свою работу делает

Matwey
01.06.2018
08:46:20
Да даже если код один и тот же, я пока не понял до конца. Разве кеш инструкций не просто на адрес ориентируется при работе? Там есть дедубликация?

Ilia
01.06.2018
08:46:35
инлайн дает оверхед из-за раздуваемого кода, он начинает хуже в кэш попадать. Так что оверхед (по крайне мере, иногда) бывает.
Вообще, это с моей стороны был гон чистой воды, но и вы,братья, хороши. Как же можно нести такую чушь, что inline раздувает код и даёт оверхед, что он в кэш хуже попадает, и (подразумевается) что изза этого становится медленнее ? Кэш -- вообще штука непредсказуемая, поэтому его влияние на скорость работы кода обсуждать практически бессмысленно. У программиста нет средств влият на то, будет загружен код или данные в кэш. По факту inlining -- один из самых эффективных методов оптимизации, потому что он УБИРАЕТ ПРОЛОГ И ЭПИЛОГ маленьких функций и работает в более благоприятном как раз для кэшей режиме.

Страница 2106 из 2477