alexanius

24 октября 2016, Москва, Россия

# Понедельник 160 твитов

Всем привет! На этой неделе с вами Алексей @alexanius Маркин, программист из отдела оптимизирующих компиляторов.

6:53

Я работаю в небольшой фирме, занимающейся разработкой микропроцессоров на основе VLIW архитектуры. И это очень весело!

6:54

Поэтому ближайшая неделя будет посвящена процессорам Эльбрус, компиляторам, оптимизациям и обучению студентов

6:55

Расскажите, кто из вас слышал что-нибудь про процессоры Эльбрус? Может даже работали с ними?

6:57

Ну а пока вы ещё не проснулись, в кратце расскажу про процессоростроение. В России существует несколько фирм, разрабатывающих процессоры.

7:01

Разрабатываются они на разных архитектурах. Есть MIPS, ARM, собственные. Как вы уже догадались,я из МЦСТ, и у нас есть 2 линейки процессоров

7:02
@backendsecret пробовали работать "в лоб", пересобрав ПО, получили не очень результаты и решили попозже более детально поразбираться

Понимаю. А что не пошло - сам процесс портирования или производительность просела? Какой пакет, если не секрет?
twitter.com/boolker/status…

7:04
@backendsecret свят-свят-свят, не приведи господь

Эх, что ж вы так, отечественного производителя поддержать не хотите ;)
twitter.com/astarasikov/st…

7:05

МЦСТ разрабатывает 2 архитектурные линейки процессоров - на основе Sparc и на основе VLIW архитектуры (Эльбрус, он же e2k)

7:07

VLIW - Verly Long Instruction Word. Это означает что в одном машинном слове у нас зашито множество команд. Т.е. можем исполнять 23 за такт!

7:08
@backendsecret производительность. ну и собиралось очень долго (хотя не пробовали кросс-компилятор еще). Пакет? Мы свои велосипеды пробовали
7:09
@backendsecret Скажем так, я видел, что на нём работает, но не могу об этом распространяться)
7:09

При переносе на Эльбрус действительно может проседать производительность. Часто это проблемы в самом коде.У нас есть отдел который их решает

7:11

Также надо понимать что разные архитектуры лучше решают разные задачи. Вообще говоря Эльбрус - это классная числодробилка

7:12

Работа с целочисленными задачами (ну большинство десктопных) даётся ему сложнее, но в целом вполне сносная ;)

7:13
@backendsecret так вроде под эту архитектуру очень тяжело компиляторы писать. И вон itanium не взлетел

Да, очень сложно. Нужно максимально эффективно пихать код в широкие команды. Но Itanium не взлетел не поэтому
twitter.com/koirn/status/7…

7:14

Раз уж заговорили про компиляторы, то наш (lcc, он же ecomp) в режиме -O3 прогоняет более 350 оптимизационных фаз

7:15

Поэтому работает он значительно дольше какого-нибудь gcc или llvm

7:16
@backendsecret я хочу, но боюсь, что VLIW очень сложно программировать.расскажите,какие проблемы в многопоточной среде,и как их решаете

Компилятор для VLIW очень чувствителен к качеству кода. Ну и высокая производительность тебует понимания аппаратуры
twitter.com/astarasikov/st…

7:18

. @astarasikov про многопоточность - чуть позже, т.к. сам я с ней не работаю. Но поспрашиваю у других отделов

7:20
@backendsecret так вроде под эту архитектуру очень тяжело компиляторы писать. И вон itanium не взлетел

Не взлетел по многим причинам. И из-за реализации архитектуры, и по техническим, и по маркетинговым
twitter.com/koirn/status/7…

7:24

. @saint_armadillo Да, статьи были, довольно интересные, был даже наш официальный ответ, тоже на хабре :)

7:25
@backendsecret а какая ОС бегает сейчас на Эльбрусе если не секрет?

ОС Эльбрус ;) На самом деле это debian-based дистрибутив. Плюс alt-linux сейчас что-то портирует
twitter.com/koirn/status/7…

7:26
@backendsecret слежу за новостями про Эльбрус уже больше 10 лет, интересно будет почитать вас
7:48
@backendsecret когда то были очень крутыми, но потом слили интелу, разворовали компанию и все замерло на 20 лет - нам говорили

Оу, как я поздно устроился - всё до меня разворовали (( А кто говорил, если не секрет?
twitter.com/ruxeg/status/7…

7:48

А пока расскажу что ещё есть на тёмной стороне архитектур. Как и у любого VLIW'а,у Эльбруса много регистров. Их целых 256. Хотя этого мало..

7:50
@backendsecret в лагере одном, узконаправленом. Говорил чел который там работал в конце 80, начале 90х

В начале 90 - совсем странно. Это даже за долго до того как интел команду Бабаяна купил
twitter.com/ruxeg/status/7…

7:53
@backendsecret Это правда, что в Xeon Phi эльбрусовская архитектура, и если да, то сколько там ее?

Не Эльбрус там точно :) Немного пробежался глазами - это скорее Superscalar (хотя что там с микроархитектурой - хз)
twitter.com/ShapovalovTS/s…

8:01
@backendsecret @ruxeg очевидно, что имеется в виду 2004 год. В лагере школьнику что 10, что 20 лет - вечность
8:02
О, восхитительные истории про Бабаяна и Интел, сразу универ вспоминается. twitter.com/backendsecret/…
8:02
@artemborzilov @backendsecret может быть. Скорее всего говорили в 2005 году, только что пересчитал. Это так важно?

Ну мне тоже интересно. А то все говорят что в МЦСТ всё разворовали, что деньги пилим. Я всё хочу понято где :)
twitter.com/ruxeg/status/7…

8:04
@backendsecret А есть примеры использования в продакшен? Ну кроме секретной оборонки

Сейчас пытаемся выходить на гражданский рынок, но это сложно. Например пенсионный фонд cnews.ru/news/top/2016-…
twitter.com/koirn/status/7…

8:05
@backendsecret @artemborzilov кто то из ваших был в девзене - вроде адекватный товарищ

Наших несколько было. Там Ваня @gliush Глушков один из ведущих (он давно у нас работал), был я
twitter.com/ruxeg/status/7…

8:09
@ruxeg @backendsecret Бабаян — это как Пентковский.
8:10
@webholt @backendsecret бабаян это как домовик или акопян?
8:10
@backendsecret расскажи кратко про разницу архитектур

Кратко не получится, буду весь день сегодня рассказывать :)
twitter.com/relan/status/7…

8:35
@backendsecret слышала что-нибудь на уровне "такое существует".
8:35

Далее Эльбрус (и наши Sparc'и тоже) - это In-Order процессоры. Т.е. процессор не умеет выбирать готовую каманду в процессе исполнения

8:36

Порядок исполнения инструкций задаётся компилятором и не меняется. (Современные x86 и ARM - Out-of-Order,т.е. они аппаратно выбирают инстр.)

8:37

Т.е. по сути то, что на данный момент процессор делает аппаратно в runtime, в Эльбрусе должен сделать компилятор в compile-time

8:38

Отсутствие Out-of-Order - не минус, а скорее особенность. Но жить с ней гораздо сложнее

8:39

И ещё это одна из причин дико сложного компилятора. Почти всё приходится делать статически, предугадывать исполнение программы

8:40

Оу, извиняюсь за грамматику - на моей машине spell checker не настроен...

8:42
@backendsecret а нет такой фичи, чтобы при компиляции в софтину подавать какие то семпл. вх. данные и с их учетом уже оптимизировать пргрму?

Есть! Называется профилирующая компиляция.
twitter.com/tcheburator/st…

9:09

Профилирование проходит в 2 этапа. Сначала собираем программу со спец. инструментированием и прогоняем её на тестовых данных

9:10

Инструментированная программа собирает информацию о том какие участки сколько исполнялись и сбрасывает в файл.

9:11

Далее повторно компилируем программу с указанием собранного профиля и оптимизируем то что нужно

9:12

Такая схема позволяет получить хорошее ускорение, однако нужно иметь качественную тестовую выборку. Иначе получим просадку

9:14

Кстати сейчас такой способ компиляции активно развивается в mainstream компиляторах, но у нас профиль интегрирован значительно лучше

9:15
@backendsecret @SheVasya на хабре читал
9:16
@backendsecret зачем нужна такая архитектура, если с ней сложнее? Какие профиты?

Такая архитектура на floating point задачах рулит и бибикает. Плюс отказ от OoO - это позволяет выкинуть сложную пр… twitter.com/i/web/status/7…

9:18

Вообще существует мнение,не безосновательное,что vliw- это dsp архитектура.Тем не менее нам вполне удаётся применять её как general purpose

9:21

Ещё одна страшная особенность Эльбруса - отсутствие предсказателя переходов :) Собственно поэтому нам так важен профиль

9:23

С плавучкой есть интересный момент. У нас для неё используются регистры общего назначения

9:27

Из-за интелов плавучка - сплошная боль. У них используются 80-битные регистры, поэтому нам приходится поддерживать совместимость с ними

9:33
@backendsecret Читал, что это отечественная разработка и что это нереально сложно для гуманитариев.

Не только для них, не только... twitter.com/GolubevVictor/…

