Как стать автором
Обновить

Что делать, когда выпускник топ-10 мирового вуза не может спроектировать блок сложения A+B

Время на прочтение5 мин
Количество просмотров120K
Всего голосов 135: ↑123 и ↓12+111
Комментарии222

Комментарии 222

Спасибо за статью! Вузы бывают разные)

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь

Это просто издержки советской системы в принципе - студента грузят знаниями (а спортсмена - тренировками под край и даже за край), и если ВУЗ топовый - то грузят в 20 раз мощнее, что даже весьма умному парню не дает возможности продохнуть и подумать самому хоть о чем-нибудь. И ведь тот, кто все это выдержал и сохранил ресурсы на что-то своё - тот становится крут. Только сколько таких выживших и не потухших?

Но все же процесс этот обратим, поэтому не все так страшно, хотя потеря времени и растрата усилий имеется.

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

Опять эти 'если'. А можно про проблемы обучения в той или иной стране без прикрутки, а вот если бы в России... везде есть косяки и везде есть потенциал стать лучше. Но нужны и условия. И не только в вузе, но и вокруг вуза.

Начали про косяки как-бы в Стенфорде (а скорее какой-то единичныйслучай), а закончили мечтами о курсах в России - не вижу логики.

Ну оно из сытой бездуховной Америки как-то всегда сподручнее Расеюшку то любить, типа такого ))

студента грузят знаниями

в советской системе не хватало практики (за исключением «физтеховской системы»).
а знаний (в «нетоповых», но и не из последних) ВУЗах давали достаточно, но не столько, чтоб «не продохнуть».

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

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

"студента грузят знаниями" - нет ничего плохого в том, чтобы грузить студента знаниями. Я вот только через 10 лет после окончания ВУЗа понял, что некоторые предметы были не лишними. Например матан и курс по формальным грамматикам. И жалею теперь, что не учил их тщательнЕе. Ибо без них ни компилятор свой написать, ни нейронку с распознаванием каких-нибудь автобусов. (И жаль, что в ВУЗе забыли рассказать, где бы мне эти знания могли пригодиться).

