Проблемы конвейерных процессоров

Проблемы конвейерных процессоров:

  • Стоимость аппаратных средств. Стоимость аппаратной реализации растёт за счёт конвейерных блоков, входных и выходных регистров блоков, особенно для конвейеров в ширину и конвейера команд;
  • Обработка особых ситуаций. На одном из конвейерных сегментов возникает ситуация, аналогичная программному прерыванию в фон -Неймановском процессоре — например — результат сложения порядков превышает разрядную сетку числа. При этом возникает проблема остановки конвейера, и, следовательно, обработка особых ситуаций в конвейерном процессоре будет более сложной.
  • Синхронизация. Устройство управления должно выполнять синхронизацию конвейерных блоков, конвейера команд и конвейера данных.

Особенности программирования конвейерных процессоров

Собственно наличие аппаратно реализованного конвейера данных и конвейера команд еще не означает значительного увеличения наблюдаемой скорости работы процессора из-за наличия ряда условий, при которых конвейер данных может быть нормально загружен — это отсутствие связей по данным и связей по управлению в потоке конвейеризируемых команд.

Проблемы конвейерных процессоров

Связанные по данным операции — это ситуация, при которой результат предыдущей (не обязательно непосредственно, но в рамках глубины конвейера)
В этой ситуации команда умножения Y*E должна быть задержана до выхода значения Y из конвейера умножения, как результата умножения D*C.

Таким образом, необходимы особые подходы к программированию конвейерных процессоров, которые мы продемонстрируем на следующих двух задачах:

Задача суммирования элементов массива

Приемлемый для конвейера алгоритм должен обеспечить поток несвязанных операндов сложения, что приводит к алгоритму попарного сложения.

Если мы реализуем алгоритм умножения по вышеприведенной схеме, то, несмотря на наличие независимых пар по умножению, мы сталкиваемся с необходимостью добавления очередного результата умножения в B[i], что приводит к задержке конвейера сложения.

Оптимальный для конвейера алгоритм связан с переворотом порядка умножения на 90° — т.е. мы умножаем вектор X не на строки матрицы А, а на столбцы матрицы и добавляем полученные произведения ко всем элементам вектора В. При этом добавление происходит параллельно во все элементы столбца, и следовательно может быть успешно конвейеризировано.

0

Яндекс.Метрика