9:35
. @backendsecret существует ли дока - описание команд процессора e2k? что-то типа аналога Intel Architectures Software Developer Manual?

В открытом виде - нет. Если честно, то она так написана что если её откроют, то мало кто её поймёт. Её писали аппар… twitter.com/i/web/status/7…

9:38
@backendsecret спецслужбы вмешиваются в работу инженеров, ну там запилить аппаратные закладки и т.д.?
даже не знаю нужен ли тут знак вопроса

К сожалению @alexanius не может ответить на данный вопрос, но я от лица спец. служб могу сказать что конечно же нет
twitter.com/grim_juz/statu…

10:09

А если серьёзно, то даже если бы я и знал, то не имел бы права рассказывать об этом

10:10
@backendsecret @alexanius ты уже готов к непрекращающемуся троллингу на этой неделе, есть чем кормить троллей?)

Всегда готов ;) Это пока ещё здесь никто не заявил, что "Эльбрус существует только в виде .jpg картинки" ))
twitter.com/ruxeg/status/7…

10:11

На всякий случай - я не сразу буду отвечать на все вопросы, т.к. на некоторые ответа не знаю, но постараюсь их спросить у тех кто знает ;)

10:15
@backendsecret что почерпнули нового/интересного на лекции Бабаяна на прошлой неделе?)

Если честно, ожидал большего. Я хотел послушать критику современных архитектур (современный intel, arm)
twitter.com/fads93_zombie/…

10:16

Но на лекции Бабаяна была в основном критика Superscaler'ов в целом. Ну и рассказ про его перспективную архитектуру был немного абстрактный

10:17
@backendsecret привет от человека, который сидит через кубик от Б.А. :)
10:21
@backendsecret современный Intel и ARM и есть суперскаляры. Про перспективную архитектуру в подробностях говорить нельзя, вы же понимаете)

Понимаю, но я абстракцию хуже воспринимаю. Мне конкретные примеры нужны :)
twitter.com/fads93_zombie/…

10:25
@backendsecret @koirn в проде у таких систем и ОС проблемы связанные с процедурой сертификации по БИ. Из за этого есть куча вопросов >>
10:32
@backendsecret @koirn > с обновлениями безопасности. У системы известная дырка, а обновить нельзя, т.к еще не сертифицировано.
10:32
@backendsecret @koirn получается, что только для изолированных систем. В открытых - огромное количество рисков - решить оперативно нельзя
10:32
@backendsecret что почерпнули нового/интересного на лекции Бабаяна на прошлой неделе?)

Я бы сказал, что она позволила мне понять как он видит развитие процессоров и языков,но в части языков я не согласен
twitter.com/fads93_zombie/…

10:56
@backendsecret пользуетесь Эльбрус ОС? Какие задачи переписаны с процедурной защитой? Действительно ли сильно проще отлаживать задачи?)

Да, некоторое время занимался разработкой компилятора именно за ней. Разумеется без защищённого режима
twitter.com/fads93_zombie/…

10:57

. @ffads93_zombie сам не пробовал, но мой коллега портирует sanitaizer для использования в защищённом режиме, дистрибутиву помогает

10:59
@backendsecret как e2k показывает себя на ML задачах?

ML не замерял, да на него спроса пока особо нет. Но без нормального портирования будет плохо :)
twitter.com/fads93_zombie/…

11:00

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

11:01

Очень большая проблема с JIT'ами. Пока нет нативного порта, они работают в режиме интерпретатора. Это катастрофа. Но уже есть порт jvm.

11:02
@backendsecret @workaround9 слышал, в руках держал, но не работал.
11:02
@backendsecret а я могу на свифте писать под Эльбрус? Бэкенд ллвм уже есть, или только через велосипеды?

Пока что сомневаюсь. У нас есть работы по транслированию LLVM IR в наш компилятор, но это сильно не основная задача
twitter.com/mMaxy85/status…

11:36
@backendsecret где вы учились, как пришли в МЦСТ? Занимаетесь нативным компилятором или двоичным транслятором?

Учился в МАИ, факультет прикладной математики и физики. В МЦСТ попал довольно случайно
twitter.com/fads93_zombie/…

11:51

В МЦСТ работают по большей части МФТИ, МГУ ВМК и МИФИ. Представители других ВУЗов - редкое исключение.В МФТИ у нас есть своя базовая кафедра

11:53

Я работаю в нативном компиляторе, в отделе оптимизаций. В институте даже не подозревал что буду этим заниматься.

11:55

Попал в МЦСТ уже после окончания института. Т.к. у меня не было предметов, которые были у МФТИ'шников, до сих пор приходится многое учить

11:56

Но, как ни странно, сейчас в МФТИ читаю лекции по оптимизирующим компиляторам. Вот такие забавные вещи иногда случаются

11:57

На всякий случай - я очень рад что закончил именно МАИ, т.к. там сильное программирование. Но там совсем не преподаётся аппаратная часть

12:01
@backendsecret Закончил третий фак. Программирования почти не было. =(

Да, знаю, там с программированием хуже. Но у меня есть знакомый с третьего, который в ядре сейчас программирует :)
twitter.com/PaGrom/status/…

12:06
@backendsecret Я в институте тоже не подозревал, что подпишусь на @backendsecret и там будет ведущий, который.... тоже не подозревал
12:06
@backendsecret это грустно( Есть планы на открыть? Мб в урезаном в виде, только команды.

Вот с открытием СК (да и не только) всё печально... Есть большая инерция по данному вопросу
twitter.com/alexgpg/status…

12:09
@backendsecret Ну и я после третьего курса 2,5 года работал Linux Embedded Developer, но потому что программировать учился сам.

В абсолютно любом ВУЗе с абсолютно любой программой учиться нужно преимущественно самому.
twitter.com/PaGrom/status/…

12:10
@backendsecret @alexgpg это никому не нужно без устройств на рынке или официального симулятора

Тоже верно. Хотя я и не сторонник черезмерной закрытости
twitter.com/fads93_zombie/…

12:13
@backendsecret на физтехе на кафедре микропроцессорных технологий дают практически все, что надо

Не знаю, с вашими студентами не работал. У нас на информатики и вычислительной техники с программированием жуть
twitter.com/fads93_zombie/…

12:17
@backendsecret А по зарплате как? Относительно других разработчиков.

Жить можно. Несколько лет назад мне в самсунге предлагали больше на аналогичную должность, но не на много
twitter.com/GolubevVictor/…

12:18

Зарплаты у нас вполне конкурентные (сопоставимы с моими одногрупниками из других фирм). Достаточные чтобы не сбежать сразу.

12:20
@backendsecret мцст хайрит в команды компилятора, ДТ, архитектуры? Какие зарплаты предлагают выпускникам?

Примерно уже ответил, но тут ещё и от выпускника зависит. Но чаще у нас с базовой кафедры студенты набираются
twitter.com/fads93_zombie/…

12:23
. @backendsecret есть ли в e2k hardware perfomance counters?

Какие-то есть. Даже perf портирован. Что-то конкретное интересует?
twitter.com/alexgpg/status…

12:27
@backendsecret да скорее само наличие. конкретные от архитектуры зависят, а я ее не знаю. CPU Flame Graph построить можно?

Можно
twitter.com/alexgpg/status…

12:32
@backendsecret как решаете проблему с изменением bias'а бранча в динамике исполнения?

Никак. В динамике мы ничего не делаем. Только статика, только хардкор
twitter.com/fads93_zombie/…

13:18

Как я уже говорил, branch prediction'а у нас нет. OoO тоже. Для VLIW'а это нормально, в нём работают другие механизмы борьбы с ветвлениями

13:19

Во-первых у нас есть 3 регистра подготовки перехода. Чтобы не тратить время на переход, мы заранее кладём в них адрес и подгружаем команды

13:21

Три штуки нужно т.к. мы заранее не знаем куда прыгать

13:21

Но в VLIW имеет гораздо более крутые механизмы. Мы можем вообще избавляться от ветвлений. Например у нас есть предикатный режим

13:22

Предикат - это специальный флаг в отдельном регистре, который говорит должна ли исполняться команда или нет. В Эльбрусе 32 предиката

13:23

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

13:23

. @fads93_zombie Если имеется ввиду внезапное изменение bias'а, в нативной программе, то никак - страдаем. Если при трансляции - то не знаю

13:32
@backendsecret Есть какая-нибудь литература, например "Разработка на 'Эльбрус' за 21 день" или "'Эльбрус'для чайников"?

Есть только общее описание архитектуры: mcst.ru/doc/book_12113…. Но в целом нужно хотя бы грамотный код писать
twitter.com/GolubevVictor/…

13:35
@backendsecret с какими оптимизациями работаете, не с планированием циклов? можно хотя бы примерно: классика/таргет-зависимые, кэш, еще что

Я работаю преимущественно с архитектурно независимыми.Анализ указателей,профиль(в т.ч. предсказание), девиртуалзация
twitter.com/fads93_zombie/…

13:38
@backendsecret If-conversion/Predication - наше все для VLIW'ов :)
13:40
@backendsecret зачем позиционировать этот процессор как общего назначения и запускать на нем многопользовательские ОС?

Потому что он вполне справляется с этими задачами. Из российских разработок по производительности нас пока не обошли
twitter.com/astarasikov/st…

13:43
@backendsecret есть ли режим спекуляции по обоим таргетам перехода с прибиванием неверного направления?

Конечно :) Без этого if-conversion как-то не айс
twitter.com/fads93_zombie/…

