Плюс в карму за то, что написали про Поляка. В общем то большая часть рассуждений в статье как раз сводится к его идеям и, собственно, методу тяжёлого шарика откуда термин “momentum” и возник в контексте градиентного спуска.
Я бы отдельно отметил, что у Поляка (да и в последующем в теории оптимизации) инерция возникает совершенно не как средство выхода из локального минимума. Наоборот инерция ускоряет сходимость для плохо обусловленных функций и работает в основном для локального анализа. Упрощенный анализ можно есть тут. Про то, что момент помогает бороться с локальными минимумами – это миф, по крайней мере никакого математического обоснования этого я никогда не видел (именно математическое обоснование, а не размахивание руками с картинками). Если знаете где такое есть – с удовольствием почитаю!
Я сейчас веду проект по succinct структурам, у меня есть студенты, которым нужна практика, но нет реальных бизнес задач, под которое это можно было бы подвязать. У меня ощущение, что для поисковых задач может быть пересечение, не хотели бы обсудить?
Каждый вызов – это новая сессия, в которой только системный промт + текущий запрос. В этом и был смысл, что больше ничего нет. Если хочется, чтобы учитывался контекст сессии – cursor, roo code, opencode, claude code итп
Ничего не делаю – мне такого ответа ни разу не было. Дизайн утилиты предполагает, что вы сначала генерируете команду, смотрите на неё, а потом выполняете. Есть возможность это пропустить, но для этого нужно целенаправленно указать флаг и тут уже сами виноваты.
А вы пользуетесь отладчиклм из терминала? Есть ли какие-то преимущества над плагиами в ide, для меня вот интерфейс терминала для отладки почти бесполезен и не ускоряет посравнению “отладкой принтами”
Да, это "тернарный оператор", в С/С++ он отоже есть. Честно говоря не знаю есть ли в нем большой смысл с современными компиляторами, как синтаксический сахар точно полезен.
Разница в первую очередь в наборах инструкций, AMD64 и x86-64 в этом плане примерно одно и тоже, но у AMD поддержка новых расширений частенько с запозданием. ARM и RISC-V -- это семейство RISC, у ARM свои SIMD (ссылка есть в статье), с RISC-V совсем не работал, поэтому гадать не буду -- лучше поищите сами.
Референсные значения по таймингам доступа к кэшам/регистрам схожи, но если вы оптимизируете под конкретное устройство, то нужно смотреть референс этого конкретного устройства.
Да я вроде этому и посвятил пол статьи. Но всё-таки это не всегда так и надо отслеживать когда I/O bound а когда CPU. AoS vs SoA это частные случае data oriented design, минимизация обращений к памяти через дизайн структуры часто очень не простая задача
Очень сильно не согласен. Во-первых, SSE, AVX2 и AVX512 различаются не только длиной регистра, но и доступными инструкциями (вики и список интринсиков). Во-вторых, в зависимости от задачи ботлнек может быть по памяти, а может и по вычислениям, в последнем случае имеет значение сколько и каких SIMD юнитов имеет процессор. У меня есть пример где ботлнек по арифметике и как раз использование GFNI из AVX-512 ускоряет в два раза универсальный алгоритм на AVX2 https://github.com/Malkovsky/galois?tab=readme-ov-file#vector-operations (понятно, что оба варианта еще можно соптимизировать и разница возможно будет меньше, но суть от этого не меняется)
Сформулировано хорошо, в целом в духе caveman
Плюс в карму за то, что написали про Поляка. В общем то большая часть рассуждений в статье как раз сводится к его идеям и, собственно, методу тяжёлого шарика откуда термин “momentum” и возник в контексте градиентного спуска.
Я бы отдельно отметил, что у Поляка (да и в последующем в теории оптимизации) инерция возникает совершенно не как средство выхода из локального минимума. Наоборот инерция ускоряет сходимость для плохо обусловленных функций и работает в основном для локального анализа. Упрощенный анализ можно есть тут. Про то, что момент помогает бороться с локальными минимумами – это миф, по крайней мере никакого математического обоснования этого я никогда не видел (именно математическое обоснование, а не размахивание руками с картинками). Если знаете где такое есть – с удовольствием почитаю!
Я сейчас веду проект по succinct структурам, у меня есть студенты, которым нужна практика, но нет реальных бизнес задач, под которое это можно было бы подвязать. У меня ощущение, что для поисковых задач может быть пересечение, не хотели бы обсудить?
Каждый вызов – это новая сессия, в которой только системный промт + текущий запрос. В этом и был смысл, что больше ничего нет. Если хочется, чтобы учитывался контекст сессии – cursor, roo code, opencode, claude code итп
Ничего не делаю – мне такого ответа ни разу не было. Дизайн утилиты предполагает, что вы сначала генерируете команду, смотрите на неё, а потом выполняете. Есть возможность это пропустить, но для этого нужно целенаправленно указать флаг и тут уже сами виноваты.
Отдельно отмечу промт
Закиньте в issues!
Подскажите, я так и не понял, а что у вас за базовый индекс то? Если вы ищете строки, разве там не должно быть чего-то в духе суффиксного дерева?
C недавних пор сам тоже так делаю. Технически часть с копированием иллюстраций можно пропустить.
Это верно, но статья была про то как использовать gdb из консоли, а не в qtcreator.
Это понятно, вот только я готов использовать gdb с интерфейсом в vscode, но не готов использовать чистый gdb из терминала, вопрос в этом
Хорошая и полезная статья.
А вы пользуетесь отладчиклм из терминала? Есть ли какие-то преимущества над плагиами в ide, для меня вот интерфейс терминала для отладки почти бесполезен и не ускоряет посравнению “отладкой принтами”
Да, это "тернарный оператор", в С/С++ он отоже есть. Честно говоря не знаю есть ли в нем большой смысл с современными компиляторами, как синтаксический сахар точно полезен.
Чтож вы мучаетесь то
https://godbolt.org/z/177jcYKc4
P. S. Для личного опыта интересно потыкаться, но для прода я бы не выпендривался и использовал
std::copyилиstd::ranges::copyРазница в первую очередь в наборах инструкций, AMD64 и x86-64 в этом плане примерно одно и тоже, но у AMD поддержка новых расширений частенько с запозданием. ARM и RISC-V -- это семейство RISC, у ARM свои SIMD (ссылка есть в статье), с RISC-V совсем не работал, поэтому гадать не буду -- лучше поищите сами.
Референсные значения по таймингам доступа к кэшам/регистрам схожи, но если вы оптимизируете под конкретное устройство, то нужно смотреть референс этого конкретного устройства.
Вроде как раз для таких случаев godbolt.org полезен чтобы посмотреть что будет с
-O2/-O3Я думал, что имелось в виду
и
Хмм, я мне говорили, что он это делает, потому что первые релизы плавили процессор.
Да я вроде этому и посвятил пол статьи. Но всё-таки это не всегда так и надо отслеживать когда I/O bound а когда CPU. AoS vs SoA это частные случае data oriented design, минимизация обращений к памяти через дизайн структуры часто очень не простая задача
Очень сильно не согласен. Во-первых, SSE, AVX2 и AVX512 различаются не только длиной регистра, но и доступными инструкциями (вики и список интринсиков). Во-вторых, в зависимости от задачи ботлнек может быть по памяти, а может и по вычислениям, в последнем случае имеет значение сколько и каких SIMD юнитов имеет процессор. У меня есть пример где ботлнек по арифметике и как раз использование GFNI из AVX-512 ускоряет в два раза универсальный алгоритм на AVX2
https://github.com/Malkovsky/galois?tab=readme-ov-file#vector-operations
(понятно, что оба варианта еще можно соптимизировать и разница возможно будет меньше, но суть от этого не меняется)
"Если можешь не писать -- не пиши" Л. Н. Толстой.
Почему такая мелочь как "засмеют и фамилию не спросят" вас останавливает?