Глава 6. Распределение данных
Значительное место в решении задач параллельной обработки данных с использованием нескольких акселераторов является выяснение наилучшего распределения данных между акселераторами. API ALF не выполняет такого распределения автоматически, однако предоставляет в распоряжение программиста средства, облегчающие этот процесс.
API ALF обеспечивает следующие методы распределения данных:
- «Распределение данных на основном процессоре»
- «Распределение данных на акселераторах»
Эти методы описаны в следующих разделах.
Распределение данных на основном процессоре
Для распределения данных приложения для основного процессора используются специальные API. Чтобы выполнить такое распределение, следует построить списки пересылки данных для рабочих блоков посредством таких вызовов, как alf_wb_dtl_begin, alf_wb_dtl_entry_add и alf_wb_dtl_end. Этот способ особенно полезен в тех случаях, когда данные, ассоциированные с рабочими блоками, просты, и программа основного процессора может управлять распределением данных для всех акселераторов.
Распределение данных на акселераторах
В тех случаях, когда схемы распределения данных сложны и требуют значительных вычислительных ресурсов, может оказаться более эффективной генерация списков пересылки данных на акселераторах. Этот пример особенно полезен, если вычислительные ресурсы основного процессора требуются для других целей, либо он недостаточно мощен, чтобы составить списки пересылки данных для всех рабочих блоков.
Функции для распределения данных на акселераторах
Разработчики акселераторных библиотек должны предусмотреть подпрограммы для выполнения распределения данных для ввода (alf_accel_input_dtl_prepare) и вывода (af_accel_output_dtl_prepare) и генерации соответствующих списков пересылки данных.
Адреса в основной памяти
При распределении данных на акселераторах основный процессор не задействован в создании списков пересылки данных, поэтому адреса буферов ввода и вывода в основной памяти должны быть явно переданы акселератору через буфера контекста параметров рабочего блока. Пример такой процедуры приведен в разделе «Распределение данных на акселераторе на примере сложения матриц» на стр. 126
|