13:45

Помимо предикатов для хорошего слияния ветвлений (if-conversion) нам нужен спекулятивный режим.

13:48

Суть в том что мы можем исполнять команду, но она ни на что не влияет пока её результат не использован несепкулятивной командой

13:48

Например мы можем сделать обращение к памяти по невалидному адресу, но если оно так и осталось невостребованным, то ничего не случится

13:49

Т.е. код { if( ptr != NULL ) *ptr; } мы можем превратить в { *ptr; if( ptr != NULL ) ... }. Это позволяет гибко планировать исполнение кода

13:51
@backendsecret все же предикатирование != спекуляция по предикату. Предикатный блок исполняется безусловно, а спекуляцию можно прибить

Да, безусловно. Но оба механизма очень хорошо применяются для if-conversion
twitter.com/fads93_zombie/…

14:00
@backendsecret поподробней плз, почему 3?

Несколько нужно чтобы подгружать сразу несколько ветвлений. Именно 3 - просто аппаратное решение
twitter.com/Onotoly/status…

14:01
@backendsecret какое у вас типичное время от фикса до влива в компилятор?

По-разному. Сейчас у меня вливы меньше 5 часов не ходят (год назад 3 часа - самый быстрый). Но могут и больше суток
twitter.com/fads93_zombie/…

14:14
@backendsecret компиляторщики/трансляторщики могут лезть с правками в симулятор?

Ни в коем случае. Более того если кто-то лезет в чужой модуль внутри компилятора, то это повод серьёзно обидеться
twitter.com/fads93_zombie/…

14:15
@backendsecret какой ваш лично уровень знакомства с микроархитектурой e2k?

Не очень высокий. Аппаратно-зависимыми оптимизациями я не занимаюсь, иногда СК почитываю. Имею общее представление
twitter.com/fads93_zombie/…

14:16

Ещё у Эльбрусов есть классная фишка - apb. Это асинхронная подкачка данных. От prefetch отличается тем что исполняется в отдельном потоке

14:19

Т.е. если у нас идёт обработка массива, то параллельно с вычислениями мы подгружаем данные со следующей итерации.

14:19
@backendsecret знаем, очень крутая архитектурная штука, как и базированные регистры :)
14:20

Да, базированные регистры тоже клёвая вещь. Мы можем выделить участок регистрового окна, в котором будем обращаться к регистрам по индексу

14:27

Например в регистрах r1-r32 выделим базу r10 и размер базы 5. Тогда b[0] будет обращением к r10, b[1] - к r11 и т.д.

14:28

Потом мы можем сдвинуть эти регистры получить обращение b[0] - к r11, bи[1] - к r12 и т.д. Это аппаратная поддержка конвейеризации циклов

14:30
@backendsecret Эльбрус - это не процессор, это школа отечественной вычислительной техники!
14:43
@backendsecret посчастливилось учиться у архитекторов программной и аппаратной части

Круто! Даже немного завидую :)
twitter.com/fads93_zombie/…

14:44
@backendsecret в какую сторону развивается e2k архитектура? планируется ли отход от статического VLIW?

Наращиваем векторные регистры, увеличиваем количество ФУ, планируем поддержку виртуализации. Отход планируется
twitter.com/fads93_zombie/…

15:05

. @boolker насчёт пары - не могу сказать ) Но вполне возможно. Тут, думаю, нужно чтобы вы как организация это оформляли

15:07
@backendsecret @fads93_zombie @alexgpg вообще было бы интересно пощупать все это в облаке и сравнить с x86_64

Эх, а мне вот хотелось бы с Итаниумом и с современным спарком по сравнивать...
twitter.com/zhulikgleb/sta…

15:08

Вообще сравнение процессоров - штука очень скользкая, т.к. нужно понимать что и как сравнивается. И понимать как результат интерпретировать

15:09

Затрагивали тему трудоустройства.У нас катастрофически не хватает людей.Если вы хотите оказаться по ту сторону процессоров - приходите к нам

15:18
@backendsecret тогда уж тему зарплат надо затронуть)

Чёрт, так и знал что кто-нибудь спросит...
twitter.com/KernelMadness/…

15:27

. @GolubevVictor присылайте резюме на [email protected], у нас много отделов на разный вкус, вот примерный список mcst.ru/vakansis

15:29

Ещё одной killer-фичей Эльбрусов является защищённые режим.В нём мы аппаратно тегируем объекты памяти и запрещаем работу по невалидному типу

15:35

По факту это является аппаратным аналогом sanitaizer'а. Режим довольно специфический, но может сильно помочь при отладке на машине

15:37

Да и не только при отладке. Такой режим не даст злоумышленнику реализовать соответствующие типы уязвимостей ПО

15:38
@backendsecret процессор создавался с чистого листа, или МЦСТ от чего-то отталкивался, я где-то читал что в основе лицензированный ЦПУ

Эльбрус - с чистого (в смысле в основе лежали наработки ранних Эльбрусов). Про лицензирование - это, наверное, Sparc
twitter.com/grim_juz/statu…

15:41
@backendsecret например, ROP-атаки: нельзя подменить адрес возврата тк 1) адрес - это указатель, 2) аппаратно проверяются права на запись
15:47
@backendsecret про это рассказывал @dzavalishin на @Ulcamp по-моему крутая штука
15:47
@backendsecret какие у вас соотношения энергоэффективности против новых интелов на одних ворклоадах? какая тактовая частота e2k?

Думаю такое сравнение будет некорректным, т.к. у интел Full Custom Design, а у нас - нет
twitter.com/fads93_zombie/…

15:50

По частоте - на Эльбрус-4С 800 МГц (на старых выпусках 750), на 8С - 1.3 ГГц

15:52
@backendsecret Можно узнать маркировку и характеристики самого топового Эльбруса?

Думаю сейчас это Эльбрус-8С. По крайней мере из серийных образцов mcst.ru/vosmiyadernyj-…
twitter.com/meeverone/stat…

15:53
@backendsecret кстати, работает ли SMT на e2k?

Нет
twitter.com/fads93_zombie/…

15:54

. @meeverone могу показать roadmap (предпоследний слайд) mcst.ru/files/5575fb/a…

15:59

. @KernelByte да в принципе ничего специфического. Просто понимать как работает процессор, память, компилятор

17:39
@backendsecret А сколько вас там ?

Сейчас сложно сказать. Думаю в районе 500. Это на всё - от архитектуры процессора до портирования дистрибутива. twitter.com/KernelByte/sta…

17:40

Ещё интересным следствием In-Order процессора является то что компилятор должен сам вычислять задержки инструкций. Имеем адское планирование

17:43

. @egregors Вполне конкурентные. Мне пока что хватает :)

17:49

. @KernelByte Всё зависит от того куда устраиваться.К нам джуниором очень легко.Достаточно знать язык, уметь простые задачки, быть адекватом

19:27

. @KernelByte всё равно разрабатывать компилятор мало кто умеет, по сути всему с нуля учим

19:29

. @KernelByte а вот остаться уже сложнее. Тянут не все. Причём это не показатель ума, просто это сложно. Да и на любителя работа

19:30

. @strangeqargo для того что мы делаем этого очень мало. Тасков гораздо больше чем мы можем выполнить

19:35
@strangeqargo Бывает что уезжают. Кто на совсем, кто с возвратом. Даже если один человек в 3-4 года, это ощущается
19:44
@backendsecret (и последний с политподтекстом) - на путина работаете, или на народ, или просто? нет ощущения работы на империю зла?

На деньги работаем. У нас коммерческая организация. Нет, мы ж не в империи зла ;) twitter.com/strangeqargo/s…

19:55
@backendsecret я просто помню, как в книге "soul of the new machine" были разработчики, которые отказывались, например, на военных пахать

Не вижу причин не работать на военных. Бывает что их требования мешают гражданскому рынку, тут уже ничего не подела… twitter.com/i/web/status/7…

19:57
@backendsecret @KernelByte а денег нормально? В смысле чтобы из забугорья гуру привозить и ключевых удерживать

Из-за бугорья у нас нет никого и не факт что будет. Хотя я бы от таких не отказался, да twitter.com/oleg_antonyan/…

19:58
@backendsecret Я думаю если програмист ищет работу програмистом ради денег. Тогда он не очень как бы програмист. Тогда точно не продержится.

Соглашусь что не стоит заниматься тем что не нравится. Но я не сказал бы что у нас все прям фанаты компиляторов twitter.com/KernelByte/sta…

20:04
@backendsecret зависит от мотивации. Это молодой ты дерзок и горяч, работаешь за идею самореализации, а когда дети и родители пенсионеры
20:13
@backendsecret то и за деньги поработать идея нормальная.
20:13
@backendsecret Но если если работы много и монотонной, то долго думаю никто не протянет, разве что киборги )

