Россия, Москва |
Оптимальное программирование процессоров EPIC-архитектуры
Сортировка с помощью прямого выбора
Общий принцип алгоритма:
- Выбирается наименьший элемент массива.
- Найденный элемент меняется местами с первым элементом.
- Выбирается наименьший из оставшихся n — 1 элементов, n — 2 элементов и т.д. и меняется местами с первым элементом оставшейся части массива. Процесс продолжается до тех пор, пока справа не останется один, самый большой элемент исходного массива.
Сложность алгоритма составляет .
В табл. 8.2 показана по шагам сортировка того же массива. Курсивом выделены меняющиеся на каждом шаге местами первый и минимальный элементы неупорядоченной части массива.
Основная процедура, многократно применяемая в алгоритме — процедура нахождения минимального элемента среди уменьшающегося множества элементов.
Рассмотрим эту процедуру отдельно. В ней реализуется операция преобразования вектора (массива) в скаляр, что также соответствует сложению или умножению всех элементов массива. Эта операция является составной частью скалярного умножения, численного интегрирования и т.д. Возможности распараллеливания ограничены информационной связностью промежуточных результатов. Единственно возможная параллельная схема счета — счет способом "пирамиды", при котором производится попарное сравнение и нахождение меньшего элемента внутри пары, затем попарное сравнение результатов первого сравнения и т.д. — до получения окончательного результата. Длина критического пути при реализации всех возможностей распараллеливания (при достаточном количестве ИУ) не менее ]log2n[t, где t — время элементарной, образующей операции (сравнения и возможной пересылки).
При использовании небольшого числа ИУ возможна их практически полная загрузка на всем протяжении счета при наличии средств синхронизации, "страхующих" опережающее использование несформированных данных.
Исходный массив | 6 | 2 | 4 | 3 | 4 | 7 | 10 | 9 | 5 | 8 | 0 | 1 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Шаг 1 | 0 | 2 | 4 | 3 | 4 | 7 | 10 | 9 | 5 | 8 | 6 | 1 |
Шаг 2 | 0 | 1 | 4 | 3 | 4 | 7 | 10 | 9 | 5 | 8 | 6 | 2 |
Шаг 3 | 0 | 1 | 2 | 3 | 4 | 7 | 10 | 9 | 5 | 8 | 6 | 4 |
Шаг 4 | 0 | 1 | 2 | 3 | 4 | 7 | 10 | 9 | 5 | 8 | 6 | 4 |
Шаг 5 | 0 | 1 | 2 | 3 | 4 | 7 | 10 | 9 | 5 | 8 | 6 | 7 |
Шаг 6 | 0 | 1 | 2 | 3 | 4 | 4 | 10 | 9 | 5 | 8 | 6 | 7 |
Шаг 7 | 0 | 1 | 2 | 3 | 4 | 4 | 5 | 9 | 10 | 8 | 6 | 7 |
Шаг 8 | 0 | 1 | 2 | 3 | 4 | 4 | 5 | 6 | 10 | 8 | 9 | 7 |
Шаг 9 | 0 | 1 | 2 | 3 | 4 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
Шаг 10 | 0 | 1 | 2 | 3 | 4 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
Представим схему счета "пирамидой" при нахождении минимального элемента массива, на основе которой составим план программы для процессора EPIC -архитектуры. Предварительно расширим данный массив, дополнив его n-1 элементами — промежуточными результатами анализа, а также (последний элемент) результатом поиска.
Для схемы счета "пирамидой" не принципиальна четность или степень "двойки" значения n. На рис. 8.1 представлена схема для n = 7.
Стрелки указывают на направление движения информации, — — значения предикатов — результатов попарного сравнения элементов.
Рисунок иллюстрирует простой цикл сравнения и пересылок меньших элементов. Единственным условием правильного выполнения операции является, как говорилось ранее, синхронизация, исключающая использование результата сравнения до окончания его формирования. При длине массива, значительно превышающей количество ИУ, эффективен механизм ожидания рассчитываемого результата, т.е. задержки выполнения команд при попытке считывания до записи. Задержки начнутся только на последнем этапе выполнения "пирамиды".
Однако отметим преимущества принудительного программного решения проблемы синхронизации с помощью команды закрытия адресов по считыванию до окончания записи по этим адресам. Такая команда позволяет предварительно закрыть адреса данных an+1 - a2n-1. Их открытие при записи в ходе выполнения программы обеспечивает правильное выполнение "пирамиды" во времени.
План программы выполнения данной процедуры представлен на рис. 8.2. Иллюстрируется "развернутый" цикл, где ромбами обозначены операции сравнения . Пересылки помечены предикатами или их отрицаниями, в соответствии со значениями которых они производятся. Считаем, что значение предиката может быть использовано через два такта, что определяет взаимное смещение пересылок и сравнений при формировании "длинных" командных слов. При формировании программы необходимо учесть организацию цикла, индексацию и т.д. Однако важно отметить, что все ветвление в данном проекте программы выполнено без остановок конвейера.
Тогда очевиден план программы сортировки с помощью прямого выбора. Процедура нахождения минимального элемента выполняется в цикле над уменьшающейся на единицу длиной массива. Найденный элемент меняется местами с первым элементом этого массива. Очевидно, в этом случае условный переход не используется.