18 / 20 · Теория
Спроектируйте знаковые и граничные тесты
Совместите арифметические границы, границы формы и управления за пределами одного благополучного примера.
Уроки доступны бесплатно. Запишитесь, чтобы сохранять прогресс.
Выбирайте входы, различающие ошибки
Положительный пример 2×2 выявляет сдвиг и индексацию, но не знаковое расширение или насыщение. Матрицы из единиц помогают проверять count, но могут скрывать транспонирование. Используйте асимметричные значения, отрицательные числа, нули и разные строки и столбцы.
A=[[2,−1],[0,3]] и B=[[4,5],[−2,1]] дают [[10,9],[−6,3]]. Здесь есть положительные и отрицательные выходы и достоверный ноль. Единичная B должна воспроизводить A. Нулевая B должна давать нулевые выходы при потреблении K членов каждым PE.
При W=8, K=4 повторный минимум×минимум даёт 65536; повторный минимум×максимум — −65024; повторный максимум×максимум — 64516. Все помещаются в AW=18. Проверка только наибольшего положительного операнда пропускает наибольшее положительное произведение.
Для строки A [−128,−128,127,127] и столбца B [−128,127,−128,127] произведения равны [16384,−16256,−16256,16129]. Их сумма — один, с префиксными суммами [16384,128,−16128,1]. Малый итоговый результат не оправдывает узкий промежуточный аккумулятор.
Покрывайте границы формы и управления
N=1,K=1 завершается после E0. N=3,K=1 всё равно заканчивается после E4, поскольку операнды проходят сетку. N=1,K=5 — скалярное произведение за пять фронтов без пространственного сдвига. Проверка K=1,2,3,4 пересекает границы разрядности счётчиков, особенно различие хранения K−1 и K.
Вставляйте паузы перед первым MAC, в середине свёртки и перед последним MAC. Блокируйте выходы после завершения. Сбрасывайте после clear, в середине задания и при ожидающем достоверном результате. Выход старого задания после сброса — ошибка. Сравнивайте формы блоков, кратные размеру, с формами, оставляющими одну строку или столбец; проверяйте маски по координатам.
Для каждого успешного случая указывайте матрицу, точные списки потреблённых членов, число фронтов advance, пауз и координаты выданных выходов. Отрицательным тестам нужна ожидаемая категория ошибки. Отделяйте точные проверки аккумулятора от квантования выхода. Фиксированные граничные наборы вместе со случайными тестами с заданным начальным значением делают ошибки воспроизводимыми и расширяют покрытие за пределы одного примера.
Попробуйте сами
При N=3,K=1 найдите номер последнего фронта и число фронтов. Также найдите сумму четырёх членов минимум×максимум при W=8,K=4.
Прочитать объяснение
Номер последнего фронта — 1+6−3=4, то есть пять фронтов E0..E4. Одно произведение минимум×максимум равно −16256; четыре дают −65024.