Уколол себя иголкой в палец. Боль была, кровь идёт... Видимо продвинутый модельный ряд. twitter.com/KernelByte/sta…

20:22

Про разработку компилятора я завтра весь день рассказывать буду :)

20:23

. @de_gis ФРТК, кафедра информатики и вычислительной техники (базовая МЦСТшная)

20:57

. @de_gis это тема для любого программиста :) Просто на базовой кафедре мы сами решаем какие предметы давать и сами их ведём

21:11

# Вторник 166 твитов

@backendsecret как оцениваете перспективу питона?

Питон никуда не денется и лично мне он нравится, особенно последние версии. К сожалению на анализ его производитель… twitter.com/i/web/status/7…

7:10
@KernelByte @backendsecret деньги есть индекс независимости.Когда у вас выбор нелюбимой работы за 50тр и любимой за 20тр,странно выбрать 20
7:11
Астрологи предсказали неделю «Эльбруса» :: habrahabr.ru/post/313376/ :: @backendsecret
7:11
@backendsecret кроме вашей, какие ещё?

Байкал, НИИСИ, Модуль, Элвис, Миландр. Это первое что в голову приходит. Вообще их больше twitter.com/de_gis/status/…

7:19

Тема компилятора Эльбруса окутана плотным покровом тайн и мифов как и сам процессор. Сегодня я буду срывать их

9:08

Самый частый миф в том что мы взяли и доработали gcc. Самый смешной из встреченных - что мы доработали lcc (little c compiler)

9:10

А какие слухи попадались вам? Очень люблю почитать что про нас пишут, ужаснуться, посмотреть в код и успокоиться

9:11
@backendsecret но на самом деле эдисоновский фронтэнд?

Да, фронтенд эдисоновский. Созданием собственного фронтэнда у нас решили не заниматься twitter.com/astarasikov/st…

9:21

Фронтенд - не самая большая часть компилятора. И не самая долгая по времени работы

9:23

Страшная тайна в том что весь бэкенд полность написан нами. Опенсорсного кода там нет вообще

9:24

Даже больше скажу - я не представляю как его туда прикрутить

9:25

В начале своей работы я как-то хотел взять одну оптимизацию из gcc, но быстро понял что это просто технически не получится

9:28

Да и скорей всего мне в итоге не разрешили бы по лицензионным соображениям

9:30
@backendsecret прикрутить можно всё :)

Оптимизации основаны на десятках тысяч строк кода конкретного компилятора и его внутреннего представления. В кождом… twitter.com/i/web/status/7…

9:33

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

9:35

Да и если честно, копировать алгоритм из gcc в принципе весьма сомнительная идея

9:38

Сейчас наш компилятор занимает > 2.5 млн. строк кода. Из них ~0.66 млн строк - форонтенд

10:02

Написан на чистом Си, почти 89 стандарта (есть пара незначительных послаблений).

10:04

Самый первый коммит отследить уже не удастся, но подозреваю что проекту больше 20 лет. Со всеми вытекающими...

10:07

В проектах подобного рода наблюдается большая инерция. Так, например на svn мы перешли всего пару лет назад. до этого использовали cvs

10:07

Сейчас мы собираемся gcc 4.6. Переход на более новый gcc (5 или выше) мне пробить пока не удалось - придётся обновлять всю инфраструктуру

10:09

Релиз компилятора происходит примерно раз в год. Это позволяет иметь довольно надёжную и отлаженную версию.

10:35

Т.о. нам приходится одновременно поддерживать trunk и стабильную версию. Это проблема, т.к. исходники начинают различаться почти сразу

10:36

В стабильной версии нельзя ничего менять, можно только фиксить ошибки надёжности. В то время как в транке активно пилится производительность

10:38
В проектах подобного рода наблюдается большая инерция. Так, например на svn мы перешли всего пару лет назад. до этого использовали cvs

. @Dronmdf Да, svn. Как раз тут об этом писал twitter.com/backendsecret/…

10:47

К компиляторам предъявляются особые требования надёжности.Например вместо svn commit у нас есть скрипт,который сначала проводит тестирование

11:49

Тестирование проходит довольно долго. В последнее время самое быстрое - 4-5 часов. Может в плохих случаях идти больше суток

11:50

Тестируется сборка, лёгкий тест производительности, ошибки наджности, сборка linux и т.д. Это называется "оперативное тестирование"

11:52

Такая система позволяет значительно уменьшить вероятность закоммитить откровенную лажу. Тем не менее это всё равно случается

11:53
@backendsecret ci используете?

Думаю это можно так назвать :)

twitter.com/__pewpew__/sta…

11:55

Каждую ночь у нас собирается штатная версия компилятора, которая тестируется непрерывно.

11:56
@backendsecret глядишь, через 5 лет на git перейдёте

Сомневаюсь. Когда было обсуждение на что переходить - был спор git vs svn. Победил svn. Думаю на ближайшие лет 20
twitter.com/lisovskyvlad/s…

11:57

Даже если бы победил git, он бы всё равно использовался как svn. Просто потому что иначе не хватило бы мощностей для тестирования веток

11:58

. @Xedin svn работает и хорошо вписывается в наш workflow. Зачем менять то что работает? Тем более у git для нас нет явных преимуществ

12:01
@backendsecret ужас. я до сих пор svn вспоминаю только в кошмарах. а в чём главная проблема перехода на новую vcs?

Сначала нужно ответить на вопрос "зачем?". Пока svn всех устраивает. А проблема в переносе всей инфраструктуры
twitter.com/oleg_antonyan/…

12:02

"Вся инфраструктура" - это десятки серверов и сотни различных скриптов. (на самом деле в итоге всё сведётся к s/svn update/git pull/)

12:04

Я на самом деле удивлён что мы при таком подходе с cvs слезли, но это реально был ад :)

12:05
@backendsecret брэнчи + нормальный CI который будет мерджить нормальные брэнчи куда удобнее наколеночных скриптов.

Вот как раз ветви нас убьют. Мы можем непрерывно тестировать только trunk и стабильные срезы
twitter.com/Vlad_P53/statu…

12:20

На непрерывное тестирование бранчей просто машин не напасёшься. Да и тестировщиков тоже

12:21

Ещё интересный момент заключается в том что если мы протестируем бранч, в нём не будет ошибок,то после мерджа с транком он может развалиться

12:22

Связано с тем что оптимизационные фазы очень сильно влияют друг на друга и небольшая смена контекста ставит всё с ног на голову

12:23

Т.е. отдельные бранчи уведут ресурсы, а по сути тестирование будет неполноценным.

12:23
@backendsecret И вы боретесь с этим тем, что не тестируете бранчи вообще? Помоему первый шаг к стабильности - сделать стабильно в бранче.

У нас нет бранчей (в git'овском смысле) вообще. Всё коммитится в транк и там тестируется. И это правильно
twitter.com/Dronmdf/status…

12:25
@backendsecret Никто не предлагает отменить тестирование мастера. Ни в коем случае. Тестировать надо и ветки и мастер.

Проблемы:

12:25
@backendsecret на брэнчах можно не все тесты гонять, в любом случае с CI проще и быстрее понять кто что-то сломал/ухудшил.

В отделе оптимизаций ~15 разработчиков. Каждый одновременно работает ~по 5 таскам. Как тестировать 75 ветвей?
twitter.com/Vlad_P53/statu…

12:33
@backendsecret т.е. svn commit подвисает на 5 часов? Или отправляет и потом может внезапно откатить коммит?

Несколько часов идёт тестирование, потом svn commit. Использование его напрямую грозит смертью через сну-сну
twitter.com/Vlad_P53/statu…

12:34
@backendsecret Сколько у вас коммитов в день?

Несколько десятков
twitter.com/Dronmdf/status…

12:35

Про 5 тасков на каждом - это я не совсем правильно сказал. Каждый одновременно над ними работает. Так на каждом от 30 до 60 багов примерно

12:38
@backendsecret Не уверен... весьма старомодно я бы сказал... Вообще тестирование перед коммитом - это почти бранч...
12:39
Наблюдать, как @backendsecret отбивается от каргокультистов гита - бесценно
12:39

Система тестирования не позволяет делать коммит если он ухудшает производительность более чем на 20% хотя бы на одном из тестов

12:41

Из-за этого у нас нельзя напрямую откатить правки. Нужно влить новое исправление с откатом чтобы корректировались таблицы производительности

12:42

Также тестируется время компиляции, но в оперативном пакете только через ulimit. Статистика по времени компиляции собирается отдельно

12:43
@backendsecret просто для небольшой команды компиляторщиков лучше подходит дисциплина с предкоммитным тестированием и централизованным репо
12:47
@backendsecret Это что, у вас около пятисот багов в проекте одновременно? А может стоило бы сменить флоу?

У нас багзилла. Тут заказ на новую оптимизацию - тоже баг... Но вообще отдел тестирования работает активно, да
twitter.com/Lanakramoleb/s…

12:49
@backendsecret Не всяк бранч требует тестирования. Бранчи к тому же локальные бывают, на сервера не попадающие. Так что плохая отмазка.

Конечно же всяк! Не представляю зачем нужен бранч, не идущий на сервер.
twitter.com/ShapovalovTS/s…

12:50

Первое время мне не хватало локальных бранчей, да. Но со временем понимаешь что лучше даже мелкую правку коммитить чтобы тестировалась

12:53
@backendsecret брать и делать? Так оно у вас и сейчас, на коммит будет билд. Проблему с мерджем и сейчас имеете делая тесты перед коммитом

Централизованный билд, который идёт в тестирование - раз в сутки. Проблемы с мерждем минимальны
twitter.com/Vlad_P53/statu…

12:55
@backendsecret чтобы два дела сразу делать, естественно. пока ждешь тестов одной баги - педалишь другую

Дык мы так по 5 штук одновременно и педалим. Просто у нас много рабочих копий на машине
twitter.com/Vlad_P53/statu…

12:56
Вы когда-нибудь слышали про "хуяк-хуяк и в продакшен" в компиляторах? То-то же.
(к вопросу дисциплины разработки @backendsecret)

Компиляторщик компиляторщика всегда поймёт ;)
twitter.com/fads93_zombie/…

