Обнаружил интересный баг американской системы образования:
У многих студентов в резюме стоит "делал курсовой проект по алгоритму Томасуло, out-of-order суперскаляру, многопоточному процессору итд".
На это я спрашиваю: "Прекрасно, давайте возьмем два процессорных ядра - одно со статическим конвейером, а у другого с динамическим, как в вашем курсовике. Насколько ваш процессор будет производительнее?"
На это они отвечают "процессор будет производительнее, потому что" - и начинают ковыряться в деталях зависимостей между инструкциями.
На это я машу руками и говорю "стоп-стоп-стоп. Я не просил вас объяснить мне что такое RaW (read-after-write), WaR и WaW зависимости. Я вообще не спрашивал у вас "почему?" Я спросил у вас "сколько?" Я просил вас грубо оценить пользу от вашей разработки.
Вот вы вместе с другими студентами, под руководством профессора проектировали процессор, делали довольно сложную, продвинутую оптимизацию. Теперь возьмем написанный вами верилог, запустим его в симуляторе и пропустим через него бенчмарку, скажем Dhrystone или CoreMark. Допустим у процессора со статическим конвейером сколько-то итераций бенчмарки прошли за сто тысяч тактов. За сколько тактов пройдет эта же бенчмарка на вашем процессоре - за сто тактов или за миллион? Или за что-то посередине? Сколько вы покупаете вашей оптимизацией - 1%, 10%, 100%? Какой ценой в размере логики? Может такты изменятся мало, но повысится максимальная тактовая частота? На сколько?"
И представляете, что они мне отвечают? "Мы не запускали бенчмарки".
Бенчмарки у них в учебниках есть - это я не думаю, а знаю, так как все их учебники стоят у меня на полке. Это выглядит для меня чисто как плохая работа преподавателей: преподаватели должны:
-
Давать обзорную картину с высоты птичьего полета сколько покупают различные оптимизации и какой ценой.
-
Подкреплять это знание измерением бенчмарков и статического анализа тайминга во время курсовых проектов. Также - если у университета есть доступ к Synopsys PTPX или Cadence Joules, то измерять динамическое энергопотребление. Но если нет - мерять такты и STA можно бесплатными тулами - Icarus Verilog и Open Lane.
Впрочем, в России и Украине проблем больше, чем у американских вузов: мне говорили несколько лет назад, что в МФТИ вообще обучали конвейерным процессорам с помощью cycle-accurate модели на C++, при этом без измерения статического анализа тайминга для разных вариантов микроархитектуры. Ну это как учить электричеству без магнетизма. Хотя с тех пор прошло время, и я надеюсь, что они это исправили.
Автор: Юрий Панчул / Yuri Panchul