 | Глава 9. Использование рабочих блоков и порядок вызовов функций для экземпляра задания, обрабатываемого на акселераторе
В зависимости от нужды программист может задействовать рабочие блоки как однократного, так и многократного использования, добиваясь максимально эффективного распределения данных на акселераторах. Пусть некоторое задание может быть разделено на N рабочих блоков. Ниже описан порядок использования различных типов рабочих блоков, а также порядок вызовов функций для экземпляра задания при условии, что один экземпляр задания исполняется на одном акселераторе:
- Инициализация экземпляра задания (выполняется средой исполнения ALF)
- Если задание имеет контекст, то вызов функции
alf_accel_task_context_setup. Среда исполнения вызывает данную функцию после того как в акселератор были загружены первоначальные данные контекста задания, но до начала обработки рабочих блоков.
- Для каждого рабочего блока (k):
- Если имеются контексты, ожидающие объединения, то переход к шагу 4.
- Для каждой итерации рабочего блока многократного использования
i < N (общее число итераций)
alf_accel_input_list_prepare(WB(k), i, N): функция вызывается только если задание требует распределения данных для акселератора.
alf_accel_comp_kernel(WB(k), i, N): вычислительное ядро вызывается всегда.
alf_accel_output_list_prepare(WB(k), i, N): функция вызывается только если задание требует распределения данных для акселератора.
- Если контекст другого невыгруженного экземпляра задания должен быть объединен с текущим экземпляром, вызывается функция
alf_accel_task_context_merge.
- Если есть рабочие блоки, ожидающие обработки, то переход к шагу 3.
- Запись контекста задания.
- Выгрузка образа или ожидание следующего принятия к исполнению.
- Если создан новый экземпляр задания, переход к шагу 2.
Порядок вызова трех функций на шаге 3 определяется следующими правилами:
- Для любого рабочего блока однократного использования
WB(k) гарантируется следующий порядок вызова функций:
alf_accel_input_list_prepare(WB(k))
alf_accel_comp_kernel(WB(k))
alf_accel_output_list_prepare(WB(k))
- Для двух рабочих блоков однократного использования, назначенных одному экземпляру задания в порядке
WB(k) и WB(k+1), ALF гарантирует исполнение лишь следующих правил вызова:
alf_accel_input_list_prepare(WB(k)) вызывается до alf_accel_input_list_prepare(WB(k+1))
alf_accel_comp_kernel(WB(k)) вызывается до alf_accel_comp_kernel(WB(k+1))
alf_accel_output_list_prepare(WB(k)) вызывается до alf_accel_output_list_prepare(WB(k+1))
- Рабочий блок многократного использования
WB(k, N) рассматривается как N рабочих блоков однократного использования, назначенных одному экземпляру задания в порядке увеличения индекса итерации WB(k, 0), WB(k, 1), ..., WB(k, N–1). Единственная разница заключается в том, что все эти рабочие блоки используют один и тот же буфер параметров и контекста. В остальном порядок вызова функций определяется двумя вышеприведенными правилами. См. главу 10, «Изменение буфера параметров и контекста для рабочих блоков многократного использования», стр. 33.
 |
|  |