13:02
@backendsecret @Vlad_P53 мдее…. Сочувствую вам… Здравствуй [Новая папка], [Новая папка 2] и т.д….
13:06
@backendsecret А-А-А-А-А!!! Хотя, сам использую несколько копий на мажорные брэнчи (релизы), но для мелких изменений +5 гигов - перебор имхо

Всё не так страшно, сейчас я бы сказал что это гораздо удобней
twitter.com/Vlad_P53/statu…

13:07
@backendsecret Локальные бранчи используются программистом в _процессе_ работы над кодом, потом такие бранчи могут быть смержены и удалены.

У нас был один чувак, который поверх svn'а локально git себе сделал, да. Я тоже так хотел но это слишком неудобно
twitter.com/ShapovalovTS/s…

13:09

Я поначалу, если что, тоже был фанатом git'а. Но со временем понимаешь что это не так удобно как кажется.

13:10

Локальные бранчи - единственное чего не хватает, но сейчас я просто делаю коммиты мелкой гранулярности. Так гораздо проще отлавливать ошибки

13:11
@backendsecret Говорят, есть какая-то штука (git-svn вроде), которая позволяет использовать SVN по интерфейсу гита.

Да, gcc'шники такую используют. Но скрипт коммита под неё адаптировать никто не будет :)
twitter.com/webholt/status…

13:13
@webholt @backendsecret TFS?

На линукс инфраструктуре о_О
twitter.com/Slaaless/statu…

13:16
@webholt @backendsecret git-svn локально, subgit можно на сервере поставить и работать с тем и другим. Еще гитхаб так умеет.

Никто не будет что-то менять если на то нет веских причин. Любое изменение влечёт за собой череду ошибок
twitter.com/Vlad_P53/statu…

13:17

Если нет явных преимуществ git или git-svn над чистым svn, то разумеется никто не будет в этом копаться

13:18

Наброшу ка ещё немного... У нас больше половины разработчиков сидят в gvim !

13:22
@backendsecret это сразу всем наброс - и консольщикам и IDE’шникам?)
13:27
@Slaaless @backendsecret cp -r project{,_`date "+%Y-%m-%d_%H:%M:%S"`}
13:27
@backendsecret вы так говорите об этом, как будто в этом есть что-то плохое.

Ни в коем случае! Я вот студентку свою тоже приучаю... Хотя лично я предпочитаю QtCreator
twitter.com/quit_ka/status…

13:28
@backendsecret если между текстовыми редакторами нет большой разницы, то зачем платить за MSVS/JetBrains/Sublime?
13:28
@backendsecret У нас сборка с тестами идет час. На трех нодах. Иногда бывает переполнение очереди, но достаточно редко. Машин - десятка три

У нас тестирование непрерывное вообще. При этом раз в неделю - ещё более тяжёлое. раз в месяц - совсем хардкорное
twitter.com/Dronmdf/status…

13:29

А после среза ветки ещё и дистрибутив усиленно тестируется (в смысле сильнее чем обычно)

13:30
@backendsecret Не всякую фичу можно сделать одной правкой... Как вы живете с этим? Недоделанные фичи в транке?

Определённые вещи заносим под опцию - пока её не подали код не исполняется
twitter.com/Dronmdf/status…

13:30
@backendsecret @Dronmdf а раз в год все уходят в запой?
13:32

. @alexgpg @fads93_zombie Гит можно было бы использовать с точно такими же use-casa'ами. Просто весь вопрос: а зачем тогда git?

13:33
@backendsecret @alexgpg @fads93_zombie о чем вообще срач, если нету внешних публичных форков и вся команда в одном здании?
13:35
@backendsecret Не, но вот сколько времени тестируется коммит? 4 часа? это дофига, согласен. Gerrit рулит, запушил и занимайся чем хочешь.

От 4 часов и до больше чем сутоки. Ззависит от многих факторов - характера правки, загруженности сетки, например
twitter.com/Dronmdf/status…

13:36
@backendsecret Мне просто очень нравится gerrit :), всем рекламирую, но он для git.
13:38
@backendsecret за что вы их так??

Что бы знали что есть островки света в этом тёмном мире!
twitter.com/ruxeg/status/7…

13:38
@backendsecret Каким образом? тесты выбираются исходя из локации правки? Или как? Что влияет на продолжительность тестирования?

Да, исходя из локации. Если есть много запусков тестирования одновременно, то grid может не справляться
twitter.com/Dronmdf/status…

13:45

Ещё есть узкое горлышко - переполучение таблиц производительности. На нём все правки выстраиваются в ряд и ждут своей очереди

13:46

Упоминание vim'а открыло портал в ад ))

13:47
@fads93_zombie @backendsecret это если пользоваться IDE как текстовым редактором ;)
13:47
@backendsecret т.е вы их в темной клетке держите большую часть времени а потом показываете vim и еду рядом. Еще бы они его не полюбили
13:47
@strizhechenko @backendsecret А ведь никто не спросил Вим-а, когда перетаскивали в винду - а хочет ли он жить в винде :))
13:47

На самом деле никакого ограничения на инструментарий у нас нет - каждый пользуется чем хочет. Просто людям gvim реально удобнее

13:48
@backendsecret это же классика троллинга, молодец)

Ага, осталось только сказать что у нас нельзя табуляцией пользоваться ;)
twitter.com/ruxeg/status/7…

13:49
Слова не мальчика, но мужа. twitter.com/backendsecret/…
13:50
@backendsecret «говорил вим удобный такой, быстрый, все делать можно, ну а потом конечно в дурку попал»
13:51
@backendsecret Тогда сколько пробелов на отсуп разрешаете?

Четыре
twitter.com/ShapovalovTS/s…

13:51
@backendsecret ниужто пробелы! За остроконечники набегут
13:52

Во, у меня есть супер-наброс. У нас запрещены англоязычные комментарии!

13:52

Не знаю с чем связано. Мне говорили что на случай утечки исходников к потенциальным друзьям. До сих пор не понимаю серьёзно они или нет

13:53
@backendsecret у вас кстати как то кодстайл проверяется?

Для начинающих разработчиков - code review, а дальше сами привыкают.
twitter.com/ruxeg/status/7…

13:54
@backendsecret У Вас и ассемблер по русски наверное пишется... жуж туда сюда... :)
13:54

Но если совсем честно то я привык вообще не верить комментам и смотреть в код. Так что потенциальных друзей они максимум запутают

13:55

Кстати наши ядерщики придерживаются kernel coding style, поэтому когда я в нашем стиле написал модуль для ядра, меня ждал неприятный сюрприз

13:57
@backendsecret потенциальные друзья умеют читать по-русски :)
13:57
@Vlad_P53 @backendsecret @fads93_zombie хорошо сконфигурированный вим даст фору многим IDE.
14:10
@backendsecret всё правильно
14:10
@backendsecret так и пишите "тут реализаций представителя активности которая использует перегруженную реализацию сетевого стелажа", ад.
14:23
@backendsecret какой средний возраст разработчиков?

Средний сложно сказать - очень большой разброс.От 20-летник студентов до 50-летних разработчиков. Больше тех кому~30
twitter.com/nazarov_tech/s…

14:25
это для любителей кумира и 1с:предприятия. twitter.com/backendsecret/…
14:27
@backendsecret ага, я так и понял, что костяк от 30 до 50. Свн, вим, русскоязычные коммиты. Просто хотел проверить догадку :)

Я бы сказал что весы в сторону молодых всё же :)
twitter.com/nazarov_tech/s…

14:28

Расскажу про наш отдел тестирования. При оформлении ошибки тестировщик обязан полностью её разобрать и указать какая оптимизация виновата

14:29

И если когда компилятор падает на assert'ах это не проблема, то ошибки исполнения могут быть сущим адом

14:29

Хуже может быть только ошибка несличения результата :)

14:30
@backendsecret @fads93_zombie вот поэтому компиляторы и релизятся годами. Куда торопиться?

gcc релизится чаще. Поэтому их надёжность - это тихий ппц.
twitter.com/0xGreg/status/…

14:31

Такие обязанности тестировщиков приводят к тому что в общих чертах они с оптимизациями знакомы лучше чем разработчики :)

14:32