Хуже, вас не научили их применять везде. :-(

Скажем, формальные грамматики — это те же ADT (algebraic data type), в известной EOPL про это рассказывается.

Хых. Вот за что я люблю хабр - так это за совершенно неожиданные комменты.

За книжку спасибо, не знал про неё.

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

Увы, знания о формальных грамматиках. и связанным с ним разбором (LL, LR(k) итд) - это типа 3% того что нужно знать, чтобы сделать компилятор. Анализ потока контроля и данных, распределение регистров, кодогенерация даже банальных выражений с набором шаблонов - для этого нужно материала гораздо больше, чем формальные грамматики для лексического и синтаксического анализа. Ну и разумеется учить это "всухую", без практики совершенно бесполезно - чтобы хоть что-то отложилось, нужно писать кучу маленьких микрокомпиляторов (типа программу на тысячу строк которая парсирует выражения по таблице приоритетов операций и генерит код с выделением временных регистров).

Это стоит совместить с изучением open-source компиляторов и интерпретаторов, возможно участием в таких проектах, например реализовать какую-нибудь недостающую фичу (в голову приходит Icarus Verilog - это не компилятор, а симулятор, но в плане парсирования и оптимизаций там есть что изучать).

Вот тогда будет толк. Иначе это не образование, а научпоп какой-то. То есть человек сможет поговорить, но ничего не сможет сделать.

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

А вот в российской системе на этом экономят. Даже лабы в симуляторах.

Поверьте, лабы в симуляторе — это очень круто и продвинуто. Альтернативный вариант — 4 устаревших на 30 лет комплекта на всю группу без документации — куда хуже.

Но все-таки симуляторы не дают «полного ощущения».
Не могу объяснить. полезно, но мало. Типа «резиновой женщины».
Нет «бабаха» при ошибках, нет «волшебного белого дыма, на котором работает вся электроника»
Хотя я со своей колокольни электронщика смотрю. а некоторые вещи реально только на симуляторах практиковать (не хочу «бабаха» от физика-ядерщика, да и непрочность здания лучше показать на симуляторе)

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


Только всё это я почему-то отношу не к недостаткам симуляторов, а к их достоинствам.

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

всё так. Но потом отлаживая всё в симуляторе сталкивается 'совершенная' система с реальностью, где кнопки дребезжат, где от света не видно ничего итд.

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

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

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

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

Практика в ВУЗах была весьма паршивой. Кроме топовых ВУЗов. Но и там болше было практики на предприятиях.
Симулятор, кстати, весьма неплохо. На 5 курсе как раз занимался написанием симулятора для этой цели. Помогло сильно расширить практику.

Вы писали симулятор чего? Верилога на уровне регистровых передач или команд микроконтроллера или там на уровне транзисторов. С симулятором верилога есть проблемы - см. https://habr.com/ru/post/706484/comments/#comment_25141454

Юрий, я вас умоляю… 1992 год, какой там «эмулятор верилога»? Мы с верилогом (или в ВХДЛ) только-только ознакомились, «в перепечатке» (такие толстые книжки-централизованная компиляция из кучи зарубежных жунналов)…
Эмулятор MCS-51, конечно…

Тогда это бессмысленное сравнение. Симулятор (в СССР говорили "эмулятор" хотя в штатах называют эмулятором другое) 8051 (правильнее всего Instruction Set Simulator - ISS) действительно можно использовать без потери образовательной ценности - как для обучения программированию 8051, так и для обучения программистов типа вас писать симуляторы.

Но проектирование на уровне регистровых передач делать только на симуляторе плохо. Потому что (см. выше):

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

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

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

Хотя последний пункт относится и к симулятору 8051

программистов типа вас

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

«Симулятор» вполне «подключался». Не ко всему, конечно, к чему можно подцепить реальный МК, но все-таки лучше голой абстракции.
Но проектирование на уровне регистровых передач делать только на симуляторе плохо.
«только на симуляторе» (любом) плохо делать практически всё. Ибо он отражает только часть реальности. Но иметь симулятор — хорошо. потому, что на нем можно «попробовать» быстрее и проще.

*** Это обругали, или похвалили? ***

Скорее похвалил. Я сам в 1991 году написал эмулятор бортового компьютера Орбита-20/700 на PC, вместе с простым ассеблером, линкером и отладчиком, в текстовом режиме но оконном, а также спортировал на него Portable C Compiler (PCC) и продал все это через малое предприятие военному училищу в Риге.

Также замечу что уже в то время симулятор VHDL в СССР был (правда я не знаю его качество и степень поддержки VHDL). Его написал мой знакомый Юрий Татарников.

*** «Симулятор» вполне «подключался». Не ко всему, конечно, к чему можно подцепить реальный МК, но все-таки лучше голой абстракции. ***

Это хорошо, а к чему например?

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

Это был Корвет, там на порту расширения ВВ55 стоял (ну и еще прерывание, еще от один канал от таймера, еще что-то)- поэтому кнопки, светодиоды/семисегментник, хотел шаговик (только начали нам читать мехатронику), но что-то помешало. Обидно, что кому-то отдал коробки дискет, на котором были исходники, и «всё нажитое непосильным трудом» пропало. (Остались только исходники редактора, из которого всё и вырастало.) На кафедре к концу 90-х тоже ничего не осталось. Обидно.

Очень сомневаюсь что это был практикант из Стенфорда ?

Агонизировали на этом вопросе другие, но тоже из топ-вузов.

При этом мой давний практикант из Стенфорда тоже не знал работы valid/ready на AXI шине, но он по крайней мере не утверждал, что знал. Вообще он был смышленый парень, но на его примере были видны дыры в программе даже вузов с сильной репутацией в архитектуре и микроархитектуре. Например в стенфордском учебнике есть про skid buffers, но нет про credit-based flow control итд (это не такая суровая но тоже проблема)

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

" FPGA инженер с опытом мою задачку про A+B решит. "

Кстати, 3000$ за неделю -> 600$ в день - в общем это такая "средняя" ставка практически любого учебного курса того же IBM. У российских учебных центров ставки поменьше, но западные расценки примерно такие, от Business Intelegence до Enterprise bus

за одного студента?

Не мимокрокодил, а реальный студент из топовой московской школы в Техническом Университетете Берлина (для справки, топ-140 мира по рейтингам Times и QS, Топ-2 или Топ-3 Германии среди технических университетов после Мюнхенского и Аахенского, Топ-1 DAAD среди ВУЗов Германии по предпочтению иностранцев). С описанным в самом начале статьи знаком не понаслышке.

Отучился бакалавриат (3 года) по направлению Информатика в машиностроении (дословный перевод старого названия). За 3 года обучения, хоть и информатика, была только база: компьютернориентированная математика (название предмета на 2 семестра, объединяющего алгоритмы на массивах, дискретную математику, хеширование и функциональные языки) и системное программирование (базовые навыки работы с ЯП С). Ни одного проекта. За трехмесячную практику и следующие за ней уже более года работы в реальной компании, занимающей написанием системного софта для жд-транспорта я получил гораздо больше реальных знаний и навыков. Плюс, к дипломной работе изучил ROS-2 и работу с ним. Ни о каких реальных знаниях современных технологий речи просто не идет. База и только база. Все остальное на саморазвитии. Поэтому в той же Германии студенты учатся на бакалавриате 6 лет вместо трех, параллельно работая и получая знания и навыки, связанные с современными технологиями и протоколами.

В университетах студентам просто не дают возможность работать с какими-либо технологиями или протоколами - обучение этому возлагают на юудущего работадателя. В результате, за семестр 14 недель по 11 пар в неделю в сумме в немецком вузе против 17 недель по 16 пар в российском. Результат сравнивать не стоит - есть вероятность сильно разочароваться. Но на выходе из немецких ВУЗов получаем хоть и отчасти хреновых, но специалистов, которых можно чему-то научить со здоровой психикой и готовых к дальнейшему саморазвитию, а из российских ВУЗов получаем специалистов с вроде бы хорошим багажом знаний и навыков, которые насильное впихнуты через "не могу" в мозги, что там творится каша, с подорванным психическим здоровьем (не всегда и не везде, но имеет место быть) и отторжением идей дальнейшего саморазвития, так как они просто устали морально учиться. И в результате дилемма: а кто вам, как работадателю, больше подойдет в долгосрочной перспективе (если у вас, конечно, вакансия не "здесь и сейчас", а на многие проекты вперед)?

В университетах студентам просто не дают возможность работать с какими-либо технологиями или протоколами
не дают возможность — это запрещают, отгоняют, палками бьют?
17 недель по 16 пар в российском
16 пар — это на пятидневке 4.8 часа в день. Неужели это так сильно ломает нынешнюю студенческую психику?
из российских ВУЗов получаем специалистов с вроде бы хорошим багажом знаний и навыков, которые насильное впихнуты через «не могу» в мозги, что там творится каша
насчет каши — согласен. четкой структуры всего обучения (взаимосвязей предметов, учебных курсов. структуры.) у отечественных ВУЗов или нет, или она до студентов просто не доводится: «учи что сказали», «так положено»

не дают возможность — это запрещают, отгоняют, палками бьют?

В данном контексте "не дают" в смысле "не предоставляют". Через те же курсовые или проектные работы (есть с чем сравнивать в ВШЭ и Бауманке).

16 пар — это на пятидневке 4.8 часа в день. Неужели это так сильно ломает нынешнюю студенческую психику?

16 пар - усредненное. Где-то 16, где-то 17, где-то и все 19. Помимо этого еще лабораторные и домашние работы, которые надо сдать вовремя, а для этого поймать препода (из того, что слышал от одноклассников и друзей, кто учится в российских вузах). Так что к 16 парам добавляем еще работу дома. По всем предметам, которые есть в семестре (а это 6-8 по учебным планам). Ну и получается завал, в котором можно начать тонуть и сломаться.

у отечественных ВУЗов или нет, или она до студентов просто не доводится: «учи что сказали», «так положено»

Скорее второе, чем первое. По крайней мере в сравнении Бауманки и ВШЭ с техническим университетом Берлина, где про структуру обучения и взаимосвязь предметов если и слышали, то явно не вслушивались. Хотя те же функциональные языки нам дали за 4 недели, у моего знакомого в Бауманке на это целый семестр.

В данном контексте «не дают» в смысле «не предоставляют». Через те же курсовые или проектные работы (есть с чем сравнивать в ВШЭ и Бауманке).

В каком-то там ЧПИ во второй половине 80-х мы вполне могли подойти к преподу и сказать — а давайте мы сделаем вот это. Не помню такого, чтоб нас не поддержали. Т.е. мы просто проявляли инициативу.
16 пар — усредненное. Где-то 16, где-то 17, где-то и все 19.
если 16 усредненное, а «где-то 19» — то где-то и 13… лабы входят в учебное время, в эти «13-19». домашки — да, есть. еще часа три. т.е. и получаем стандартный обычный привычный для всех трудящихся 8-часовой рабочий день.
По всем предметам, которые есть в семестре (а это 6-8 по учебным планам)
у нас в воспитательных целях на первом курсе сделали так: дали курсач (или аналогичное задание) со сроком сдачи 6 недель. через неделю дают по другому предмету задание со сроком сдачи 5 недель. еще через неделю — по третьему, со сроком 4 недели… в общем, в срок сдачи надо было сдать штук 5-6 заданий за пару дней. смогли либо те, кто работал планомерно и размеренно, либо «сумасшедшие гении»(которые смогли сделать это все, как водится, «в последнюю ночь перед»). Это хорошо научило всех работать более-менее планомерно. называли это почему-то «метод бульдозера».
Скорее второе, чем первое.
у некоторых первое, у некоторых второе. причем даже на разных факультетах одного ВУЗа.

Не буду говорить за всю Одессу, но по тому как у меня было расписание - далеко не всегда это было 4,5 - 6 часов одним куском.

У меня были окна, у меня были выходные дни. Соответственно бывало, что один день это выходной или лайтово 3 пары, а другой день 6 пар одна за одной. Или допустим 4 пары, но с окном посередине. Или с переходом в другой корпус за несколько кварталов на большом перерыве в 20 минут. Иногда это были занятия неделя через неделю и я мог одну неделю учится 3 дня, а вторую 5.

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

Теперь вспомним, что уже были исследования про продуктивные часы в интеллектуальном труде и сопоставим 4-5 часов из них с 6 -7 часами, которые выходили у меня. И поймем причину таких проблем с психикой.

ну я как бы тоже учился...
А после учебы еще работал на кафедре, да еще по хозтемам в ОНИЛ. ну и позже — еще и программы писали для Корветов, которые продавали. (что давало вкупе с повышенной стипендией денег больше, чем у инженера-выпускника)
Это всё не мешало общаться с противоположным полом, заниматься чем-то вроде спорта, дежурить в ОКОДе, читать худлит и даже изредка, хм, пьянствовать на днях рожденья и т.п…
Психика в порядке...

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

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

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

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

Когда я учился, у нас было по 5-6 пар в день. в субботу 7 (две последние практика по группам раз в две недели). После 4 курса стало полегче, там было уже по 4-5 пар, но к тому моменту я уже успел подустать от того, что за 4 года мои практические навыки программиста никуда не двигались и ушел работу работать.

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

Огромный объем времени сжирали работы по социологии, психологии и педагогике, культурологии, культуре речи, русскому языку и еще десяток предметов, назначение которых для получения навыков по программированию на популярных языках казалось весьма сомнительным. Хотя сопромат и термех были интересные, но вот инжинерная графика с вечными чертежами от руки казались кошмаром. Спустя два года на встрече с преподавателями было очень интересно узнать, что можно было сдавать работы в CAD а не от руки, но к тому времени уже даже эмоций не осталось, только вечное желание поспать.

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

странный у вас был ВУЗ
1.у нас такую нагрузку считали чрезмерной (я даже не помню более 5 пар, которые были крайне редко), обычно не более 4, в субботу 2 или 3. Советские времена. (я уже в теме писал, что нам не разрешили включить в индивидуальный учебный план пару предметов, потому что мы превышали разрешенное учебное время)
2. страннен разрыв программы, когда на одном предмете применяют понятие, а учат понятие на два курса позже. у нас, кстати, дивергенции и роторы были в 3 семестре (как и у сына), что там тянуть до 3 курса- непонятно.
3. набор лженаук™ у нас был более ограничен марксизмом-ленинизмом (зато преподы были ядренее.). У сына тоже не наблюдал такого зоопарка
4. сопромат и термех на ИТшных специальностях? у нас на инженерной этого не было. (читал учебники по ним совершенно добровольно, из интереса, для общего развития, ну и иногда для помощи в компьютеризированных расчетах товарищам со специфических специальностей)
5. инграф была у всех инженерных, а КАДов тогда не было. сейчас у околоИТшных специальностей (судя по сыну и его друзьям) ее нет.
на что жить-то, если все доступное время жрет учеба
да, это сейчас основной вопрос. у нас теоретически можно было прожить на стипендию (она была 55, ну и обычно еще +15%, такая зарплата была у малоквалифицированых. Плюс столько же зарплата лаборанта, плюс еще — у меня получалось вообще неплохо, но это скорее исключение, у большинства 55) — но мы были, наверное, последними, кто мог прожить на стипендию. уже под наше окончание СССР издох, инфляция и всё такое. Но вот сын работает со 2 курса, порой со скрипом, но успевает — ну нет у них описываемой вами учебной нагрузки. И у племяшей нет (1 и 4 курс совсем другого вуза совсем других специальностей, далеких от инженерных).
странный ВУЗ.

Во-первых, навык, который требуется для решения моих задачек, в учебниках в Стенфорде и MIT есть, в частности начиная с 464 страницы в учебнике ниже (он стоит в стенфордском книжном магазине как требуемый учебник).

Во-вторых, не все студенты учатся 6 лет быть только "хорошими людьми" (это не професия). Есть и те, которые делают качественные open-source проекты, например открытый GPU из многих RISC-V ядер в Georgia Tech ( https://vortex.cc.gatech.edu/ ) и открытая система разработки микросхем OpenROAD в University of California San Diego ( https://github.com/The-OpenROAD-Project - см. вклад MS students https://theopenroadproject.org/our-team/ )

Бакалавриат 3 года??? Кудаааа???? Я в 2014 закончил техникум, где учился 4 (!) года и выпустился техником (!). Когда пошёл бакалавриат за 4 года, я уже был очень удивлен. А тут 3. И да, учился я, в основном, по 3 пары в день 6 дней в неделю. Зачастую было 4 пары, редко 5. Времени хватало и на учёбу, и на спорт, и на какие-то свои проекты, типа цифрового термометра на pic16f84a с ds18b20. И диплом у меня красный со средним баллом 4.99. Потом специалитет 5 лет по 3-4 пары 6 дней в неделю. И так же, хватило времени на диплом со средним баллом 4.7, патент и пару свидетельств на ПО. О чем вы вообще речь ведёте, я не сильно, если честно, понимаю. По мне, если специальность и сфера интересны, то находится время на всё. А если мама с папой запихнули или поступил "хоть куда-нибудь, лишь бы корочка была", то и ожидать нужно соответствующего.

В Западной системе образования (и тут дело не в том, Болонская она или нет - это лишь унифицирование ученых степеней) бакалавриат длится три года, магистратура - два. Выведенный в Германии из использования, но который хотят вернуть, Диплом (аналог специалитета) длился 4 года. Меньше времени за счет того, что нет иностранного языка, права, философии, экологии, экономики и родного (в случае Германии немецкого) языка, как это есть в тех же российских ВУЗах. Но по факту мало кто учится 3 года на бакалавриате - в среднем 4-4,5 по статистике моего университета. Причины две: 1) студенты заведомо берут меньше предметов в семестр, чтобы оставалось время на себя любимых и чтобы не перетрудиться (без шуток и сарказма - все серьезно) и 2) студенты не могут просто-напросто за 3 года взять все те предметы, которые хотят и которые им интересны, потому что происходит наложение пар (читай ниже почему).

