Временная организация и управление работой конвейеров.
S429 В конвейере необходимо тщательно обеспечивать диспетчеризацию, т.е. определить и выдержать те моменты времени, в которые каждая входная величина, промежуточное число, коэффициент вводятся на ступени, чтоб гарантировать и производительность, и отсутствие внутренних конфликтов. Это нетрудно осуществить в линейном конвейере. Имеются подклассы конвейеров, для некоторых существуют оптимальные, или, хотя бы, эвристические, хорошие алгоритмы диспетчеризации. При этом используются два не слишком сильных ограничения на конвейеризацию: 1) время исполнения для всех ступеней является кратным некоторому базовому периоду синхронизации; 2) если вычисление в конвейере начато, то его временная схема использования ступеней фиксирована.
Конвейеризация в структурах машин ОКОД. S430 Конвейеризация же машин класса ОКОД программисту обычно не видна, поскольку она реализуется через архитектуру системы команд, а не посредством конвейерных спецификаций. Более того, процесс, который здесь конвейеризуется, а именно использование команд машинного уровня, гораздо более динамичен и в нем больше зависимостей, чем в случае векторных машин. Это приводит к конвейерам сложным и высоко самоорганизующимся (к «асинхронным и многофункциональным конвейерам с динамической диспетчеризацией инициаций»). От программиста скрывают в системе команд конвейерность по двум причинам: 1) единая система команд создается для целого семейства машин (процессоров), но часть этой системы в конкретных компьютерах семейства может отсутствовать; значит, одни и те же программы реально в процессорах семейства могут реализовываться по-разному; поэтому любые видимые побочные эффекты конвейеризации (хорошие и плохие) должны обнаруживаться и «подавляться» аппаратурой; 2) в принципе, очень сложно отслеживать положение каждой из команд, находящихся в данный момент в конвейере, и определять, какие именно значения поступают командам, когда они запрашивают операнды; просто слишком много рутинной работы и весьма вероятны ошибки.
S431 Конвейерность не все удается от программиста скрыть. Есть два класса эффектов, которые если и не учитываются программистом, но все же иногда видны ему: 1) зависимость между соседними командами программы и то, как перекрытие их исполнения в конвейере может влиять на используемые операнды и вычисляемые результаты;
2) обработка событий, асинхронных по отношению к нормальным операциям программы – прерывания; проблема состоит в том, что часто трудно определить (а) где именно должен быть вставлен форсированный переход (б) как в точности перезапустить прерванную программу после обработки события, вызвавшего прерывания; программисту-пользователю оказывается весьма сложно корректно и эффективно решить указанные проблемы.
|