Кстати разбирать runtime ошибки на VLIW'ах - это адская жесть. В одной широкой команде могут быть инструкции из разных концов программы

14:34
@backendsecret быстро, качественно, дешево. Выберите любые два?

Именно так. Даже после среза стабильной ветки мы ещё минимум год патчи с исправлениями выпускаем
twitter.com/0xGreg/status/…

14:37

. @backendsecret Только вот по факту можно выбрать только одно ;)

14:38

Ещё у нас есть клёвый режим тестирования - с рандомными опциями компилятора. Когда приходят такие ошибки - хочется убивать

14:41
I don't know how to backport something in older versions of my project - if someone wouldn't be updated for a week… twitter.com/i/web/status/7…

Yeah, we suffer and fix bugs
twitter.com/acid_code/stat…

14:52
@xomaa @backendsecret неправильная аналогия. Мы говорим не об автоматизации, а о внесении изменений ради изменений, без пользы для бизнеса
14:58

. @xomaa @alexkorotkikh очевидно, про замену git на svn

15:03

. @Alex_MIPT лучше по-нормальному ) От транслита глаза вытекают

15:07
@backendsecret названия функций транслитом пишете?

Ни в коем случае!
twitter.com/pa3365/status/…

15:08

Компилятор умеет работать под 3 хостовыми архитектурами и генерит бинарники под 2 архитектуры. И везде должен работать одинаково

15:09

Сравнение результатов кроссовой и нативной версии - ещё одно направление тестирования

15:09

Кстати, интересно что у нас местами терминология отличается от мировой. Например basic block у нас называется "линейный участок"

15:12

Если не знать таких особенностей, то бывает сложно искать публикации на английском

15:12
@backendsecret @pa3365 неужто компилятор поддерживает Unicode и пишете по-русски? :)

Си, вроде не позволяет по-русски. Это вам не Питон ;)
twitter.com/Vlad_P53/statu…

15:13

Кстати внутри компилятора у нас активно используются assert'ы и различные чекеры. По сути имеем контрактное программирование

15:19

Ну и да, разумеется C-style ООП со своим менеджером памяти и наследованием ;)

15:29
@backendsecret @Vlad_P53 А как решается проблема конфликтов в коммитах? Никто не может коммитить пока предыдущее тестирование не прошло?

Примерно так. Тестирование отрабатывает, после чего запросы на коммит встают в очередь.
twitter.com/sanch0panca/st…

15:31

Сами по себе конфликты у нас большая редкость, потому что каждый модуль закреплён за конкретным разработчиком.

15:32

Без надобности в чужой код никто не лезет, т.к. он не знает что там работает и как. В таком подходе есть свои плюсы и свои минусы

15:32

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

15:33

Когда разработчик уходит - его модули перераспределяются между оставшимися. Очень весёлое занятие :)

15:36
@backendsecret no offence, но все, что я пока услышал за эту неделю напоминает ночной кошмар...

Почему? Я, вроде, ничего страшного рассказывать пока не начинал
twitter.com/dimaip/status/…

16:12

. @dimaip в продакшене фича-флагов, конечно же, нет

16:14

Поясню: у нас существует 3 варианта сборки компилятора: отладочная, быстрая и релизная

16:16

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

16:17

Релизная не содержит ничего, в т.ч. фича-флагов, применяемых только разработчиками и тестировщиками

16:17
@backendsecret нормас, у нас в сишарпном проекте ваще есть несколько функций с именами на русском
16:23
@Frame_Bassman @backendsecret с именами из эмодзи
16:25

. @alexey_m_ukolov да, он самый

16:34
@backendsecret жуткая картина - абстракции протекают на трамвайные рельсы, трель звонка, голова разработчика катится по мостовой...
:)
16:42

В какой-то момент мы упёрлись в то что нам не хватает скорости работы hdd и перешли на ssd. Иначе тестирование слишком сильно тормозило

16:44
Вот бы это в уши нашему менеджменту. twitter.com/backendsecret/…
16:49

У нас в этом плане специфический подход. Если что-то мешает разработке, это быстро разрешается. Если не помогает - хрен добьёшься )

16:50

Кстати, а много разработчиков компилятора читает этот твиттер? Я пока что только одного увидел.

17:00
@backendsecret @Xedin git worktree, например, чтобы держать две ветки одновременно

Не получится.Допустим я хочу коммитить правки, запускаю тестирование.Мне в той же директории нужно lib'ы пересобрать
twitter.com/ilnurkhalilov/…

17:11

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

17:13

Я уже не говорю про то что я не смогу с одной рабочей копией по несколько тестирований запускать

17:15
@backendsecret @Xedin можете создать новый ворктри вне рабочей директории

А зачем тогда несколько веток в одной рабочей копии в принципе? Мы приходим к той же схеме - несколько рабочих копий
twitter.com/ilnurkhalilov/…

17:16
@backendsecret, попробуйте — это удобнее чем две рабочим копии. Ну, и в Гите лучше конфликты решать

Концептуально -тоже самое возможно на пару команд удобнее. Конфликты у нас -большая редкость. Мало причин для замены
twitter.com/ilnurkhalilov/…

17:28
@backendsecret ну я двоичный транслятор разрабатываю, наверно тоже можно посчитать

Ну я Вас за одного и посчитал. Показалось что Вы из языковых компиляторов :)
twitter.com/fads93_zombie/…

17:29
@alexkorotkikh @backendsecret если с git-ом команда будет более эффективнее - смысл бизнесу есть. Иначе - шило на мыло, конечно не стоит.
17:29
@backendsecret, прелесть в реализации, а не в концепции
17:29
@backendsecret статический анализатор подойдет?

Почему бы и нет? :) Кого и на предмет чего анализируете?
twitter.com/artemborzilov/…

17:36
@backendsecret тесты можно в ветках гонять

Тесты - это не статический набор "взял и прогнал". Тесты - это круглосуточный процесс. На каждую ветку ресурсов нет
twitter.com/__pewpew__/sta…

17:53

. @trueneu а чтобыло несколько месяцев назад? Я как-то пропустил

19:14
@backendsecret никогда не понимал, как можно холиварить об инструментах, если они не мешают пользующемуся и делают дело - какая разница?
19:14
@trueneu @backendsecret бывает так, что люди привыкают к убогим инструментам и практикам, и упорно не хотят переучиться(я не про vim сейчас)
19:33
@trueneu @backendsecret в итоге делают свою работу хуже и медленнее, чем могли бы. это, как минимум, раздражает
19:33
@backendsecret адский срач под постом 'и как эти ***** используют этот ***** vim'. Пост собрал рекордное количество идиотов с обоих сторон
19:50
@quit_ka @backendsecret согласен, так бывает, но, дамы и господа, согласитесь - это не проблема инструмента.
19:50

# Среда 61 твит

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

7:11
@backendsecret gcc/clang, linux (centos 6, x86_64) и OS X (чисто для тестов того же кода для linux, чтобы далеко не ходить с локалхоста).
7:14

Мы, кстати, собираемся сначала gcc под linux x86, потом сами собой под linux e2k и sparc v9. Ещё под solaris сборка есть

7:17
@backendsecret GHC, clang, gcc. Для centos 7. Разработка и тестирование под macOS.
7:18

Вы пишите что используете и gcc и clang (надеюсь в смысле llvm). А зачем оба, что идёт в релиз, почему?

8:25

Вообще хочу понять на сколько пользователи знакомы с возможностями компиляторов, чего от них ждут

8:25
@backendsecret Проблем с кодировкой не ловили еще?

Не представляю откуда им взяться. Все рабочие места настраиваются админами, соответственно все конфиги совместимы twitter.com/Alvcohen/statu…

9:16

Современные компиляторы обладают богатым набором диагностик. В принципе имеет смысл собираться как минимум с -Wall -Werror

9:19

При этом по -Wall включаются далеко не все диагностики. Более того, gcc и llvm умеют ловить непересекающиеся множества варнингов

9:21

Так что пересборка проекта обоими компиляторами для целей поиска проблемных мест - весьма хорошее решение

9:22

А вот в плане оптимизаций всё не так однозначно. Когда я в поседний раз сравнивал режимы -O3 у gcc и llvm, последний плавучку проигрывал

9:25

Только вот у gcc была одна проблема... Далеко не все задачи корректно работали в режиме -O3. Я, на самом деле, был шокирован резултатами

9:27

Про llvm сказать сложнее, т.к. у них нет фортрановского фронтенда, а большая часть плавучки - фортран

9:28

Чятик, а вы используете оптимизации компилятора? Проверяете что после оптимизации программа работает корректно?

9:30

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

10:32
@backendsecret А переменные англоязычные у вас не запрещены? :)

Подумываем, конечно, переписать всё на 1С чтобы полностью защитить себя от шпиёнов, но пока что держимся :)
twitter.com/Alvcohen/statu…

11:09
@backendsecret Так-то логично всё. Почему сразу наброс?

А Вы посмотрите какую реакцию это вызвало :)
twitter.com/GolubevVictor/…

11:14
@backendsecret Припекло у работающих на дядю за бугром.Тут же работают русскоязычные разработчики. Им надо понимать друг друга. Логично же=)