У меня на магистратуре 11 пар в неделю (столько же было на бакалавриате, к слову). Но одним из важных аспектов является то, что расписание в Европе сами себе составляют студенты на основании того, когда преподаватели поставили пары по своим предметам в расписание (а из этого вытекает наложение предметов - никакого согласования расписания между кафедрами и факультетами просто нет: когда преподу удобно, тогда и будет поставлена пара и пофиг, что у студентов может возникнуть наложение, в следующем году возьмут второй предмет тогда). В результате, в моем случае, в текущем семестре у меня в понедельник 1-2 и 5 пары, во вторник 2 и 4-5 пары, в среду 3-5 пары, в четверг 2 и 4 пары, а пятница свободна. И за счет этих перерывов студенты в Германии действительно экономят свое свободное время вечером, делая домашки на больших перерывах, а вечером могут пойти в зал позаниматься спортом или на пробежку, ну или потусить где-то с друзьями.

Для сравнения в России, из того что я знаю по топовым ВУЗам (МГУ, ВШЭ, Бауманка), у студентов пары идут одна за другой, потому что так составлено специально расписание умными специально обученными для этого людьми. И это 5 дней в неделю 3-4 пары. И прибывание в универе с 8:45 до 14:45 или 16:30 (три или четыре пары соответственно), а потом доехать до дома (а это от 15 минут до полутора-двух часов, как повезет) и еще доделывать лабы/дооформлять чертежи/доделывать работы с семинаров/делать домашки, на что тоже уходит время. У кого-то больше, у кого-то меньше. Ну и результат получается у кого-то лучшего, у кого-то хуже.

Ну и важен вопрос отношения к учебе в целом и качества преподавания в самом ВУЗе. Где-то могут раслабленно, спокойно, не напрягаясь относиться к образовательному процессу, а где-то это все превращается в ад. Ну и исходя из этого формируется отношение к учебе и желание заниматься еще чем-либо у студентов. Даже на примере своих одноклассников и знакомых прекрасно это наблюдаю: кто-то игровой сервер успевает пилить, кто-то со Сколково и ЦЕРНом работать, а кто-то просто выживает.

А чем в германских учебных заведениях определяется набор предметов, из которого студент выбирает? Как там определяется полученная «специальность»? (или ее как таковой — нет?)
А чем в германсих учебных заведениях определяется набор предметов, из которого студент выбирает?
В основном желанием студента.

Как там определяется полученная «специальность»?
Набором, из которого студенту дан выбор.

