Глава 8. Когда следует использовать совмещенный буфер ввода-вывода
Применение совмещенного буфера ввода-вывода предусмотрено для оптимизации использования памяти акселераторов. Это особенно полезно, когда память акселератора ограничена and input and output data. Для каждого экземпляра задания среда исполнения ALF предусматривает возможность создания совмещенного буфера ввода-вывода. Буфер доступен как из определенного пользователем вычислительного ядра, так и из функций input_dtl_prepare и output_dtl_prepare. В каждом совмещенном буфере ввода-вывода для каждого рабочего блока можно динамически определять три типа областей:
ALF_BUF_OVL_IN: в эту область копируются данные из основной памяти до вызова вычислительного ядра;
ALF_BUF_OVL_OUT: данные из этой области записываются в основную память после вызова вычислительного ядра;
ALF_BUF_OVL_INOUT: в эту область копируются данные из основной памяти до вызова вычислительного ядра, а после вызова ее содержимое переписывается в тот же участок основной памяти.
Примеры использования совмещенного буфера ввода-вывода приведены в разделе «Пример использования совмещенного буфера ввода-вывода» на стр. 133.
Что следует учитывать при использовании совмещенного буфера ввода-вывода
При использовании совмещенного буфера ввода-вывода следует убедиться, что области входных данных, определенные параметрами ALF_BUF_OVL_IN и ALF_BUF_OVL_INOUT, не перекрываются. Порядок загрузки входных данных в память акселератора не определен, поэтому если указанные области перекрываются, входные данные могут быть повреждены. На рис. 8 изображен поврежденный совмещенный буфер ввода-вывода.
Рис. 8. Поврежденный совмещенный буфер ввода-вывода
Если разбиение данных предполагается осуществлять на акселераторе, необходимо создать списки пересылки данных для входного буфера, совмещенного входного буфера, а также совмещенного буфера ввода-вывода в определяемой пользователем функции alf_accel_input_dtl_prepare, и создать списки пересылки данных как для выходного буфера, так и для совмещенного выходного буфера в определяемой пользователем функции alf_accel_output_dtl_prepare.
|