Английские комменты имели бы смысл если бы мы код открыли.Но исходники нашего компилятора никогда открыты не будут:)
twitter.com/GolubevVictor/…

11:26
@webholt @backendsecret Случай из RL: кодировка проекта win-1252 у нового сотрудника в IDE UTF-8 он запушился. У всех нечитаемые комментарии

У нас такое в принципе невозможно. Работаем только с машин, подготовленных админами
twitter.com/Alvcohen/statu…

11:42
@Alvcohen @backendsecret win-1252? Это вообще законно?
11:42

Заметил что большинство проблем о которых тут пишут (кодировки, конфликты, ветви) у нас решается простыми организационными методами

11:43

Это позволяет не тянуть излишне сложный инструментарий, чем уменьшает количество точек отказа. Есть определённые неудобства, но зато надёжно

11:44

Т.е. мы не сидим, разруливая безумные merge conflic'ы или сливая ветки. Мы хреначим код. Ну или комменты в твиттер

11:46
@backendsecret Из дома тоже никто не работает? )

Удалённый рабочий стол через vpn и etoken.Но в целом такое не особо приветствуется. Часто приходится устно обсуждать
twitter.com/Alvcohen/statu…

11:52
@backendsecret в svn как вы вообще ветки делаете? Ради просто в транк все фигачат и все

Конечно в транк. Ветки у нас - это просто стабильные версии компиляторы, которые срезаются раз в год
twitter.com/lisovskyvlad/s…

12:29

Когда у вас релиз раз в год и непрерывное тестирование транка, ветки git'овском смысле просто мешаются

12:30

Аудитория твиттера почему-то не воспринимает такой подход к ведению проекта, но в реальности у нас феноменальная надёжность компилятора

12:33

Для сравнения попробуйте собрать что-нибудь серьёзное при помощи gcc в режиме -O3 (я пробовал если что).

12:34

А мы нашим компилятором дистрибутив так собираем. И пришли мы к этому не так давно, года 2-3 назад. До этого тестировщики не разрешали

12:39
@backendsecret не понимаю, как одно связано со вторым. Или у вас нету прав для того, чтобы IDE'шку покрутить?

IDE подкрутить можно, но по дефолту всё настроено правильно.Твит был к тому что со своей машины мы не можем работать
twitter.com/trueneu/status…

12:42
@backendsecret это называется "релиз" ;)

От среза ветки до релиза оочень далеко. Сначала срез тестируется несколько месяцев :)
twitter.com/lisovskyvlad/s…

12:45
@backendsecret я так и понял. Твит был к тому, что "в принципе невозможно" - смелое заявление.

Ок. Формулировка "это возможно только в случае диверсии" подойдёт? :)
twitter.com/trueneu/status…

12:48
@backendsecret а так же в случае любознательного / криворукого / рукозагребущего коллеги видимо )

Такие отсеиваются в самом начале.Все новички у нас code review долгое время проходят.Так что вероятность крайне мала
twitter.com/Alvcohen/statu…

12:55

Жёсткий code review приучает перед тем как что-то коммитить хотя бы мельком просмотреть svn diff

12:56
@backendsecret а вот у git есть чудесное:

git add -p

который у нас прямо в должностной инструкции разработчика прописан :)

13:00
@backendsecret вот буквально 10 минут назад узрел в том, что коммичу неистовую диверсию от самого же себя и стало страшно.
13:00

. @strizhechenko всё больше склоняюсь к тому что административные меры эффективней технологий ;)

13:01
@backendsecret или вы должностную инструкцию административной мерой считаете?

Как по мне - это больше гайд для ускорения развития разрабов.

Ок, не административная а организационная
twitter.com/strizhechenko/…

13:10
@backendsecret бить никто не будет, если сделать
git diff filename.c
git add filename.c
git commit
Но за
git commit -a
можно и в щи получить

И правильно!
twitter.com/strizhechenko/…

13:10
@backendsecret хук на ересь сработает лучше всякого просмотра diff'ов глазами, даже если потом закоммитившему руки отрубить в назидание. :)

Согласен, тоже хорошая мера. Но всё равно лучше даже с хуком дополнительно глазами просмотреть
twitter.com/trueneu/status…

13:16
@Dronmdf @trueneu @backendsecret CI failure / хуки на ересь никто не отменяет.

Но глазами посмотреть что ты сделал - надо, ибо >>

13:18

У нас иногда бывают ситуации что в транк попадает ошибка, которая всем ломает тестирование. Т.е. никто не может закоммититься

13:22

Ситуация редкая, но случается. Такой ошибке выставляется стату P1 Blocker, и виновник обязан исправить её в течении суток

13:23
@strizhechenko @trueneu @backendsecret Да, не на все можно сделать хук. Но пробельчики - легко. И можно не ругаться а думать о глобальном.
13:25
@Dronmdf @trueneu @backendsecret ну так хуки + тесты + ревью глазами перед коммитом - минус 90% всякой гадости => меньше поводов ругаться.
13:26
@backendsecret а помочь виновнику в этом?

Не вопрос. Если помощь нужна, то она оказывается
twitter.com/strizhechenko/…

13:26

В плане помощи друг другу у нас довольно дружный коллектив, я после сидения на гентушных форумах долго привыкал :)

13:27

. @strizhechenko я даже больше скажу, бывает так что за сутки не получается поправить, это вполне нормально воспринимается

13:28
@backendsecret @strizhechenko виновника хотя бы кормите или сутки без воды?😺

В первый раз сутки карцера, во второй - шпицрутены
twitter.com/rubyonglass/st…

13:41
@strizhechenko @backendsecret ты же помнишь про тёмную комнату без еды?
13:43
@ruxeg @backendsecret ммм, мой первый офис :D
13:45

Раз уж снова про организацию производства заговорили, расскажу как оценивается производительность компилятора

13:48

Понятное дело что все эти наколеночные тесты из одного цикла (или как сейчас модно "микробенчмарки") - это лажа

13:49

Промышленные компиляторы традиционно замеряются на специальных бенчмарках SPEC CPU. Они представляют из себя выдержки из реальных приложений

13:50

Отдельно идут целочисленные задачи (сжатие, xml, кодеки, ...) и с плавающей точкой (химия, гидродинамика, ...)

13:51

Эти тесты одни из наиболее репрезентативных, хотя, я бы сказал, немного устарели. К ним вообще много претензий, но лучше ничего нет

13:54
@backendsecret ого, у нас немало общего - генту первый и основной дистрибутив на личной машине :)

Строго говоря первым у меня был Knoppix, но да, на десктопе гента и менять её я не собираюсь :)
twitter.com/fads93_zombie/…

21:23
@backendsecret про гентушников и компиляцию есть слоган: "Watching shit scroll by for hours makes me a compiler expert overnight!"
21:23

Кстати с гентой и компиляторами я тоже игрался когда-то.Понял что собирать её с gcc -O3 - самоубийство,и что от llvm в этом плане толку мало

21:25
@backendsecret, а что будет после суток!

Нужно будет рассказать что случилось и вместе будем искать пути решения. Но регламент говорит про сутки
twitter.com/ilnurkhalilov/…

21:26
@backendsecret, то есть не увольняете?) А кто писал регламент?

Неее, у нас все белые и пушистые )) Регламент - не знаю. Он также стар как и компилятор :) Больше 20 лет минимум
twitter.com/ilnurkhalilov/…

21:31

# Четверг 33 твита

Давайте поговорим про оптимизации. Идеология VLIW такова что вся работа по поиску параллелизма и перестановке операций ложится на компилятор

8:27

Это делает необходимым наличие хорошего оптимизирующего компилятора. Оптимизации могут ускорять программу в десятки раз

8:29

Т.е .минимально рекомендованный набор в случае Эльбруса - это "-O3 -ffast". По возможности неплохо бы добавлять -fwhole (аналог -flto)

8:30

Чтобы плотнее забивать широкую команду, нам нужно иметь длинные линейные участки (т.е. без ветвлений).

8:32

Пэтому для Эльбруса особенно важны такие оптимизации как inline, if-conversion и хорошие анализы указателей

8:33

Про inline можно сказать интересную вещь - по дефолту мы полностью игнорируем это ключевое слово в программах.

8:35

Вообще попытки ручных оптимизаций - зло. В случае с инлайном получалось чтопрограммисты выставляли его на холодных функциях, всё засоряли, #

8:36

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

8:37

С инлайном ещё интересно то что сразу после его применения размер программы уменьшается. Хотя итоговый бинарь получается больше

9:47

Кстати, у нас есть оптимизация, обратная к инлайну. Она разрезает большие процедуры )

9:48

Обратные друг к другу оптимизации часто встречаются среди цикловых оптимизаций.

9:49