Зависит от направления очень сильно. В общем и целом, есть набор обязательных предметов (для "информатики в машиностроении" это матан до интегралов по объему, линал+ангеом, диффуры, ЧМы, статика+сопромат, кинематика+динамика, компьютерно-ориентированная математика (алгоритмы на массивах, дискретка, хеширование, функицональные языки и машина Тьюринга), системное программирование, основы электротехники и термодинамика; для обычной "информатики" - матан, линал, диффуры, ЧМы, устройство полупроводников, три или четыре предмета вокруг программирования софта и систем). Далее идет набор обязательных на выбор (в "информатике для машиностроения" это вариации предмета "Измерительная техника и сенсоры" от разных кафедр под разным названием и вариация предмета "Теория автоматического управления" от разных кафедр под разными названиями. Затем добровольно-обязательных: список из примерно 150 предметов по разным направлениям, релевантным для специальность (от систем автоматизации до конструирования и аэродинамики для "информатики в машиностроении"). И еще два предмета на свободный выбор.

По факту специальность определяется как базовая, исходя из базовых предметов и названия направления подготовки, и как специфическая, исходя из предметов, указанных в дипломе. Иными словами, с информатики в машиностроении тебя всегда возьмут программировать любой софт для общих систем, но никогда не возьмут программировать специфический софт, который требует определенных знаний (к примеру, писать логику автопилота и автомата тяги летательного аппарата, так как для полной картины нужно знать еще кучу всего сверху о механике полета и автоматическом управлении управляющими поверхностями ЛА)

А на вопрос о наборе предметов, то обязательная база + минимум 6 предметов из 150 добровольно-обязательных + минимум 2 на свободный выбор.

Понял, спасибо. Примерно то же видел в системе MIT'а.
Если студент идет не «за дипломом», а «реально учиться» — на мой взгляд, это весьма неплохая система.
Буду очень признателен, если дадите ссылку на список «150 добровольно обязательных», и «для свободного выбора».

Ссылка на регламент "Информатики в машиностроении" Технического Университета Берлина. С 5ой страницы - полный перечень всех предметов, с пункта 5 - добровольно-обязательные (насчет 150 перегнул, конечно, но выбор все равно большой). "Свободный выбор" - любой предмет любого факультета любой кафедры. Хоть "Микроэкономика", хоть "Управление персоналом", хоть "Психология на производстве". Можно также брать предметы и в других университетах - знаю людей, которые посещали предметы в Свободном Университете или Университете имени Гумбольдтов.

Спасибо!

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

Ой не скажите. Абсолютно уверен, что студент с машиностроения в Бауманке знает больше чем студент с машиностроения ТУ Берлин при равных приложенных усилиях. Просто по объему знаний в том же сопромате (ровно в два раза меньше - я сверял экзаменационные вопросы и свой уровень знаний).

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

а почему тогда мы покупаем (покупали?) у сименса турбины и ласточки, а не наоборот?

Потому что потом Сименс уже сам "дообучает" молодых специалистов через их прикрепление к проектам, где опытные сотрудники уже делятся опытом. Это часть карьерного роста. Серьезно.

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

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


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

честно говоря, не понял что вы пытаетесь сказать.
Что коммерческая успешность компании «Сименс» определяется далеко не только талантами ее инженеров, и что по тому, кто у кого что закупает, нельзя впрямую судить о качестве подготоки инженеров.

Вероятно то, что если даже самых способных и подготовленных в мире инженеров использовать исключительно для шевеления говна, то опыт у них будет только в в этой сомнительной специализации.
И какое-либо сравнение быстро станет совершенно бессмысленным.
Как сравнение поездов Siemens, пачками колесящих далеко за пределами родной Германии, с очередным фейслифтингом для Аллы Пугачевой.

Я работаю в компании Codewerk, которая работает в партнерстве с Сименсом, Алстомом, Штадлером и Талесом (в разных проектах). Все технические решения (хард) - это развитие уже имеющихся. Даже новый ICE 3 neo (простите, только на немецком нашел) - это развитие старого доброго ICE 3, он же Siemens Velaro, он же Сапсан. Из глобально новых решений - это системы управления. И ведущим разработчикам 40+. А помогают им молодые "специалисты", которые одновременно с этим учатся тому, что не дал университет. Так и получается, что через передачу знаний от старших разработчиков к младшим возникает преемственность знаний и поддержание высокого качества разработки

а почему тогда мы покупаем (покупали?) у сименса турбины и ласточки, а не наоборот?
Потому что грамотные инженеры улетают из России в Сименс, а не наоборот. Я таких двоих лично знаю, и подозреваю, что это правило, а не исключение.

А вот теперь возникает, как мне кажется, закономерный вопрос: а всем ли поступившим нужно высшее образование? Смысл его получать, тратить деньги, нервы, а главное, время, чтобы потом идти работать не по специальности? Может было бы проще закончить колледж с какой-то более приземленной специальностью? Если понравилось, как, например, получилось у меня, пойти дальше в вуз, магистратуру, аспирантуру и т.д. Я вот выпускался вообще сисадмином по специальности 23.01.01. Потом пошёл дальше в безопасность, правда вопрос "нравится или не нравится" не стоял, я сразу знал, что это моё.

Вообще, высшее образование дает (ну да, сейчас в меня опять полетят струикопья) «общий культурный уровень», «кругозор» и все такое. Т.е. «общество, где у всех такое образование» должно быть более развитым.
Работать по специальности — тут сложнее: кто-то разочаровывается (в специальности, или вообще «в работе головой»), кто-то работает по смежной, кто-то дообразовывается (самостоятельно, курсы, вторая вышка) до другой. Даже в советские времена, где [по идее] каждому выпускнику было уготовано обязательное место работы на 3 года — и то по специальности работали далеко не все.
Ну и большинству действительно не нужно по тем или иным причинам (от «узкоспециального интереса» до «неспособности») высшее, и вполне будет достаточно среднего профессионального или среднего специального.

высшее образование дает «общий культурный уровень», «кругозор» и все такое

Очень спорный вопрос насчет культурного уровня. Кругозор расширяет. В условиях российских ВУЗов.

Т.е. «общество, где у всех такое образование» должно быть более развитым

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

Ну и большинству действительно не нужно по тем или иным причинам (от «узкоспециального интереса» до «неспособности») высшее

В результате по внутренней статистике ТУ Берлин процент незаконченного обучения (нем.: Studienabbruch - дословно "Отмена учебы") на бакалавриате составляет примерно 60%, варьируясь от направления к направлению - на машиностроении доходит до 75%, на производственном менеджменте не доходит и до 15%. А для того, чтобы поступить в университет, нужно закончить гимназию, сдать итоговые экзамены и на многие направления еще иметь средний балл выше минимального (Информатика, например, держится на 2.3, а Машиностроение на 2.5 последние несколько семестров - в немецкой системе 1.0 - это идеально, 5.0 - неуд).

НЛО прилетело и опубликовало эту надпись здесь

Про какую шарагу речь?

НЛО прилетело и опубликовало эту надпись здесь

Нуу, в узком кругу разработчиков RTL не знать кто такой Юрий Панчул как-то уже неприлично, по-моему. Вы точно имеете отношения к плисам и пр?

НЛО прилетело и опубликовало эту надпись здесь

Вы так говорите, как будто Стэнфорд выпускает готовых Клиффордов Каммингсов, не меньше.

И даже мобильное отделение Samsung — это шарага
Простите, а вы много знаете более передовых и сложных с технической точки зрения чипов, чем изготавливаемые по нормам 5 нм процессоры мобильных телефонов?

4 нм. Причем у Samsung 137 MTр/мм2 против 146.5 у TSMC и шаг затвора 57 нм против 51. Так что Samsung продувает везде.

Так что Samsung продувает везде

действительно, нечего у таких лузеров работать

Следую Вашей логике: Яндекс тоже лузеры. Работать стоит только в Гугл (Алфабет)?

Один пример нашли, отлично. А хотя бы десять найдете? Даже без учета того, что ваш пример некорректен, потому что с точки зрения инженера-разработчика среднего звена разница между процессами 4 нм и 5 нм минимальна.
Мне кажется что он даёт более интересные перспективы.

А как тогда получается такое противоречие, что выпускник Стенфорда не может реализовать банальщину? То есть вы берёте крутой математический университет, который математиков выпускает, даёте выпускнику задачу про 2+2*2, а у него получается 8. У будущего математика…

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

И пожалуйста, больше не пишите, что Samsung — это шаражкина контора в научно-инженерном плане. Вы тем самым выдаёте свою просто чудовищную некомпетентность в сфере разработки электроники в целом и в науке в частности.
НЛО прилетело и опубликовало эту надпись здесь
А ещё у самсунга несколько десятков центров R&D раскиданных по всему миру. И он является одним из четырёх крупнейших мировых вендоров памяти NAND, проводя полные научно-исследовательские циклы по её развитию — не думаете же вы что технологию TLC самсунг освоил просто почитав об этом в периодике, походу отмахнувшись от всех полупроводниковых и квантовых эффектов, возникающих при уменьшении всех этих нанометров. Рисом торговали и парк развлечений есть, ага…

Хотите заниматься реально наукой — идите в MIT или Стэнфорд, поступайте в магистратуру и оставайтесь на кафедрах. Чего вы с чистой наукой лезете в прикладную сферу? Хотите уметь писать энергоэффективный высокоскоростной и валидный код описания работы логической схемы — как видно, не факт что Стэнфорд в этом поможет, в отличии от того же Панчина или работы в Самсунге. У вас слишком высокомерное и даже спесивое отношение к окружающему миру. При таком подходе, конечно, никаких перспектив нигде видно не будет, кроме тех где есть узнаваемый А-бренд. А делать далекоидущие выводы о «собственном развитии», при этом активно хейтя, признанного спеца в сфере только лишь за то, что он поломал вашу картинку мира идеальных брендов… «Мы вас услышали, ваше мнение очень ценно для нас».

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

А ещё у меня Galaxy S22 Ultra на чипе Snapdragon Gen 1, созданный в фабрике Samsung. Греется сильнее, чем бы грелся от TSMC (как раз 8+ Gen 1).

греется сильнее, чем бы грелся от TSMC
но слабее, чем если бы был произведен на заводе «Микрон». И вообще мы говорили об инженерах-разработчиках, а не об инженерах-технологах.

Не уверен, что 4 нм можно перенести свободно на 22 или сколько там у микрона. Его надо переверефицировать...

И Arm вряд ли даже даст им 4 нм верефицированный дизайн.

У Микрона 90 нм.

А процессору не обязательно быть ARM. Юрий вон проприетарные GPU ядра разрабатывает.

И Arm вряд ли даже даст им 4 нм верефицированный дизайн.

Байкалу и Элвису вполне себе давали подходящие для 5-7 нм дизайны.

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

А может это быть “ошибкой выжившего”? Можно учиться в Стэнфорде и по выпуску быть менее квалифицированным (в контексте разработки FPGA) чем выпускник какого ни будь регионального вуза, много (да фактически все) зависит от студента, его желания и мотивации. Кто-то отслушал лекции, выполнил минимальную практику, получил зачет и пошёл дальше, а кто-то сделал все тоже самое, но еще закопался в книги и теорию поглубже, сделал более сложный курсовой проект.

Естественно может. Тем более мозги у всех по-разному работают. Один быстрее сообразит, другой — медленнее. При использовании моделирования поведения схемы вышеприведённая задача решаема в принципе)

Но тот факт, что уровень «соображаемости» падает это «может» всё равно не оспаривает. И если 10 лет назад подобную задачу решило бы сразу условно 85% испытуемых, то сейчас — не более 60% (цифры взял с потолка, просто для демонстрации условного разрыва). Это очень хорошо описывает статья К вопросу о математических способностях студентов или как учить переполненный мозг. И Стэнфорд это или всеми забытый ВУЗ в какой-нибудь провинции — роли не играет. В независимости от того, что у некоторых на название Стэнфорд сразу какая-то реакция агрессивного отрицания проявляется.

Приведите примеры интересных перспектив. Даша Навальная?

НЛО прилетело и опубликовало эту надпись здесь

Вполне ожидаемо. В тексте преступная война глумливо названа наступившей «международной напряженностью».

Просто пришло в голову. Но вы опишите примеры интересных перспектив (я без подколок). Мне интересен взгляд на процесс и цель обучения с разных сторон, я вобще тусовался с самыми разными стенфордцами: как техническими (отцом ИИ Джоном Маккарти, столпами микроархитектуры и автоматизации проектирования Джоном Хеннесси и Джиованни де Мичелли), так и с Макфолом его подопечными которые писали статьи про социологию и счастье. То есть я признаю разные вгляды на вопрос.

НЛО прилетело и опубликовало эту надпись здесь

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

У вас доведенный до крайности культ ВО.

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

Не знаю, что там у вас в долине, а у нас управдом - друг человека все друг друга знают в лицо.

НЛО прилетело и опубликовало эту надпись здесь

Такой потери авторитета Юрий просто не переживёт. Особенно у личности с отрицательной кармой и нулём публикаций.

акой-то очередной стартап.
С каких пор мобильное подразделение Samsung стало «каким-то стартапом»? )

Samsung Advanced Computing Lab шарага? А у вас большое самомнение.

Почему, кстати, унизительное? Задание не такое простое, как может показаться, там масса нюансов.

потому что показывает некомпетентность кандидата?

НЛО прилетело и опубликовало эту надпись здесь

По-вашему нужно задавать вопросы, на которые кандидат заведомо знает ответ? Зачем такое собеседование?

Задание всего лишь проверяет понимание определённого популярного паттерна проектирования. Если перевести на программистский, то это по сложности как если на собесе С# программиста попросили бы реализовать паттерн singleton например. Вроде всё просто, но вписаться всегда есть где.

как если на собесе С# программиста попросили бы реализовать паттерн singleton например

ну так было бы странно, если свежий выпускник приличного вуза уже забыл (или хуже того — никогда не знал) что такое этот самый singleton.
ну или вроде бы как зная не смог реализовать, ещё лучше.

