Аннотация
Архитектура процессоров RISC-V — пожалуй, наиболее стройная и понятная из всех актуальных архитектур вычислительных систем.
Цель данного курса: сформировать у слушателей систематическое представление об архитектуре современных ЭВМ и заложить базис для практического низкоуровневого программирования.
Требования к уровню знаний слушателей: дискретная математика в объёме вводных семестров бакалавриата профильных специальностей.
На примере современной компактной микропроцессорной архитектуры в курсе показана связь между конкретной организацией процессора и общими принципами построения вычислительных систем, даются основы программирования на ассемблере RISC-V, прививаются практические навыки низкоуровневого программирования и грамотного использования архитектурных особенностей современных ЭВМ.
Курс организован в комбинированном формате, сочетающем аудиторное чтение лекций, публикацию лекций и материалов к ним для онлайн-доступа и самостоятельную работу студентов в форме выполнения домашних заданий.
Лекции рассчитаны на трансляцию экрана лекционного компьютера. Базовым визуальным материалом при чтении лекции является соответствующий раздел план-конспекта и справочный материал (демонстрируются в браузере), а также окно инструмента разработки, котором во время лекции формируются, отлаживаются и запускаются примеры учебных программ.
В лекционной части рассматриваются базовые понятия архитектуры ЭВМ на примере спецификации RISC-V. Предоставляются сборник план-конспектов лекций в виде сводного документа, тематический план каждой лекции в виде слайдов, видеозаписи каждой лекции и формулировки домашних заданий к лекциям с комментариями по решению. Использование записей лекций и демонстраций, поддержанные консультациями в Телеграм-канале, позволяет изучать материалы курса в комфортном для слушателя режиме.
Практическая часть состоит в самостоятельном решении небольших задач — программ на языке ассемблера — с последующей их проверкой. Решение задач домашнего задания проводится на языке ассемблера RISC-V, в настоящей момент для проверки используется система EJudge, но при независимой постановке курса могут быть использованы и другие средства контроля знаний.
В учебном процессе используются эмулятор, среда разработки и визуализатор выполнения кода RISC-V RARS. Выбор RARS обусловлен тремя составляющими: компактностью, свободным лицензированием и наличием как визуального режима, так и режима командной строки. Принцип «одного окна» RARS IDE позволяет вести разработку и отладку учебных примеров без переключения визуальных контекстов (что важно при трансляции экрана). RARS написан на языке Java и распространяется под свободной лицензией MIT — его можно неограниченно использовать на домашних и вузовских компьютерах под управлением любой ОС. Помимо визуального IDE, RARS поддерживает режим запуска программ на языке ассемблера из командной строки, что позволяет встраивать его в системы автоматической проверки с полным сохранением синтаксиса исходных программ.
Курс читается автором как спецкурс кафедры АСВК факультета ВМиК МГУ им. М. В. Ломоносова, по ссылке можно посмотреть актуальную информацию о текущем статусе проведения курса и найти обновлённые материалы. В настоящий момент инструментальная составляющая курса включает два эмулятора RISC-V (основной, RARS, и Ripes, для наглядной иллюстрации работы конвейера), а также систему проведения олимпиад EJudge для проверки решений с помощью RARS.
Особенности преподавания научно-практических дисциплин в области ИТ
Большинство ИТ-дисциплин, имеющих прикладной характер, сопряжено как с изучением теоретической базы, так и с освоением практических навыков — как правило, работы с программными инструментами определённого класса. Довольно часто такие инструменты весьма многообразны и/или сложны на уровне профессионального владения, однако исключать их из соответствующего курса нельзя.
Более того, в лекционный материал должна быть включена не только демонстрация возможностей таких инструментов, но и практика их применения на типовых задачах, а также — по возможности полная — иллюстрация теоретических принципов в их реализации для данных инструментов. Говоря проще: в программировании надо обучать не только построению алгоритмов, но и демонстрировать приёмы программирования, а главное — показывать, как основные изучаемые постулаты реализуются в простых программах-примерах.
Это подразумевает постоянное присутствие в информационном пространстве лекции т. н. «второго текста». Если «первый текст» — это развёрнутый план (план-конспект) изучаемого материала, размечающий опорные точки изложения, то «второй текст» — это окно (желательно одно) инструмента разработки с исходным текстом программы и (если это требуется) метаинформацией о ходе исполнения этой программы.
Как следствие, в план-конспект, а в особенности в его непосредственное воспроизведение на лекции входит довольно много «сиюминутного» материала. Например, большинство простых примеров лучше писать с нуля «в реальном времени»: по аналоги с написанием доказательства на доске, время порождения примера сопоставимо с времени восприятия порождаемого текста слушателем.
Получившийся видеоряд весьма трудно формализовать в виде полного конспекта, поэтому для успешного обучения студентам должны быть доступны онлайн как исходный план-конспект, так и видеозапись лекции в виде как минимум записи действий на экране компьютера со «вторым текстом» и голоса лектора.
Доступность материалов онлайн подразумевает возможность обсуждения и уточнения трудных для восприятия мест также онлайн. Для этого мы используем группу в мессенждере Telegram (в тексте лекций есть её упоминание).
Полученный комплекс позволяет перевести практическую деятельность студентов в самостоятельную работу. По каждой лекции выдаётся несколько практических домашних заданий, обязательных к решению и сдаче в срок до следующей лекции. Строгое ограничение срока сдачи позволяет в следующей лекции рассчитывать на то, что у слушателей уже сформируется минимальный практический опыт работы по теме предыдущей.
Консультации по решению домашних заданий ведутся в той же группе Telegram.
Наконец, проверка домашних заданий (как минимум, простых) должна быть по возможности автоматизирована — это экономит преподавательское время и позволяет наращивать объём аудитории слушателей.
Более подробно об особенностях преподавания см. доклад на XIX конференции «Свободные программы в высшей школе» и слайды к нему, а также статью «Академическая образовательная площадка в условиях информационной связности» в сборнике «Программные системы и инструменты» №241.
Контроль успеваемости и итоговая аттестация на основании автоматической проверки решений домашних заданий
Итоговая оценка по курсу выставляется по результатам проверки домашних заданий. Каждая задача сопровождается комплектом тестов (про причинам возможного плагиата со стороны студентов, сами тесты не публикуются).
В курсе два типа автоматически проверяемых задач — на ввод-вывод и на построение растрового изображения.
Задачи на ввод-вывод рассчитаны на внешние вызовы (environment calls) RARS (т. н. «SPIM system calls», их поддерживают многие эмуляторы MIPS и RISC-V) — ввод и вывод чисел (целых и вещественных), символов и строк. Тесты содержат несколько наборов входных данных для каждой задачи и эталонный вывод решения для каждого набора. Тест считается пройденным, если решение на заданных входных данных производит вывод, который не отличается от эталонного
- (для большинства задач) с учётом допустимых дополнительных пробельных символов
- (для задач на математический сопроцессор, выводящих вещественный ответ) с учётом заданного ограничения на точность вещественных чисел в ответе
Как уже было сказано выше, RARS поддерживает символьный ввод-вывод как в режиме командной строки, что позволяет использовать его в системах проверки домашних заданий, так и в режиме IDE вол время индивидуальной разработки решения.
Задачи на построение растрового изображения рассчитаны на использование RARS Bitmap Display — внешнего устройства, представляющего собой видеопамять, отображённую на адресное пространство процесса. Тесты для них также содержат несколько наборов входных данных, а эталонный вывод — это шестнадцатеричный дамп видеопамяти. Все задачи этого типа выполняются с такими настройками Bitmap Display: размер точки — 2×2 пикселя; размер экрана в пикселях — 512×256; базовый адрес MMIO — 0x10010000.
Для сверки с эталонным выводом следует запускать RARS с такими параметрами:
$ rars ae1 se2 sm me nc dump 0x10010000-0x10210000 HexText дамп.hex программа.asm < входные_данные.text`
Тест считается пройденным, если дамп.hex почти совпадает с эталонным выводом. Поскольку построение растрового изображения нередко связано с вещественными вычислениями, мы использовали следующий критерий сверки: с ответом должны совпадать по цвету по крайней мере те точки эталона, все 8 соседей которых имеют тот же цвет (то есть границы областей могут «плавать» в диапазоне ±1 точка).
- Возможны другие алгоритмы (например, 100 совпадение)
Сценарий на Python для сверки с эталоном
- Сценарий на Python для визуальной проверки опубликован на странице соответствующей лекции
Правила формирования тестов
- Минимум один тест (ввод и эталонный вывод) должен быть опубликован в качестве примера
- Если задача предусматривает несколько исходов (диагностику ошибки, различные варианты ответа и т. п.), на каждый исход следует сделать тест
- Также стоит сделать тесты на краевые значения (границы диапазонов, максимальный и минимальный объём входных данных и т. п.)
Если задача предусматривает проверку потребления памяти, использовать встроенные в EJudge или другую систему проверки механизмы «Memory Limit» использовать нельзя: потребление памяти виртуальной машиной Java, на базе которой реализован RARS, непредсказуемо.
Можно предусмотреть дополнительные проверки средствами самого RARS — например, использовать механизм footer в EJudge, с котором будет содержаться код, проверяющий отсутствие мусора в определённом сегменте оперативной памяти.
Проверку потребления процессорного времени в RARS (и вообще в неточных эмуляторах) следует делать с существенными допущениями. Класс вычислительной сложности (O(1) < O(n) < O(n2) < O(n3) < … < O(cn)) на достаточно больших данным проверять можно, но мультипликативная константа при одинаковых классах варьируется слишком сильно.
Промежуточные оценки по задачам и финальный балл
Задача считается решённой, если все тесты пройдены.
- Если задача решена, за каждую неудачную попытку решения накладывается небольшой штраф (в нашем варианте -1%)
Если задача не решена, за каждый пройденный тест добавляется небольшой бонус (в нашем варианте +1%). В случае очень больших тестовых наборов такой бонус имеет значение (а требование решать на 100% может оказаться почти не выполнимым)
Срок сдачи домашнего задания ограничен днём, в который читается следующая лекция. В варианте чтения лекций раз в неделю это 6 дней.
- Следующая неделя остаётся «на доделку». Решённые в этот период задачи получают 50% штрафа.
- Ещё спустя неделю штраф повышается до 75% и далее остаётся неизменным.
- Финальная оценка-автомат выводится из среднего арифметического по набранным баллам.
- Градация оценок меняется в зависимости от сложности и статистики по решениям, обычно с диапазонами по 15-20% от 100% для классической четырёхбалльной схемы ОТЛ/ХОР/УДОВЛ/НЕУД
- Некоторые задачи (сложные и/или содержащие критически важные материалы) могут быть помечены как обязательные для получения ОТЛ
Оценку-автомат можно повысить на один балл, оставить без изменений или понизить на один балл на экзамене, в зависимости от успехов на нём.
- От сдачи экзамена можно отказаться — в этом случае выставляется оценка-автомат
- Нельзя повысить оценку НЕУД — только пересдача
- В нашем случае экзамен состоял в ограниченном по времени решении индивидуальной задачи на построение растрового изображения (с контролем списывания)
Система штрафов и бонусов рассчитана так:
Для получения отличной и хорошей оценок достаточно почти всегда вовремя решать почти все задачи
Если сдать вообще все задачи, но в конце семестра, никакой оценки, даже УДОВЛ, получить нельзя
Приложение
- Тип «олимпиады» — «kirov» (это влияет на формулу оценки, см. документацию по EJudge)
- Тип «языка программирования» — «rars»
использовался прилагаемый модифицированный вариант RARS с автоматическим запуском таймера
- тем не менее в EJudge есть встроенный RARS без такой модификации
Два типа задач (для верификации вывода задач типа «bitmap» использовался прилагаемый сценарий)
- Лимит памяти заранее выставлен в 1 гигабайт (в расчёте на аппетиты Java-машины)
- В задачах явно проставлены сроки сдачи, таким образом подсчётом промежуточных баллов занимается сам EJudge
Доступ к журналу проверки Д/З всем участникам открыт (это значит, что они могут частично получить информацию о содержимом эталонных файлов после попытки сдать решение)
Программные системы и инструменты : Тематический сборник / Под ред. Р.Л. Смелянского. – М. : Издательский отдел факультета ВМК МГУ имени М. В. Ломоносова МАКС Пресс, 2024. – № 24. – 184 с., с 55-66 (1)