Глава 7. Управление буфером акселератора
Среда исполнения ALF для акселератора выполняет функции управления данными рабочих блоков и заданием для вычислительного ядра. Программисту достаточно сосредоточиться лишь на организации данных и реализации вычислительного ядра. И хотя среда исполнения поддерживает управление буфером и пересылкой данных, тем не менее, программисту хорошо представлять организацию работы с каждым буфером и его связь с вычислительным ядром. Чтобы использовать память акселератора максимально эффективно, среда исполнения ALF должна располагать информацией о требованиях задания к используемой памяти. Программист должен указывать ресурсы памяти, используемые каждым заданием — это позволяет среде выделить заданиям необходимый объем памяти.
Типы буферов
В исполняемом коде акселератора ALF можно использовать следующие различные типы буферов для каждого экземпляра задания:
- «Буфер контекста задания»
- «Буфер параметров и контекста рабочего блока», стр. 26
- «Буфер входных данных рабочего блока», стр. 26
- «Буфер выходных данных рабочего блока», стр. 27
- «Совмещенный буфер входных и выходных данных рабочего блока», стр. 27
Буфер контекста задания
Буфер контекста задания используется приложениями, требующими общих перманентных данных, на которые могут ссылаться и которые могут обновлять все рабочие блоки. Он также полезен для операций объединения или глобальной предварительной обработки. Задание может быть факультативно ассоциировано с одним буфером контекста. Размер буфера контекста задания может быть указан в процессе создания дескриптора задания. Если этот размер имеет нулевое значение, ни с одним заданием, создаваемым по данному дескриптору, не связывается никакого контекста. На рис. 7 (стр. 26) изображен жизненный цикл контекста задания. Для создания задания используется функция alf_task_create. Данные для начального контекста задания передаются программистом в виде буфера с начальными значениями. После того как вычислительное задание принято к исполнению на акселераторах, среда ALF создает отдельные копии контекста задания для каждого запущенного экземпляра задания. Для инициализации контекста задания на акселераторе программист может предусмотреть особую функцию (alf_accel_task_context_setup). Эта функция будет вызвана средой ALF в момент, когда экземпляр запущенного задания впервые загружен в акселератор (см. рис. 7, а, стр. 26). Все рабочие блоки, обрабатываемые одним и тем же экземпляром задания, используют одну и ту же отдельную копию контекста задания на данном акселераторе (см. рис. 7, б, стр. 26). Программист может также написать функцию слияния (alf_accel_task_context_merge), которая будет вызвана в момент запроса планировщика на выгрузку экземпляра задания из акселератора, для объединения контекста задания данного акселератора с активным контекстом задания на другом акселераторе (см. рис. 7, в). Когда задание завершено и все его экземпляры выгружаются, среда исполнения автоматически вызывает функцию слияния экземпляров задания, чтобы объединить все отдельные копии контекстов задания в единый контекст и записать конечный результат в контекст задания, размещенный в основной памяти в момент создания задания (см. рис. 7, г).
Рис. 7. Жизненный цикл буфера контекста задания
Буфер параметров и контекста рабочего блока
Буфер параметров и контекста рабочего блока служит двум целям:
- он обеспечивает передачу специфичных для данного блока констант или параметров, передаваемых по значению, и
- резервирует область памяти, где вычислительное ядро будет сохранять данные, специфичные для данного рабочего блока, причем последний может быть как однократного, так и многократного использования.
Буфер могут использовать следующие вызовы API:
alf_accel_comp_kernel
alf_accel_input_dtl_prepare
alf_accel_output_dtl_prepare
Параметры копируются во внутренний буфер, ассоциированный со структурой данных рабочего блока в основной памяти в момент вызова программы акселератора the alf_wb_add_parm.
Дополнительная информация приведена в главе 10 «Изменение буфера параметров и контекста рабочего блока при работе с блоками многократного использования», стр. 33.
Буфер входных данных рабочего блока
Буфер входных данных рабочего блока содержит входные данные каждого рабочего блока (или каждой итерации рабочего блока многократного использования) для вычислительного ядра. Для каждой итерации вычислительного ядра ALF используется единственный непрерывный буфер входных данных. Тем не менее, данные для входного буфера могут поступать из отдельных участков большого набора данных, размещенного во основной памяти. Эти отдельные сегменты данных компонуются в буфере входных данных на акселераторе. Среда ALF минимизирует накладные расходы, избегая ненужного дублирования входных данных. В момент создания посредством функции alf_wb_dtl_entry_add содержания рабочего блока в его внутренней структуре данных сохраняются только указатели на массивы входных данных. Эти данные передаются в память акселератора тогда, когда обрабатывается рабочий блок. Вычислительному ядру передается указатель на непрерывный входной буфер в памяти акселератора. Дополнительная информация о разбиении и компоновке блоков данных приведена в разделе «Список пересылки данных» на стр. 15.
Буфер выходных данных рабочего блока
В этом буфере, который представляет собой непрерывный массив ячеек памяти акселератора, сохраняются результаты работы вычислительного ядра. Выходные данные могут быть переданы в различные сегменты большого выходного буфера в основной памяти. После обработки вычислительным ядром одного рабочего блока данные в буфере помещаются в участки основной памяти, указанные в процедуре alf_wb_dtl_entry_add в момент конструирования рабочего блока.
Совмещенный буфер входных и выходных данных рабочего блока
Совмещенный буфер входных и выходных данных (совмещенный буфер ввода-вывода) содержит как входные, так и выходные данные. Секции ввода и вывода для каждого рабочего блока назначаются динамически. Такой буфер особенно полезен в тех случаях, когда требуется оптимизировать использование памяти акселератора, а на место входных данных можно записать выходные. Дополнительная информация об использовании этого буфера приведена в главе 8 «Когда следует использовать совмещенный буфер ввода-вывода», стр. 29. Пример использования буфера приведен в разделе «Пример использования совмещенного буфера ввода-вывода» на стр. 133.
|