Прошу прощения, немного не понял, почему "тычет", "принижает" и т.п. ??? Я вот не знаю что такое AXI и AHB. Но задание счел реально вполне практичным и интересным. Из двух источников, не синхронно, приходят данные. Между ними попарно делается какая-то операция, и результат так же не синхронно забирает приёмник. Тут например сразу виден подсчёт входных/выходных данных, выходной FIFO-буфер и согласующие сигналы готовности. Типичная задача на буферное устройство между двумя шинами. Мне кажется такие задачи надо уметь решать в обязательном порядке, ВНЕ ЗАВИСИМОСТИ от того знаешь ты или нет соответствующие шины и протоколы. Я бы не взял на работу кандидата, не сумевшего с этим справиться.

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

Есть блочная синхронная RAM (в том же чипе от Xilinx хотя бы). Требуется на её основе спроектировать стек. Стек должен выполнять три операции:

PUSH - поместить в стек

POP - вытолкнуть из стека

NOP - пустая команда.

В начальное состояние стек устанавливается сигналом сброса. Сигналы опустошения и переполнения стека можно не реализовывать и эти ситуации не отслеживать. НО. Все три операции в любых сочетаниях должны выполняться ЗА ОДИН ТАКТ.

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

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

Безусловно и это тоже. Но я не это имел в виду. Если после PUSH сразу же, в следующем такте приходит POP, наивная схема на блочной памяти и регистрах даст сбой. Вот мне и интересно, что придумает человек, чтобы обойти эти грабли. Это несложно, но надо все-таки немного подумать.

P.S. Одновременно туда команды не приходят. Каждая команда выполняется за отдельный такт. Либо поместить в стек, либо вытолкнуть из стека, либо ничего не делать.

P.P.S. Реальный стек из реального проекта выполняет значительно больше команд. Причем две из них за два такта (генерируя такт ожидания для остальной схемы). Но тонкое место, требующее сообразительности только это.

Безусловно и это тоже. Но я не это имел в виду. Если после PUSH сразу же, в следующем такте приходит POP, наивная схема на блочной памяти и регистрах даст сбой.

Э-э-э, а почему?

Не знаю... Наверно такова объективная реальность :))))

Напишите наивную реализацию. Запустите на симуляторе. И убедитесь сами. Ваша задача ПОНЯТЬ почему, и как с этим бороться.

И торопитесь. В ближайшее время я опубликую здесь проект, где эти грабли выплыли. Ну а после публикации разобраться с этим будет уже немного не спортивно :)))

Это вроде стандартно в памятях -- байпасс.

Не так всё просто. Советую то же что предыдущему оратору. Напишите наивную реализацию с tos на регистре. Вы описали её совершенно правильно, так что для Вас это будет нетрудно. Запустите на симуляторе. Командами PUSH затолкните в стек несколько чисел. Потом сразу, без перерыва(NOP), дайте команду POP. И увидите что произойдёт.

https://pastebin.com/MqXQ7EUX

И что тут нетривиального, спрашивается? Ну да, некоторое жонглирование с адресами чтения, да и всё.

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

Ну хоть кто-то адекватно высказался о нерешенных задачах на интервью.

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

А насчет унизительного, я вот эту задачу в поставленных условиях решить прям сходу сейчас не смогу

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

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

Не знаю, как вам это удалось, но вы не распознали сарказм в моём ответе )

Ну с одной стороны я всё-таки не сетка AlphaGo :))))

А с другой и правда считаю, что не стоит человеку задавать вопросы, на которые он может не знать ответов. Типа что делает конструкция А в дальнем пыльном углу языка B, которым я согласно резюме профессионально владею. Откуда мне знать, что она делает если я никогда ей не пользовался ! Я вот например не употребляю на С конструкцию ? a : b. Мне if кажется нагляднее и понятнее. А на верилоге аналогичную конструкцию применяю повсеместно, там она полезна для присваивания на шину. Задавать вопросы надо надо на знание базовых принципов и умение ими пользоваться. И вообще по-моему одна тестовая задачка от дня до недели, лучше тысячи вопросов на собеседовании.

А с другой и правда считаю, что не стоит человеку задавать вопросы, на которые он может не знать ответов

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

э-э-э… мне видится явное противоречие между этими двумя утверждениями.

В чем же ??? Если я профессионально владею С, я обязан знать что такое указатель. Но не обязан знать о какой-то особенности класса string из stl.

Если я профессионально владею С, я обязан знать что такое указатель

но это же не гарантирует, что кандидат, декларирующий владение си, обязательно знает что такое указатель )


Но не обязан знать о какой-то особенности класса string из stl.

не вижу проблем если спрашивают о чём-то, знание чего опционально. как иначе получить представление об уровне кандидата?

Жестко))

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

Имя Маска по-русски пишется как "Илон".

Слово "репозиторий" - мужского рода.

да и «корявостей» много, хотя бы заголовок глаз режет.

на собеседовании прокатывает?

Задачка, которой@YuriPanchul мучает студентов на собеседованиях, выглядит странно. Постоянно оказывается, что студенты (из тех, что формально верно её решили) не учли какие-то подразумеваемые требования и поэтому их решение плохое. Не знаю, как обстояли дела на реальных собеседованиях, но исходя из написанного выглядит так, что надо было предлагающего такую задачу заваливать дополнительными вопросами.

Либо уточняешь, либо делаешь под worst case scenario из разумно допустимых.

«Тут нам в условиях не сказали» прокатывает в школе, не в выпуске крупного вуза.

Вы точно внимательно читали статью? Там написано: "Когда я вижу у недавнего выпускника в резюме какой-то из протоколов в котором используется valid/ready, например AXI или AHB "
Опыт работы с протоколами AXI и AHB ПОДРАЗУМЕВАЕТ, что человек решит эту задачу без ошибок часа за 2-3. Если не может, потенциальный сотрудник наверняка соврал в CV.

А вы работу давно искали? Я вот недавно искал, и у меня такой вот диалог состоялся:


HR> скажите, есть ли у вас опыт коммерческой разработки на .NET 6 и EF Core 6?
Я> именно с указанными платформой и библиотекой у меня опыта работы нет, но я работал с .NET Core 3.1 и EF…
HR> вы нам не подходите


Это я к тому, что из-за таких вот работодателей врать в CV давно стало нормой.


И да, какой вообще опыт работы с протоколами ожидается от выпускника?

Я бы ответил: вы еще не перешли на .NET 7? Жалкое зрелище.

Я вот уже перешел.

Это было до выхода .NET 7.

Да, наверное вы правы. На практики бывают случаи из-за которых стало нормальным врать в резюме. Но конкретно в данном случае, человека попросили сложить два числа "по нормальному".

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

Врать не хорошо. Иногда это приходится делать. Но уж базовые-то вещи, если написали что знаете -- надо отвечать.

Знаете, если бы я хотел завалить, я бы попросил сделать то же самое, но не для операции комбинационного сложения, а для абстрактного конвейерного арифметического блока с латентностью N. Но это было бы нечестно по отношению к недавним студентам, ибо для хорошей реализации тогда нужно было бы использовать вот такую конструкцию ниже с credit-based flow control, а у них в учебнике (в стенфордском книжном лежит Digital Design: A Systems Approach by William James Dally и R. Curtis Harting) ее нет. (Хотя упоминание credit-based control flow есть в курсе по процессорам в Принстоне от David Wentzlaff).

Но эту конструкцию знают все кто работал в компаниях типа Apple и NVidia, поэтому именно это стоит спрашивать у людей с опытом > 5 лет.

Но эту конструкцию знают все кто работал в компаниях типа Apple и NVidia, поэтому именно это стоит спрашивать у людей с опытом > 5 лет.

К слову, некий канадский FPGA-шник, Charles Eric LaForest, создал справочник, собрав в одном месте много подобных конструкций.

О ! Ценно ! Забил в закладки, чтобы каждый раз не изобретать велосипеды. Спасибо !

Жаль пустых тем ещё много. Ладно, надеюсь мужик не бросит эту деятельность и постепенно будет наполнять ресурс.

Мой коллега еще https://opencores.org/ посоветовал.

Юрий, видя какой тут поднялся срач, мне кажется Вам стоило бы дать точную формулировку задачи. Я её сейчас понимаю так:

module adder
(
  input clk,         //клок
  input rst,         //сброс
  input[31:0] din,   //слагаемые, поступающие парами друг за другом
  input wr,          //запись слагаемого от передатчика
  output[32:0] dout, //выходные данные
  output rdy,        //выход готовности суммы
  input rd           //сигнал чтения суммы приемником
);

Нужно принимать данные по сигналу wr, попарно складывать их, буферизовать, и выдавать приемнику сигнал что сумма готова. Я прав ??? Если нет, поправьте пожалуйста.

У вас тоже неплохая задача, но я давал другое. Вот:

module stream_adder
# (
  parameter w = 4
)
(
  input            clk,
  input            rst,

  input            a_vld,
  output           a_rdy,
  input  [w - 1:0] a,

  input            b_vld,
  output           b_rdy,
  input  [w - 1:0] b,

  output           sum_vld,
  input            sum_rdy,
  output [w - 1:0] sum,
  output           sum_signed_overflow
);

