7 / 20 · Теория
Флаги valid, метки и очистка
Различайте числовой ноль, пустые токены и токены другого задания.
Уроки доступны бесплатно. Запишитесь, чтобы сохранять прогресс.
Токен несёт больше, чем число
Наш эталонный токен содержит value, valid, job и k. Недостоверный токен — пустой. Достоверный токен с нулевым value — реальный операнд матрицы. Job идентифицирует транзакцию; k — член свёртки. Соединения фиксируют строку A и столбец B каждого PE, а оболочка помнит координаты блока.
Когда оба входа достоверны, проверяйте равенство меток job и k до умножения. A(0,1)=2 в паре с B(0,0)=5 даёт десять, но это недопустимый член. Соответствующая пара k=1 — два и семь, дающая четырнадцать. Рассматривайте несовпадение меток как явную ошибку верификации, а не молча отбрасывайте его как обычный пустой токен.
Считайте члены, а не такты
Clear устанавливает acc=0 и count=0. Для каждой совпавшей пары требуйте k=count, затем увеличивайте count. Потребление k=K−1 завершает локальный результат сразу после этого фронта. Пустые токены и паузы не увеличивают count. Этот простой контроллер требует упорядоченных значений k. Поддержка произвольного порядка нуждается в битовой карте полученных членов и выявлении дубликатов.
При K=2 потребление одного и пяти даёт acc=5, count=1. Пустой токен оставляет оба неизменными. Потребление двух и семи с k=1 даёт acc=19, count=2 и done. Повторный k=1 — ошибка, даже если нижестоящий потребитель уже принял результат.
Опустошение и очистка служат разным целям
Массив не пуст, когда входит последний граничный вход. Токены остаются во внутренних регистрах пересылки. Продолжайте продвигать с недостоверными граничными входами, пока последний PE не потребит последний член. При таком опустошении сохраняйте готовые аккумуляторы до сбора результатов. Запуск нового задания, напротив, требует совместной очистки аккумулятора, count, valid и меток.
Оболочка этого курса выполняет по одному заданию. Она завершает, собирает результаты, очищает и запускает снова. Перекрытие заданий требует дополнительного состояния или аккумуляторов и протокола выхода; одни метки такой возможности не дают. Тесты должны включать несовпадающие метки, отсутствующие и повторённые члены, остаточный valid после очистки и достоверные нулевые операнды, всё равно увеличивающие счётчик членов.
Попробуйте сами
PE с K=3 потребляет пару k=0 (2,4), пустой токен, пару k=1 (0,9) и пару k=2 (−1,3). Найдите acc и count. Что если последняя метка job не совпадает?
Прочитать объяснение
При совпадающих метках acc=5 и count=3, поэтому результат завершён. Пустой токен не считается; достоверный ноль считается. Несовпадающее job должно вызвать ошибку верификации и не может считаться успешным завершением.