Ночной плакат и принтеры, которые не любят перекличку
В холодной мастерской вывесок ещё темно, а нам надо распечатать огромный плакат. Один принтер захлёбывается. Начальник ставит рядом несколько, каждый печатает свою полосу, а края сводим только в редких точках.
Мы уже пробовали иначе, после каждого мелкого шага все сверяются и гоняют тяжёлые куски туда-сюда. В итоге принтеры больше ждут, чем печатают. С большими текстовыми машинами так же, упираются в память и в лишние записи для обучения.
Новый ход, резать работу не по целым кускам, а внутри каждого повторяющегося узла. Полоса плаката это кусок вычислений, строчка шва это часть больших перемножений, а сводка краёв это короткая встреча, где складывают частичные ответы. Если резать по правильным линиям, встреч мало.
Внутри узла есть две тяжёлые части. Одна раздувает и сжимает данные, и каждый принтер делает это у себя до конца, а потом мы один раз складываем полосы. Другая часть следит за связями по всему тексту, и мы раздаём разные группы таких проверок разным принтерам, потом сводим вместе.
Чтобы не устраивать лишние сборки, мелочи делаем одинаково на каждом принтере, как будто у всех свои линейки и одни и те же метки. И когда надо выбрать точные слова из огромного списка, никто не таскает весь список по кругу, каждый сообщает только то, что нужно для общей ошибки.
Когда принтеров стало много, мастерская не превратилась в базар, они почти всё время печатали, а не ждали сводку краёв. Плакат можно было делать всё больше. И ещё мы поменяли порядок выравнивания и склейки слоёв, и большие сборки перестали вести себя капризно, края ложились ровнее.