Ну как бы разница не особо большая, в основном сводящаяся к тому, что данные поступают по двум шинам. Ну и шина у Вас более симметричная и "двунаправленная".

Как я понял, передатчики A и B выставляют сигналы a_vld и b_vld, когда их данные валидны. Это аналоги моего сигнала wr. Сумматор сигналами a_rdy и b_rdy говорит передатчикам что готов принять их данные. Этого у меня нет, почему и говорю что Ваша шина более симметрична и "двунаправленна". На выход устройства поступает сумма плюс сигнал переполнения. Устройство говорит приёмнику что сумма готова сигналом sum_vld (мой аналог rdy). Приемник говорит о готовности принять сумму сигналом sum_rdy (у меня аналога нет), и о том что принял данные переходом sum_rdy из активного состояния в пассивное (мой аналог rd).

Да, это наверно лучшее решение чем у меня, хотя чисто эстетически не очень нравятся названия сигналов. Что такое AXI и AHB я не знаю. Точнее слыхал, но было не особо надо разбираться. Надо будет глянуть. Но вообще-то сильно удивительно, что есть выпускники соответствующей специализации, которые на этом сыпятся. Это база...

Все, что необходимо и достаточно знать о valid/ready (это более общая концепция чем AXI) я описал в посте на сходную тему https://habr.com/ru/post/693568/

Но еще более общая концепция - это send/credit_return то бишь credit-based интерфейсы - они у меня тоже разобраны в одном из предыдущих постов в комментах.

Спасибо ! Надо будет погуглить, чтобы не изобретать велосипеды.

Глянул ссылку. Спасибо, ценная статья ! Блин, как я её умудрился зевнуть - ума не приложу... Хабр он такой... Его либо читать от корки до корки, и тогда ни на что другое времени не останется. Либо потом с досадой обнаруживаешь, что пропустил что-то важное и интересное...

И вот ветка в другом посте про credit-based flow control - это более гибкая замена valid/ready интерфейсам, которую многие компании применяют как универсальный молоток https://habr.com/ru/post/673916/#comment_24490696

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

Да, такая нужда совсем созрела. Меня только вчера спрашивал "не издать ли такую книгу" преподаватель МГУ, а до этого - ВШЭ МИЭМ.

Как ни странно, но оба решения и разница между ними оказались понятны даже каджиту, который 20 лет назад читал устаревшие уже тогда справочники по рассыпной логике и что-то издательства "Питер" о до-пентиумных процессорах…

В AXI ready может ждать valid (то есть ready может как бы подтвердить valid-ные данные). А вот valid от ready зависить не должен. Тогда и Ваша задачка "по идее" должна решаться достаточно просто:

Ну вот, разрушили интригу до того, как просмотры перевалили за 100,000 :-)

Хотя раз так, то дополнительный вопрос: а что если сумматор стоит на критическом пути и мы всё-таки хотим облегчить тайминг?

Если без FIFO, то как вариант самодвижушийся конвейер с critical path по ready. Эта схема должна работать:

А то же самое, но с разрывом critical path на ready_sum -> ready_a/b ? :-) Типа чтобы работало если таких блоков сто друг за другом поставить ?

Ну ладно, про skid buffer вы как-нибудь догадаетесь. Годен! :-)

:-) я правда не до конца понимаю больших преимуществ skid-buffer перед "синхронным FIFO глубиной два". Иными словами я не могу себе представить случая где нельзя было бы обойтись FIFO и нужен был бы skid-buffer. Конечно иметь skid-buffer в арсенале разработчика полезно - просто не понимаю почему skid-buffer "уделяется столько почестей".

Просто я про skid-buffer слышу чуть ли не от каждого "первого встречного" при этом многие люди не знают как сделать синхронную FIFO с нуля что на мой взгляд приоритет номер один для любого разработчика. Это скорее некий социальный феномен который я наблюдаю ну или мне просто так показалось.

Тут еще может быть и разница в толковании терминов. Я пологал что skid-buffer это "половина от FIFO глубиной два". То есть если ready всегда в единице то skid-buffer позволяет valid/data идти напрямую. FIFO вносит латентность по valid/data в любом случае. Просто данная латентность уже как правило заложена в конвейере в виде регистров. Так что если поставить FIFO и компенсировать излишнюю латентность конвейера удалением ступенией из конвейера то как Вы и сказали - Skid buffer и FIFO глубиной два эквивалентны. Просто лично для меня Skid buffer это еще одна дополнительная концепция для запоминания. FIFO же прост, универсален и этим прекрасен. Один раз поняв как генерируется логика для FULL (aka ~ready) и EMPTY (aka ~valid) не обязательно запоминать тонкости его дезайна. Можно проснуться в три часа ночи и за 3 минуты нарисовать любой FIFO (как с read enable так и AXI compatible first word fall through) и на любую глубину. Со skid-buffer там уже придется гуглить :-) Ну это лично мое имхо.

Я согласен, что более универсальная конструкция, на которой строятся сейчас блоки - это комбинация из конвейеров, FIFO и счетчиков. Про skid-buffer я услышал в 2000-м году от контрактора, который называл его pipeline stomach и говорил что строит все конвейеры таким образом. Потом концепция просочилась например в учебник от William Dally и Curtis Harting в 2012 году, но до credit-based flow control учебник так и не дошел, хотя он применялся тоже где-то с 2000 года как минимум.

Немного философии: Концепция skid-buffer поощеряет использование конструкции if (ready) внутри каждого always блока. Здесь возможно нужен подход подобный тому который когда-то предпринял Никлаус Вирт сказав что goto в языке программирования высокого уровня - вреден. Возможно и тут нужно так же, дать FIFO и запретить использование сигнала ready на write интерфейсе, тогда все на кредиты перейдут мгновенно. :-)

'skid-buffer' aka 'fifo глубиной 2' бывает полезно, если большой кусок конвеера имеет единственный enable на все свои регистры и таких кусков -- несколько. Если такой enable распространяется от приёмника к источнику и каждый раз при переходе на следующий (более близкий к источнику) кусок задерживается на 1 такт на регистре -- то для данных между кусками необходим тот 'skid buffer'

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

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

Но эту конструкцию знают все кто работал в компаниях типа Apple и NVidia, поэтому именно это стоит спрашивать у людей с опытом > 5 лет.

Простите, а что в ней такого что > 5 лет ??? Какая разница, сложение у нас или блок с латентностью N ! Все равно есть подсчёт входных данных, подсчет выходных данных и управляющие сигналы записи в блок, чтения из блока приемником, и готовности данных для приёмника. Совершенно справедливо на выходе изображен FIFO-буфер. Обыкновенная задача шинного сопряжения. Я что, могу претендовать на сеньора ???

*** Какая разница, сложение у нас или блок с латентностью N ! ***

(Тут есть одна подсказка о разнице, которую я пока не буду приводить)

*** Совершенно справедливо на выходе изображен FIFO-буфер.  ***

Не только. Тут есть еще и конвейер, данные в полете в котором нужно подсчитывать, и всегда посылать не более, чем может в конечном итоге принять FIFO на выходе, если вдруг произойдет останов. Но и не застревать, пока (количество данных в конвейере + количество данных в FIFO) не станет равным размеру FIFO .

*** Простите, а что в ней такого что > 5 лет ??? ***

Ну скажем там: если за 5 лет инженер не сможет это так или иначе понять, то ему дорога только в маркетинг:

Ну конвейер это совсем просто. Особенно если он постоянной длинны. Если переменной, зависимой от входных данных, то немного (а возможно много !) труднее, но тоже не бином Ньютона. Впрочем Вы правы конечно. Чтобы в этих вопросах не плавать, надо делать что-то своё. Либо присоединяться к команде, которая что-то делает. Сейчас собираюсь через некоторое время опубликовать здесь на хабре один свой проект. В исходном виде делать это не имею права по NDA c бывшим работодателем. К тому же кое-чем там сейчас сильно недоволен. Так что приходится довольно серьезно переделывать. Это будет упрощенная и сильно улучшенная версия процессора, который уже вполне реально работает во вполне коммерческом проекте. С аппаратным отладчиком и средой разработки на ассемблере (может сделаю ещё компилятор С). Цель проекта - получить очень высокую плотность кода, при достаточно развитой системе команд. Чтобы серьёзные программы можно было запускать чисто на внутренних ресурсах FPGA, без подключения внешней памяти. Все эти игры с Risc-V на FPGA, извините, но кажутся мне немножечко учебными. А это штука совершенно практичная и утилитарная. Тоже хотелось бы чтобы кто-то заинтересовался...

Ну это круто, киньте ссылку потом

Разумеется ! Всегда о Вас тут помню :))))

Писать буду в этом же хабе про FPGA. Так что надеюсь достаточно скоро сможем пообщаться на эту тему.

Я никак не FPGA инженер, но мне интересно. В картинках из книги вижу элементы, каждых из которых выглядит так как ожидаю - по стандартам. Смотрю на ваши картинки, там то мочалки где-то, то and gater тоже в виде какой-то другой формы, но тоже на мочалку похожей показан но не как в стандарте описано. У меня вопрос - это так нормально, не использовать стандартные схемы и формы для описания, а рисовать, как захочется?