Например есть reroll. Это оптимизация, которая откатывает последствия ручного unroll`а чтобы выолнить его по-нормальному

9:50

Потому что никогда не делайте unroll руками! Это очень платформозависимая оптимизация. Компилятор лучше знает.

9:52
@backendsecret оптимизируете под размер инструкционного кэша?

На сколько я знаю - нет.Это ранняя оптимизация, на ней такие вещи сложно предсказать. Нужно инлайнить горячие функц… twitter.com/i/web/status/7…

10:03

. @fads93_zombie там довольно много разных эвристик с попыткой предсказать эффект для других оптимизаций

10:04

. @ivbx некоторые алгоритмы квадратично едят память. Так что слишком большая процедура может не скомпилироваться

10:18

Разрезание процедуры может негативно сказываться на производительности, но лучше иметь тормозную программу чем уронить компилятор :)

10:20

А ещё лучше не писать больших процедур и не иметь проблем ;) А то видел я экземпляры по нескольку тысяч строк...

10:21

Цикловые оптимизации могут много чего сделать: разрезать цикл, слить циклы, поменять направление, переставить местами, вообще избавиться

11:04

Чем сложнее цикл (да и вообще код), тем сложнее компилятору с ним работать. Вызов в горячем цикле по указателю - это треш

11:05

Мне иногда кажется, что если бы в своё время победил Itanium, то весь мир IT сейчас выглядел бы по-другому. Языки были бы более продуманы

11:12

Современный компилятор должен уметь делать межмодульные оптимизации. В gcc этот режим включается по -flto. У нас по -fwhole

13:05

Это немного разные технологии, но суть примерно одна: получить возможность видеть содержимое функций из других модулей

13:07

В таком режиме происходит много прикольных плюшек. Например глобальные переменные получают признак static.

13:09

Режим -fwhole позволяет проводить нормальные анализы указателей, проводить девиртуализацию виртуальных вызовов и т.д.

13:10
@backendsecret нет, просто компиляторщикам досталось бы больше проблем
15:27
@backendsecret а если бы победил Эльбрус...

Эльбрус победит ;) twitter.com/fads93_zombie/…

16:24

Ещё есть очень классная штука - анализ указателей, основанный на типах. Он же strict-aliasing. С`шники тоже без ума от него, я знаю :)

16:27

Этот анализ позволяет хорошо рвать зависимости даже в помодульном режиме

16:28

Немного про “разрыв зависимостей” в ассемблере есть операции работы с памятью Load/Store. Операция load может работать долго

16:38

Если мы лезем в память, а не в кэш, то под сотню тактов и более. Мы стремимся запустить такие операции как можно раньше

16:39

Но нам неизвестно работают ли load/store по одному адресу. Задача анализа указателей выяснить это и разорвать зависимость

16:40

Обычно это сложные, ресурсоёмкие алгоритмы, нормально работающие только в -fwhole

16:42

# Пятница 8 твитов

Сегодня я предпочёл не строчить в твиттер, а поработать, поэтому ничего не писал. Давайте под конец дня ещё немного про оптимизации

20:07

Сейчас (по крайней мере год назад) в тренде было pgo - profile guided optimizations. Сама по себе постановка вопроса звучит как костыль

20:10

Т.е. мейнстрим компиляторы писали отдельные версии оптимизаций под использование профиля. У нас этот вопрос решён грамотно:

20:17

Профиль - неотъемлемая часть представления, оптимизации не могут его не использовать. Т.е. profile guided почти всё. Но это усложняет жизнь

20:17

Профиль нужно поддерживать в корректном состоянии, а это сложно. Даёт знать накопление погрешности плавающих операций

20:18

Ещё интересной особенностью является ситуация когда пользователь не снимает реальный профиль (почти всегда). Тогда мы его предсказываем

20:24

Компилятор пытается статически угадать куда и с какой вероятностью мы пойдём, сколько итераций будет у цикла

20:25

# Воскресенье 45 твитов

Ещё хотелось бы поговорить про образование. Много ли читателей преподаёт в ВУЗах? Хотели бы? Да, нет, почему?

9:08

Мне вот в какой-то момент предложили, я подумал “почему бы и нет”. Преподаю чисто ради удовольствия. Ну и чтобы предмет изучить получше

9:09

Преподавание вскрывает массу интересных особенностей и проблем. Например у разных ВУЗов совершенно разный подход к обучению

9:11
@backendsecret по таким же причинам преподаю школьникам олимпиадой программирование
9:11

В МАИ на 8 факультете сильное программирование, причём практическая сторона. На физтехе больше математики и есть аппаратная часть

9:13

Очень разный подход к студентам (но я так понял что это от кафедры зависит). Где-то студентов за людей не считают, где-то с ними сюсюкаются

9:15
@backendsecret нет, преподавание - не мое. При этом люблю делиться знаниями. Тут главное, чтобы тебя слушали с интересом.
9:15

Из-за разности подходов и программ приходится адоптироваться в реалии института. Особенно если твой предмет требует фундамента

9:17

Но я тут ругал физтех, а лучший курс по компиляторам именно там ;) Хотя курса по автоматам и теории сложности не хватает

9:18

Вообще в российских институтах почему-то не принято публиковать свои программы и учебные материалы. А между тем имхо это необходимо

9:20

Во время подготовки своего курса русскоязычных материалов я использую менее 10%. Просто потому что их нет. Это ужасно, я считаю

9:22
@backendsecret Это безумие из разряда «Студенты не будут писать конспекты, студенты перестанут ходить на лекции».

Западные институты публикуют свои программы и слайды как минимум. А бездельники вскрываются на экзамене twitter.com/webholt/status…

9:23

Большой плюс публиции учебных материалов в том что обмен такой информации между преподами совершенствует программу

9:25
@backendsecret преподаю пару курсов, just for fun
9:25

Не знаю что бы я делал без десятка забугорных институтов, у которых смотрел что и как они дают и адаптировал к своему курсу

9:27
@backendsecret амкурс у тебя публично доступен?

Сейчас есть очень примерная программа здесь mcst.ru/tekhnologii-op…, но по факту курс отличается. Свою я планирую в… twitter.com/i/web/status/7…

9:40
@ru_ostroumova @backendsecret в кемеровском универе
9:41
@backendsecret для меня iTunes U основной источник интересных курсов. pic.twitter.com/jJD1FK9A9m
9:41
@backendsecret все публикуется, просто похоронено в глубинах
9:42
@backendsecret программы вообще обязаны публиковать
9:42
@backendsecret а про удовольствие можно по подробнее ? В чём кайф то?

Во-первых сам начинаешь гораздо лучше всё понимать. Во-вторых просто удовольствие от передачи знаний twitter.com/dr_lexa/status…

9:45
@backendsecret удовольствие либо есть от этого либо нет, люди либо любят помогать либо нет
9:48

На русском, кстати есть неплохой ресурс с записями лекций lektorium.tv. На курсере ещё стали выкладывать русскоязычные лекции

9:51

А вот единственный курс по компиляторам с курсеры убрали. Пришлось с торретов качать

9:51
@backendsecret еще иногда что-то здесь проскакивает: openedu.ru
10:00

Расскажите, а вас устраивает уровень джуниоров когда их берёте? Каких знаний или навыков не хватает?

10:03
@backendsecret джуны, как правило, начитаются теории, а поставить ту же базу или либу и поиграться, практики набраться - нет.
10:29
@backendsecret навыка доводить задачу до конца
11:41
@backendsecret были мысли, но не было пед образования

Для ВУЗа пед. образование не нужно. Для школы - не знаю как формально, но имхо нужно. Я бы со школьниками работать… twitter.com/i/web/status/7…

11:43

В преподавании компиляторов часто опираются на классического dragon book, из-за чего пол курса рассказывают про создание лексеров/парсеров

11:47

Мне кажется такой подход устарел. Сейчас фротненд - не такая актуальная проблема и решается не так. А вот бэкенду уделяеется мало внимания

11:49

У нас компиляторы идут 2 семестра (лекции), и неплохо бы ещё добавить как минимум семестр семинаров с лабами

11:51

Ситуация осложняется ещё и тем, что на одной кафедре готовят и программистов (не только компиляторщиков), и аппаратчиков.

11:53

Но вообще изучение компиляторов необходимо аппаратчикам, как и аппаратуры - программистам. Иначе одни не понимают как работают другие

11:55
@backendsecret есть, называется "алгоритмы и модели вычислений" :) но преподаётся на фупме, а не фртк

И это печально :) twitter.com/fads93_zombie/…

12:08
@backendsecret преподаю базы данных. Сумы, СумГУ.
13:40
@backendsecret да школьникам серьезное и не интересно, сам со скуки окочуришся)) там обычно в уровень и педагоги) общался с такой))
13:58

Интересное наблюдение: учебный курс получается гораздо лучше и полезнее если ведёт его человек, который в данной области деньги зарабатывает

14:05
@backendsecret я тоже базы данных преподаю в СПбГЭТУ (Санкт-Петербург)
16:38
@backendsecret полностью согласен. Но это работает если дают основы из параллельной специальности, а не пытаются вы… twitter.com/i/web/status/7…
16:39
@backendsecret преподаю на физтехе, чтобы быть поближе к уютненькому родному универчику.
18:11

Итак, друзья, пора прощаться спасибо за интересную беседу, надеюсь я не слишком утомил вас кишками компилятора.

20:23

Напоминаю, что с вами был @alexanius, научный сотрудник отдела оптимизирующих компиляторов в МЦСТ

20:24

И на последок - о самой лучшей методологии разработки написано здесь: macode.ru. Всем хорошего воскресного вечера! Пишите код!

20:25

other