Облачко для блока логики неясного содержания вполне себе стандарт в индустрии.

Те. AND gater- это логика неясного содержания? А что тогда - ясного?

Я просто рисовал картинку в Lucidspark, там значков для гейтов нет, пришлось мочалкой, как combinational cloud. Но вы правы, например для публикуемых учебных материалов это нужно будет перерисовать.

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

Приведу пример: есть один большой FPGA вендор с синим логотипом, (не буду называть имя вслух) который выпускает очень продвинутые FPGA с технологией "регистры повсюду" - это множество "простых" флопов на фабрике FPGA для оптимизации тайминга. Эти флопы в отличие от регистров в ALM не имеют сигналов reset и clock enable. Казалось бы - идеальное место для предлагаемых Вами конвейеров с кредитными счетчиками.

Тем не менее в официальном гайде для разработчиков приводится вот такая картинка увидев которую сразу становится "очень понятно" как дезайнить конвейеры без backpressure что бы в них использовались флопы с фабрики без clock enable. Вот картинка:

Мало того что решение мягко говоря уступает по удобности использования конвейерам с кредитами так еще и документация подразумевает что каждый прохожий сразу догадается что "Please try to slow down soon" это almost full от FIFO что в инверсии даст ready который можно "притянуть" на вход конвейера. Вот это как пример того что для людей не работающих в Apple и NVidia и не обсуждающих данные детали с коллегами на кофе брейках а просто читающих открытые источники тонкости и трюки хардварного дезайна можно сказать недоступны.

Да, это решение с "almost full" которое уступает кредитным счётчикам, так как не учитывает текущее количество транзакций в полете в конвейере.

Видимо подразумевается что разница между almost full и full это количество стадий в конвейере. То есть при изменении длины конвейера предлагается переделывать FIFO - издевательство одним словом. С кредитами о таком вообще думать не нужно.

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

Да, в решении с almost_full - FIFO прийдется делать глубже чем надо, иначе конвейер будет часто простаивать. То есть если в нем 10 стадий и FIFO глубиной 11, то в конвейер нельзя будет запускать даже одну транзакцию, если FIFO не пустое. Так как решение не знает, сколько транзакций сейчас летит в конвейере - там уже может быть 10.

А вот с кредитными счётчиками - никаких проблем, можно минимизировать размер FIFO под пропускную способность и даже если ошибиться с размером, то конструкция будет в худшем случае тормозить, но не переполняться.

Но и такое решение имеет право на жизнь: в ПЛИС FIFO на 1 шт. блочной памяти будет иметь зачастую больший, чем нужно размер. Или если FIFO двухклоковое, то напрямую кредит как в Вашем рисунке https://habr.com/ru/post/706484/#comment_25030966 не проведешь. Или бывает нужно пропустить кредитный сигнал через регистр для лучший разводимости, тогда в FIFO надо закладывать запас для максимальной пропускной способности.
Я у себя для таких потоковых задач (в том числе и с мультиплексорами и демультиплексорами), и для мультиплексоров использую а-ля almost_full сигнал: из FIFO вывожу количество свободных мест, из него вычитаю количество регистров на пути данных от источника до FIFO, так и на пути этого управляющего сигнала от FIFO до источника, и если величина положительна, то можно слать. Тогда всё вычисление кредита локализовано у FIFO (а не находится в двух местах, где надо одновременно менять размер FIFO), а источник по сигналу посылает данные.
В общем, специалист должен знать многие варианты и понимать когда что лучше использовать.

Двухклоковое FIFO это для clock domain crossing (там специальный FIFO с Gray counters). Тут все работает в одном клоковом домене.

Если Вы хотите использовать almost full то разница между full и almost full должна быть меньше или равна длине конвейера. То есть FIFO говорит что хватит слать так как я почти заполнен предполагая худший вариант что на пути к FIFO в конвейере уже находятся еще несколько транзакций по приходу которых в FIFO не останется свободного места.

В схеме с кредитами мы не заморачиваемся длинной конвейера вообще, а просто выставляем кредитный счетчик в максимальный размер FIFO в самом начале. Если транзакция вошла в конвейер то счечик уменшается (credit -1). Если транзакция покинула FIFO то идет возврат кредита в счетчик (credit +1). Ну и конечно еще одно преимущество что FIFO не нужно генерировать сигнал almost_full а только (ready (что есть notFull) который кстати не используется внутри конвейера!!!) и valid (что есть notEMPTY). Ready для upstream блока генерится если счетчик не равен 0.

То есть в схеме с кредитми мы можем варьировать количество ступеней в конвейере как хотим - ничего нигде менять в схеме не нужно. В схеме с almost_full если мы меняем число ступеней в конвейере соответственно меняем порог almost full на FIFO - неудобно.

По поводу обратного сигнала: если обратный сигнал кредита (credit +1) идет обратно через регистр(ы) то ничего страшного не произойдет если переход кредитного счетчика в более благоприятное состояние произойдет позже, место ведь в FIFO уже освободилось.

В схеме с almost_full вычисление кредита и генерация ready на upstream локализовано у FIFO. В схеме с кредитным счетчиком вычисление и генерация ready на upstream локализовано на кредитном счетчике. Почему Вы решили что оно находится в двух местах?

Всё так, можно было не расписывать ;).

Мне нужны были и кредиты, и переход между клоками. Делать две FIFO в ПЛИС, где блоков памяти мало, не целесообразно. Поэтому и делал всё на одной FIFO. И т.к. FIFO большая, то экономить ячейки не стоит.

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

Наверное не очень аккуратно выразился. С двух местах надо указывать размер FIFO: в самом FIFO, и в счетчике. Можно ошибиться ;). Как можно ошибиться с количеством шагов конвейера (тогда схема с подсчетом кредитов в FIFO сломается).

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

*** Или если FIFO двухклоковое, то напрямую кредит как в Вашем рисунке https://habr.com/ru/post/706484/#comment_25030966 не проведешь ***

"Как возвращать кредиты из двухклокового FIFO" - это вопрос на интервью в Apple. У него есть очень элегантное, прямо буддистское решение.

А какое решение Apple предполагает?

При низкой интенсивности можно вместо уровнем '1' кодировать сменой '0'->'1' или '1'->'0'.

Если интенсивность высокая то, то можно завести счетчик выбранных из FIFO пакетов (в кодировке Грея) и чего инкрементировать. А на приемной конце завести счетчик посланных в FIFO пакетов и кредит - их разность. Только в этом случае обратно не один провод, а шина. В каком-то смысле это и есть адреса в FIFO. Примерно так я и делаю, когда надо через PCIe кредитный трафик гнать.

Вариант 1: кредиты накапливать в счётчике и возвращать то, сколько он накопил методом стробирования (источник выставляет данные и фронт на сигнале, приёмник пересинхронизирует данные и отвечает фронтом на своём сигнале, который источник пересинхронизирует для того, чтобы понять, что приёмник всё принял). Недостаток -- слишком много тактов тратится на 1 посылку.

Вариант 2: Как@YuriPanchulуже сказал, непосредственно гонять счётчик пропихнутых в приёмник данных и через кодирование Грея пересылать его к началу конвеера. Можно взять счётчик прям от того 2-клокового фифо в конце конвеера.

*** Или если FIFO двухклоковое, то напрямую кредит как в Вашем рисунке https://habr.com/ru/post/706484/#comment_25030966 не проведешь ***

"Как возвращать кредиты из двухклокового FIFO" - это вопрос на интервью в Apple. У него есть очень элегантное, прямо буддистское решение.

UPD: так как не факт, что кто-нибудь догадается, сообщаю: кредиты можно возвращать через другое FIFO, шириной 0 (и глубиной как первое FIFO). "FIFO шириной 0" - это прямо как "хлопок одной ладонью".

Красиво! Но какой-то overkill как "выльем воду из чайника и сведем задачу к предыдущей". FIFO с данными уже имеет внутри себя всю необходимую информацию. Надо только ее достать, что, к сожалению, готовые FIFO не позволяют. Как и многое другое (например, если FIFO стоит перед линией передачи где бывают ошибки, то для переповторов удобно использовать это же FIFO, но тогда нужны 3 счетчика).

P.S. Мой вариант с счетчиком - это по сути и есть FIFO ширины 0, только реализованная руками.

Да, пример с броадкастом стоит внести и в интервью, и в семинары, спасибо

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

Умение задавать вопросы, собирать информацию — один из ключевых навыков, проверяемых на собеседованиях. Касается и алгоритмических задач, и задач по проектированию.

Я могу точно такую же статью написать и про математиков, и про программистов. Все то же самое. Чтобы получить максимум от университета, студенту надо сначала поиграться со всеми технологиями самому (хочешь понять линейную алгебру - сделай 3d-игру, для статистики - поанализируй хотя бы a/b тесты, а лучше ML-модель сделай и поковыряйся с tensordash, хочешь понять сетевые технологии - придумай свой протокол, хочешь понять теорию вычислений - напиши свой компилятор и т.д.). А вот потом на "подготовленную поверхность", на выработанные интуиции теория ляжет, как родная. Тогда получится настоящий учёный или инженер.

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

мне кажется это усиливается особенностью мышления некоторых людей, которая идёт ещё со школы: целью обучения воспринимается не обучение, а получение оценки.
в результате даже такие сугубо практические предметы, как иностранный язык воспринимаются как никак не связанные с реальной жизнью и получается парадоксальная ситуация: и курс вроде бы не такой плохой, и оценка хорошая; но человек как-то не может прокинуть мостик между предметом «иностранный язык» и общением на иностранном языке.

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

Присоединяюсь.
И добавлю, что (на мой взгляд) значительная причина отсутствия практики в том, что в ВУЗах мало исследовательских работ для промышленности (уж какая есть).
даже в советские достаточно «жирные» времена НИР от промышленности и военных были, но их все равно было мало по сравнению с численностью студентов. Т.е. профессора-доценты работали, а вот для студентов (а вспомогательной работы все равно бывает достатчно) «мест» было мало. А сейчас практически нет. Я, конечно, беру основную часть ВУЗов, без учета топовых — там кафедры яндекса/параллелса/и т.п. дают работу.

> хочешь понять сетевые технологии - придумай свой протокол

серьезно? а чтобы научиться брать интегралы, что требуется?

:)

Так интеграл это площадь фигуры ограниченной снизу координатной осью, справа и слева пределами(если они есть) и функцией сверху. Разве нет?

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

А если у вас разрыв посредине? А если интеграл на комплексах? И их сотни типов. От Дарбу до Римана.

> И их сотни типов

чуть меньше таки, хотя достаточно, но не в этом дело, ув. Александр вероятно кое-что смыслит в математике, поэтому типа предлагалось ему немного подумать какая польза бывает от " придумай свой протокол", imho примерно такая как от "придумай свой интеграл", потому как протокол не более чем инструмент, акцент на функциональности, а не на изобретении еще одного велосипеда

Алгоритм Риша. Правда его ещё никто полностью в коде не написал.

FPGA инженер с опытом мою задачку про A+B решит.

Ой не факт… Исходя из сложности, чувствуя подвох, будет задаваться вопросами типа: «а в какие ресурсы нужно уместиться», «а на какой частоте схема работать должна», «а какой дизайн в кристалле должен быть». Инженер с опытом в первую очередь будет ТЗ требовать ))) А в конечном счёте, на всякий случай, напишет код, в котором добавление in/out регистров будет параметрическим ибо для облегчения разводки они всяко желательнее, но при условии здоровенных разрядностей выходных/выходных шин, ресурсов это скушает.

Как я понял, должно работать на icarus verilog + gtkwave. Это задача не на проектирование чего-то там, а на понимание базовых принципов.

То числа складываются не попарно, а просто записываются в регистры и на
выход идет их текущая сумма, хотя количество аргументов A и B не
совпадает. То не отрабатывается backpressure и результаты теряются, то
(после того как кандидат написал страницу кода на верилоге) блок
работает на половинной производительности, то есть не может принимать
поток чисел подряд, а ожидает между ними пропуски (gaps). Короче ведет
себя как ChatGPT.

Юрий, Вы если причитаете, то не плохо бы сразу показать как делать надо, и как не надо. Короче, не вижу от Вас разжеванных примеров на Verilog-е в данной статье. За одно прошу раскрыть тему сумматоров на примере префиксного. Спасибо.

На самом деле это задачка не на тип сумматора (prefix, carry-lookahead итд) а на flow control (см. вариант для не-джунов https://habr.com/ru/post/706484/comments/#comment_25030966 ). Я собираюсь ее разжевать на каком-нибудь будущем семинаре вероятно весной.

Измерить производительность ядра YRV на бенчмарках Dhrystone и CoreMark,

Я запустил Ваше ядро на симуляторе. Оно очень простенькое. Вроде даже умножения нет - у меня вылетает умножение по неизвестной команде. При выборе RV32I и оптимизации О2

Coremark на одной итерации использовал 1 486 325 тактов. Как-то маловато будет :) Может я чего не включил?

О, это хорошо. Ядро это не мое, оно от Монте и я его производительность не мерял пока. Multiplication обрабатывается программно, да. Добавление multiplication планировалось как упражнение для студентов. А как у вас тогда весь CoreMark проходит - там же есть умножение? С какими числами у каких других ядер вы сравнивали? Вы можете внести все эти измерения вместе с testbench в fork-нутую репозиторию и выложить ссылку здесь или прислать мне на yuri@panchul.com ? Это важное исследование. Если ядро слишком низкопроизводительное из-за stalls или недоимплементированного forwarding-а, то для учебных семинаров можно рассмотреть другое.

То бишь 0.7 CoreMark / MHz? Да, это слишком мало, надо исследовать что там так тормозит.

У этого ядра конвейер вроде 6 стадий. Например, какой-то примитивный vscale имеет 3 стадии. На этом же коде у него 1.04 cm/mhz против 0.67. Еще одно ядро (9 стадий конвейер) Если отключить. предсказатель, fusion, суперскалярные фичи, то на этом же коде 0.69 (если включить - 3.3). Так что база вроде нормальна :)

Прекрасно, спасибо. Ну с 3-стадийным понятно - у 6-стадийного бОльшая проблема с ветвлением в отсутствие предсказателя перехода. Вообще по хорошему стоит сделать общий сравнительный фреймворк с несколькими открытыми ядрами и демонстрировать студентам что на каждом из них происходит при переходах, зависимостях итд. И дать студентам задание повысить производительность.

Кстати (делаю себе заметку на потом) надо будет померять максимальную тактовую частоту у YRS и vscalе на Open Lane. Если у YRS будет выше, можно использовать как иллюстрацию "3 станции с низкой частотой - против 6 стадий с высокой частотой". Если нет, обсудить с Монте что в дизайне не так.

Поправка к комменту выше - вместо YRS читать YRV (я иногда называю YRV-Plus - YRS)

Еще интересное ядро picorv32.Очень интересный код. Можно посмотреть во времянке какие команды исполняются и даже названия команд в ascii коде. У него 0.97  cm/mhz на этом же коде. Правда, дизайн этого ядра использует х3 клок, т.е. счетчик команд изменяется каждые 3 такта. Параметр приведен с учетом деления на 3 того, что показывает счетчик циклов.

Ещё есть опенсорсный C906 от китайской T-HEAD, на гитхабе лежит. Из преимуществ -- полноценный проц с MMU и кешами (работает linux), есть реализации в железе (например allwinner D1 и борды на нём: nezha, mango pi), из недостатков -- дока на китайском. Но гуглтранслейт вроде как-то справляется.

Результат на DE0-CV, RV32IC: 71 Iterations/sec. Это 1.42 CM/Mhz . Вполне нормальный результат для такого процессора, с учетом того, что умножение сделано на сжатых инструкциях, кроме одной команды. Хотя довольно глупо сравнивать RV32IC и RV32IM - это разные процессоры.

Исходники: https://github.com/DmitryZlobec/yrv-plus/tree/main/Plus/programs/coremark_new_math_gcc_compressed

Ha-ha, hold my beer (c). Выпускник росс.топ.тех вуза, впервые узнал, что в excel "сзади за картинкой" есть "Формулы". Никогда бы не поверил, если бы не присутствовал при сцене сам. Оказалось, что чел.просто никогда не видел офтсных программ типа эл.таблиц.

Сравнивать Excel и то на чем пишут процессоры (в том числе Intel) это как сравнить микроскоп и атомный коллайдер.

Плохая аналогия, т.к. и в микроскопе и в коллайдере применяется то, что называют 'оптикой' -- в микроскопе для света из стекла сделанная, в коллайдере для заряженных частиц и 'сделанная' из магнитных и электрических полей.

А если он не пользовал эксель - что в этом удивительного?
Эксель мощный инструмент, но во-первых, у него действительно не самый удачный и перегруженный интерфейс, а во-вторых, сейчас зачастую запихнуть CSV в питон, чем искать по экселю, как делается та или иная задача в Экселе

Тут в другом дело - excel и электронные таблицы, это своего рода "стандарт". Так же как "ворд". Можно без них обойтись - конечно! Не знать, как они работаю - странно (особенно, для вчерашнего студента).

Слышал похожую историю. Нам в своё время на первых курсах (2000-2002) явно запрещали пользоваться Excel-ем - мол, сначала научитесь руками всё просчитывать, а до Excel всегда успеете добраться. Ну, как-то так оно и вышло: добрались, пользовались вовсю.

Через некоторое время услышал обратную историю. Студентов заставляют пользоваться Excel-ем. Чтобы они хоть как-то получили навык обработки даже не большого - средненького объёма данных.

Качаешь arm открытое ядро для Vivado и всё.

>> нужно спортировать YRV на плату Tang Primer 20K c китайским GoWwin FPGA
Vivado кончилось, говин брать будете?

А как то книжку Монте можно получить в электронном виде (возможно даже бесплатно)? А то теперь и не купить ничего, нужны какие то извороты и пр.

Написал в приват

Ужасно уважаю настоящих инженеров, так что не подумайте плохого. Однако ж, проверяйте источники. Знаете, откуда фраза про "пусть расцветают сто цветов"? А знаете, чем это расцветание кончилось?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории