IBM®
Перейти к тексту
    в России и странах СНГ [изменить]    Условия использования
 
 
   
    Главная страница    Продукты    Услуги и решения    Поддержка и загрузка    Мой профиль    
Перейти к тексту

developerWorks Россия  >  Open source | Linux  >

Инфраструктура библиотек ускоренных вычислений для Cell Broadband Engine : Часть 4. Справочник по функциям

Software Development Kit for Multicore Acceleration (Инструментарий разработчика для ускоренных многоядерных вычислений)

developerWorks
На предыдущую страницуСтраница 3 из 7 На предыдущую страницу

Опции документа

Обсудить


Выскажите мнение об этом учебном пособии

Помогите нам улучшить содержание


Глава 21. API основного процессора

API основного процессора включает следующее:

  • «Базовые API среды ALF», стр. 62
  • «API вычислительного задания», стр. 70
  • «API для операций с рабочими блоками», стр. 86
  • «API для операций с наборам данных», стр. 93

Базовые API среды ALF

Нижеприведенные определения API относятся к базовым функциям вычислительной среды.

alf_handle_t

ИМЯ

alf_handle_t — Эта структура данных используется в качестве ссылки на один экземпляр среды исполнения ALF.

ОПИСАНИЕ

Эта структура данных используется в качестве ссылки на один экземпляр среды исполнения ALF. Структура данных инициализируется посредством вызова функции alf_init и аннулируется с помощью функции alf_exit.

alf_init

ИМЯ

alf_init — Инициализирует среду исполнения ALF.

СИНОПСИС

int alf_init(void* p_sys_config_info, alf_handle_t* p_alf_handle);

Параметры

p_sys_config_info [IN]Указатель местонахождения платформно-зависимых конфигурационных данных, необходимых среде исполнения ALF для настройки системы.

Этот параметр должен указывать на структуру данных sys_config_info_CBEA_t, определяемую следующим образом:

typedef struct {
char* library_path;
} alf_sys_config_t_CBEA_t;

p_alf_handle [OUT]Указатель на ссылку на структуру данных, представляющую среду исполнения ALF. Если вызов успешен, этот буфер инициализируется соответствующими данными, в противном случае его содержимое не изменяется.

ОПИСАНИЕ

Эта функция инициализирует среду исполнения ALF. Она выделяет для последней необходимые ресурсы и глобальные данные, а также производит все необходимые платформно-зависимые настройки.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

>= 0Успешный вызов, результат запроса
меньше 0Ошибки:
  • ALF_ERR_INVAL: неверный входной параметр
  • ALF_ERR_NODATA: Часть системных конфигурационных данных недоступна
  • ALF_ERR_NOMEM: Недостаточно памяти, либо некоторые системные ресурсы полностью использованы
  • ALF_ERR_GENERIC: внутренняя ошибка

ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ

Значение поля library_pathПуть ко всем совместно используемым объектным файлам вычислительного ядра приложения. Если указатель имеет значение NULL, выполняется проверка переменной среды ALF_LIBRARY_PATH. Если значение переменной определено, то оно используется. Если сброшены оба параметра, используется значение по умолчанию «.» (текущий каталог).

alf_query_system_info

ИМЯ

alf_query_system_info — Запрос базовой конфигурационной информации.

СИНОПСИС

int alf_query_system_info(alf_handle_t alf_handle, ALF_QUERY_SYS_INFO_T query_info, 
			ALF_ACCEL_TYPE_T accel_type, unsigned int * p_query_result);

Параметры

alf_handle [IN]Ссылка на среду исполнения ALF.
query_info [IN]Идентификатор запроса, указывающий требуемую информацию:
  • ALF_QUERY_NUM_ACCEL: возвращает число акселераторов в системе.
  • ALF_QUERY_HOST_MEM_SIZE: возвращает объем памяти управляющих узлов (до 4Т байт) в килобайтах (2^10 байт). Если объем памяти превышает 4Т байт, то он вычисляется по формуле (ALF_QUERY_HOST_MEM_SIZE_EXT*4T + ALF_QUERY_HOST_MEM_SIZE*1K) байт. Если система поддерживает виртуальную память, это значение соответствует максимальному размеру непрерывного блока памяти, который может быть выделен одному пользовательскому приложению.
  • ALF_QUERY_HOST_MEM_SIZE_EXT: Возвращает объем памяти управляющих узлов в блоках по 4Т байт (2^42 байт).
  • ALF_QUERY_ACCEL_MEM_SIZE: Возвращает объем памяти акселераторных узлов, не превышающей 4Т байт, в килобайтах (2^10 байт). Если объем памяти превышает 4Т байт, он вычисляется по формуле (ALF_QUERY_ACCEL_MEM_SIZE_EXT*4T + ALF_QUERY_ACCL_MEM_SIZE*1K) байт. Если система поддерживает виртуальную память, это значение соответствует максимальному размеру непрерывного блока памяти, который может быть выделен одному пользовательскому приложению.
  • ALF_QUERY_ACCEL_MEM_SIZE_EXT: Возвращает объем памяти акселераторных узлов в блоках по 4Т байт (2^42 байт).
  • ALF_QUERY_HOST_ADDR_ALIGN: Возвращает двоичный логарифм параметра базового условия выравнивания адресов памяти на управляющем узле. 0 означает байтовое выравнивание, 4 — 16-байтовое.
  • ALF_QUERY_ACCEL_ADDR_ALIGN: Возвращает двоичный логарифм параметра базового условия выравнивания адресов памяти на акселераторном узле. 0 означает байтовое выравнивание, 8 — 256-байтовое.
  • ALF_QUERY_DTL_ADDR_ALIGN: Возвращает двоичный логарифм параметра условия выравнивания адресов в списках пересылки данных. 0 означает байтовое выравнивание, 8 — 256-байтовое.
  • ALF_QUERY_ACCEL_ENDIAN_ORDER:
    • ALF_ENDIAN_ORDER_BIG
    • ALF_ENDIAN_ORDER_LITTLE
  • ALF_QUERY_HOST_ENDIAN_ORDER:
    • ALF_ENDIAN_ORDER_BIG
    • ALF_ENDIAN_ORDER_LITTLE
accel_type [IN]Тип акселератора. Определен только один тип акселератора, ALF_ACCEL_TYPE_SPE.
p_query_result [OUT]Указатель на буфер, где сохраняется значение, возвращаемое запросом. Если запрос оканчивается неудачей, результат не определен. Если указателю присвоено значение NULL, ответ на запрос не выдается, но функция возвращает 0.

ОПИСАНИЕ

Функция запрашивает базовую конфигурационную информацию той системы, на которой функционирует ALF.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

0Операция выполнена успешно, результат запроса помещается в буфер, на который указывает p_query_result (если его значение отлично от NULL)
меньше 0Произошла ошибка:
  • ALF_ERR_INVAL: Неподдерживаемый запрос
  • ALF_BADF: неверная ссылка на ALF
  • ALF_ERR_GENERIC: внутренняя ошибка

alf_num_instances_set

ИМЯ

alf_num_instances_set — Устанавливает максимальное число параллельных экземпляров задания, которые ALF может обрабатывать одновременно.

СИНОПСИС

int alf_num_instances_set(alf_handle_t alf_handle, unsigned int number_of_instances);

Параметры

alf_handle [IN]Ссылка на исполняемый код ALF.
number_of_instances [IN]Задает максимальное число экземпляров задания, требующееся вызывающей программе. Если этот параметр равен нулю, среда исполнения выделяет столько экземпляров задания, сколько запрошено прикладным программистом. Тем не менее, последующий вызов alf_ask_create call вернет ошибку, если ALF не может удовлетворить запрос.

ОПИСАНИЕ

Функция устанавливает максимальное число параллельных экземпляров задания, которые ALF может обрабатывать одновременно. Если параметр number_of_instances равен нулю, это означает отсутствие ограничений со стороны приложения. В этом случае ALF вернет ошибку, если не сможет обработать запрос на создание задания с большим числом экземпляров.

Примечание. В SDK 3.0 эта функция вызывается один раз в начале, после alf_init и до первого обращения к alf_task_create. Вторичный вызов этой функции (чтобы изменить число экземпляров задания) не допускается, при попытке такого вызова возникает ошибка ALF_ERR_PERM.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

> 0фактическое число экземпляров, создаваемое средой ALF.
меньше 0Ошибки:
  • ALF_ERR_INVAL: неверный аргумент
  • ALF_ERR_BADF: неверная ссылка на ALF
  • ALF_ERR_PERM: В текущем контексте вызов функции не разрешен
  • ALF_ERR_GENERIC: внутренняя ошибка

alf_exit

ИМЯ

alf_exit — Завершает работу среды ALF.

СИНОПСИС

int alf_exit(alf_handle_t alf_handle, ALF_EXIT_POLICY_T policy, int timeout);

Параметры

alf_handle [IN]Ссылка на ALF
policy [IN]Определяет порядок завершения работы:
  • ALF_EXIT_POLICY_FORCE: Выполняет немедленное завершение, прерывая выполнение всех незаконченных заданий.
  • ALF_EXIT_POLICY_WAIT: Ожидает завершения всех имеющихся заданий и завершает работу.
  • ALF_EXIT_POLICY_TRY: Возвращает признак ошибки, если есть незаконченные задания.
time_out [IN]Таймаут, может принимать следующие значения:
  • больше 0: время ожидания (в миллисекундах) перед возвратом ошибки по таймауту или принудительным завершением
  • = 0: Завершение или возврат без ожидания
  • меньше 0: Бесконечный цикл ожидания, значение допустимо лишь при использовании ALF_EXIT_POLICY_WAIT

ОПИСАНИЕ

Функция завершает работу среды ALF. Высвобождаются выделенные акселератору ресурсы и прекращается выполнение всех запущенных или ожидающих запуска рабочих очередей и заданий, в зависимости от значения параметра policy.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

>= 0Завершение выполнено успешно. Возвращается число незаконченных рабочих блоков.
меньше 0Завершить работу не удалось:
  • ALF_ERR_INVAL: неверный аргумент
  • ALF_ERR_BADF: неверная ссылка на ALF
  • ALF_ERR_PERM: в данном контексте вызов функции запрещен
  • ALF_ERR_NOSYS: запрошенная политика не поддерживается
  • ALF_ERR_TIME: таймаут
  • ALF_ERR_BUSY: имеются запущенные задания
  • ALF_ERR_GENERIC: внутренняя ошибка

alf_error_handler_register

ИМЯ

alf_error_handler_register — Регистрирует глобальную функцию обработки ошибок для исполняемого кода среды ALF.

СИНОПСИС

int alf_error_handler_register(alf_handle_t alf_handle,
			alf_error_handler_t error_handler_function, void *p_context)

Параметры

alf_handle [IN]Ссылка на исполняемый код ALF.
error_handler_function [IN]Указатель на определяемую пользователем функцию обработки ошибок. Значение NULL назначает в качестве обработчика ошибок стандартный обработчик ALF.
p_context [IN]Указатель на определяемые пользователем контекстные данные для функции обработки ошибок. Его значение передается определяемой пользователем функции обработке ошибок при ее вызове.

ОПИСАНИЕ

Функция регистрирует глобальную функцию обработки ошибок для исполняемого кода ALF. Если такая функция уже была зарегистрирована, она будет замещена новой функцией.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

0Операция выполнена успешно.
меньше 0Ошибки:
  • ALF_ERR_INVAL: неверный аргумент
  • ALF_ERR_BADF: неверная ссылка на ALF
  • ALF_ERR_PERM: в данном контексте вызов функции запрещен
  • ALF_ERR_FAULT: неверный адрес буфера или обработчика ошибок (фиксируется в том случае, если системе удалось обнаружить ошибку)
  • ALF_ERR_GENERIC: внутренняя ошибка

ALF_ERR_POLICY_T

ИМЯ

ALF_ERR_POLICY_T — Прототип функции обратного вызова, которую можно зарегистрировать в среде исполнения ALF для пользовательской обработки ошибок.

СИНОПСИС

ALF_ERR_POLICY_T(*alf_error_handler_t)(void *p_context_data, 
			int error_type, int error_code, char *error_string)

Параметры

p_context_data [IN]Указатель, передаваемый среде ALF при регистрации обработчика ошибок. Среда ALF передает его обработчику при активизации последнего. Обработчик может использовать этот указатель для хранения своих приватных данных.
error_type [IN]Определение кодов типов ошибок (в масштабе всей системы), включая следующие:
  • ALF_ERR_FATAL: Продолжение невозможно, работа среды должна быть завершена.
  • ALF_ERR_EXCEPTION: Можно выбрать повтор или пропуск текущей операции.
  • ALF_ERR_WARNING: Можно продолжить, игнорируя ошибку.
error_code [IN]Код ошибки в зависимости от типа.
error_string [IN]Строка языка С, содержащая пригодный к выводу текст с информацией об ошибке.

ОПИСАНИЕ

Прототип функции обратного вызова, который можно зарегистрировать в среде ALF для реализации собственного алгоритма обработки ошибок.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

ALF_ERR_POLICY_RETRYУказывает на необходимость повтора средой ALF операции, вызвавшей ошибку. Если возникла серьезная ошибка и среда ALF не может повторить операцию, она выдаст сообщение об ошибке и завершит работу.
ALF_ERR_POLICY_SKIPУказывает на необходимость останова средой ALF выполнения операции, вызвавшей ошибку, и продолжения работы. Если ошибка серьезна и среда ALF не может продолжить работу, она выдаст сообщение об ошибке и завершит работу.
ALF_ERR_POLICY_ABORTУказывает на необходимость останова средой ALF выполнения операций и завершения работы.
ALF_ERR_POLICY_IGNOREУказывает на то, что среда ALF проигнорирует ошибку и продолжит работу. Если ошибка серьезна и продолжение работы невозможно, среда ALF выдаст сообщение об ошибке и завершит работу.

API вычислительного задания

Следующие определения API являются функциями вычислительного задания.

alf_task_handle_t

ИМЯ

alf_task_handle_t — Структура данных — ссылка на конкретное вычислительное задание, выполняющееся на акселераторах.

ОПИСАНИЕ

Структура данных создается посредством вызова функции alf_task_create и уничтожается при вызове функций alf_task_destroy function или alf_exit. Для завершения обработки всех помещенных в очередь рабочих блоков следует пользоваться функцией alf_task_wait. С помощью функции alf_task_finalize можно также сообщить среде ALF о том, что в очередь соответствующего задания больше не будет добавляться новых рабочих блоков.

alf_task_desc_handle_t

ИМЯ

alf_task_desc_handle_t — Эта структура данных является ссылкой на дескриптор задания.

ОПИСАНИЕ

Эта структура данных используется для доступа и изменения информации дескриптора задания. Она создается посредством вызова alf_task_desc_create и уничтожается с помощью alf_task_desc_destroy.

alf_task_desc_create

ИМЯ

alf_task_desc_create — Создает дескриптор задания.

СИНОПСИС

int alf_task_desc_create (alf_handle_t alf_handle, ALF_ACCEL_TYPE_T 
accel_type, alf_task_desc_handle_t * p_desc_info_handle);

Параметры

alf_handleСсылка на среду ALF.
accel_type [IN]Тип акселератора, на котором планируется запуск заданий, соответствующих этому дескриптору.
p_task_desc_handle [OUT]Возвращает ссылку на созданный дескриптор задания. Если функция завершается с ошибкой, указатель не модифицируется.

ОПИСАНИЕ

Функция создает дескриптор задания, возвращая указатель на его ссылку. Созданная структура данных содержит всю информацию, касающуюся вычислительного задания.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

0Операция выполнена успешно
меньше 0Ошибки:
  • ALF_ERR_INVAL: неверный аргумент
  • ALF_ERR_BADF: неверная ссылка на ALF
  • ALF_ERR_NOMEM: не хватает памяти или системных ресурсов
  • ALF_ERR_PERM: в данном контексте вызов функции запрещен
  • ALF_ERR_GENERIC: внутренняя ошибка

alf_task_desc_destroy

ИМЯ

alf_task_desc_destroy — Уничтожает указанный дескриптор задания и высвобождает связанные с ним ресурсы.

СИНОПСИС

int alf_task_desc_destroy (alf_task_desc_handle_t task_desc_handle);

Параметры

task_desc_handle [IN/OUT]Ссылка на дескриптор задания. По завершении работы функции эта структура данных уничтожается.

ОПИСАНИЕ

Эта функция уничтожает указанный дескриптор задания и высвобождает связанные с ним ресурсы. Если дескриптор используется заданием, его нельзя уничтожить. При попытке уничтожения такого дескриптора функция вернет ошибку.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

0Операция выполнена успешно
меньше 0Ошибки:
  • ALF_ERR_INVAL: Неверный аргумент.
  • ALF_ERR_BADF: Неверная ссылка на дескриптор задания.
  • ALF_ERR_BUSY: Дескриптор задания используется. Перед уничтожением дескриптора необходимо уничтожить все использующие его задания.
  • ALF_ERR_PERM: В данном контексте вызов функции запрещен.
  • ALF_ERR_GENERIC: внутренняя ошибка.

alf_task_desc_ctx_entry_add

ИМЯ

alf_task_desc_ctx_entry_add — Добавляет описание элемента в контекст задания, ассоциированный с дескриптором этого задания.

СИНОПСИС

int alf_task_desc_ctx_entry_add (alf_task_desc_handle_t 
			task_desc_handle, ALF_DATA_TYPE_T data_type, unsigned int size);

Параметры

task_desc_handle [IN]Ссылка на структуру — дескриптор задания
data_type [IN]Тип данных элемента
size [IN]Количество элементов указанного типа

ОПИСАНИЕ

Функция добавляет описание элемента в контекст задания, ассоциированный с дескриптором этого задания.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

0Операция выполнена успешно
меньше 0Ошибки:
  • ALF_ERR_INVAL: Неверный аргумент
  • ALF_ERR_BADF: Неверная ссылка на дескриптор задания
  • ALF_ERR_NOSYS: Тип параметра ALF_DATA_TYPE_T не поддерживается
  • ALF_ERR_PERM: В данном контексте вызов функции запрещен
  • ALF_ERR_NOBUFS: Размер элемента превышает возможный размер буфера
  • ALF_ERR_GENERIC: внутренняя ошибка

alf_task_desc_set_int32

ИМЯ

alf_task_desc_set_int32 — Присваивает значение указанному 32-разрядному целочисленному полю дескриптора задания.

СИНОПСИС

int alf_task_desc_set_int32 (alf_task_desc_handle_t task_desc_handle, 
			ALF_TASK_DESC_FIELD_T field, unsigned int value);

Параметры

task_desc_handle [IN/OUT]Ссылка на структуру — дескриптор задания
field [IN]Поле, которому будет присвоено значение. Возможные варианты:
  • ALF_TASK_DESC_WB_PARM_CTX_BUF_SIZE: размер буфера параметров рабочего блока
  • ALF_TASK_DESC_WB_IN_BUF_SIZE: размер входного буфера рабочего блока
  • ALF_TASK_DESC_WB_OUT_BUF_SIZE: размер выходного буфера рабочего блока
  • ALF_TASK_DESC_WB_INOUT_BUF_SIZE: размер совмещенного буфера ввода-вывода рабочего блока
  • ALF_TASK_DESC_NUM_DTL_ENTRIES: максимальное число элементов списка пересылки данных
  • ALF_TASK_DESC_TSK_CTX_SIZE: размер буфера контекста задания
  • ALF_TASK_DESC_PARTITION_ON_ACCEL: признак необходимости вызова функций создания списков пересылки входных и выходных данных (alf_accel_input_dtl_prepare и alf_accel_output_dtl_prepare)
  • ALF_TASK_DESC_MAX_STACK_SIZE: максимальный размер стека
value [IN]Значение, которое следует присвоить указанному полю

ОПИСАНИЕ

Эта функция присваивает значение указанному 32-разрядному целочисленному полю дескриптора задания. По умолчанию все поля имеют значение 0.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

0Операция выполнена успешно
меньше 0Ошибки:
  • ALF_ERR_INVAL: Неверный аргумент
  • ALF_ERR_BADF: Неверная ссылка на дескриптор задания
  • ALF_ERR_NOSYS: Указанное в ALF_TASK_DESC_FIELD поле не поддерживается
  • ALF_ERR_PERM: В данном контексте вызов функции запрещен
  • ALF_ERR_RANGE: Указанное значение лежит вне допустимого диапазона
  • ALF_ERR_GENERIC: внутренняя ошибка

alf_task_desc_set_int64

ИМЯ

alf_task_desc_set_int64 — Присваивает значение указанному 64-разрядному целочисленному полю дескриптора задания.

СИНОПСИС

int alf_task_desc_set_int64(alf_task_desc_handle_t task_desc_handle, 
			ALF_TASK_DESC_FIELD_T field, unsigned long long value);

Параметры

task_desc_handle [IN/OUT]Ссылка на структуру — дескриптор задания
field [IN]Поле, которому будет присвоено значение. Возможные варианты:
  • ALF_TASK_DESC_ACCEL_LIBRARY_REF_L: Имя библиотеки, содержащей образ акселератора.
  • ALF_TASK_DESC_ACCEL_IMAGE_REF_L: Имя образа акселератора, содержащегося в библиотеке.
  • ALF_TASK_DESC_ACCEL_KERNEL_REF_L: Имя функции вычислительного ядра. Как правило — строковая константа, используя которую среда исполнения акселератора найдет соответствующую функцию.
  • ALF_TASK_DESC_ACCEL_INPUT_DTL_REF_L: Имя функции, создающей входной список пересылки данных. Как правило — строковая константа, используя которую среда исполнения акселератора найдет соответствующую функцию.
  • ALF_TASK_DESC_ACCEL_OUTUT_DTL_REF_L: Имя функции, создающей выходной список пересылки данных. Как правило — строковая константа, используя которую среда исполнения акселератора найдет соответствующую функцию.
  • ALF_TASK_DESC_ACCEL_CTX_SETUP_REF_L: Имя функции, устанавливающей контекст. Как правило — строковая константа, используя которую среда исполнения акселератора найдет соответствующую функцию.
  • ALF_TASK_DESC_ACCEL_CTX_MERGE_REF_L: Имя функции, выполняющей слияние контекстов. Как правило — строковая константа, используя которую среда исполнения акселератора найдет соответствующую функцию.
value [IN]Значение, которое следует присвоить указанному полю

ОПИСАНИЕ

Функция присваивает значение указанному 64-разрядному целочисленному полю дескриптора задания. Длина всех строковых констант не должна превышать значения ALF_STRING_TOKEN_MAX.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

0Операция выполнена успешно
меньше 0Ошибки:
  • ALF_ERR_INVAL: Неверный аргумент
  • ALF_ERR_BADF: Неверная ссылка на дескриптор задания
  • ALF_ERR_NOSYS: Поле типа ALF_TASK_DESC_FIELD не поддерживается
  • ALF_ERR_PERM: В данном контексте вызов функции запрещен
  • ALF_ERR_RANGE: Указанное значение лежит вне допустимого диапазона
  • ALF_ERR_GENERIC: внутренняя ошибка

alf_task_create

ИМЯ

alf_task_create — Создает задание и позволяет приступить к добавлению в очередь рабочих блоков.

СИНОПСИС

int alf_task_create(alf_task_desc_handle_t task_desc_handle, void* p_task_context_data,
			unsigned int num_instances, unsigned int tsk_attr, 
			unsigned int wb_dist_size, alf_task_handle_t *p_task_handle);

Параметры

task_desc_handle [IN]Ссылка на структуру данных task_desc
p_task_context_data [IN]Указатель области данных контекста задания. Структура и размер области контекста определяются функцией alf_task_desc_add_task_ctx_entry. Если контекст задания отсутствует, можно использовать значение NULL.
num_instances [IN]Число экземпляров задания, используется только при указании атрибута ALF_TASK_ATTR_SCHED_FIXED.
tsk_attr [IN]Атрибут задания. Значение формируется путем логического сложения следующих констант:
  • ALF_TASK_ATTR_SCHED_FIXED: Задание будет выполняться на указанном количестве акселераторов. По умолчанию задание может быть назначено для любого, по выбору системы, количества акселераторов, при этом количество может быть изменено в любой момент в процессе выполнения задания.
  • ALF_TASK_ATTR_WB_CYCLIC: Рабочие блоки данного задания будут распределяться между акселераторами циклически, в соответствии со значением параметра num_accelerators. По умолчанию порядок распределения рабочих блоков определяется средой ALF. Данную опцию следует использовать совместно с ALF_TASK_ATTR_SCHED_FIXED.
wb_dist_size [IN]Размер пакета распределения указанного блока (количество рабочих блоков на единицу распределения). Значение 0 (ноль) интерпретируется как 1 (единица). Дополнительная информация о распределении рабочих блоков приведена на стр. 16 в разделе «Планирование обработки рабочих блоков».
p_task_handle [OUT]Возвращает ссылку на созданное задание. В случае неуспешного завершения вызова значение указателя не изменяется.

ОПИСАНИЕ

Эта функция создает задание, после чего можно начинать помещать в очередь рабочие блоки. Задание находится в состоянии ожидания, пока не будут выполнены следующие условия: все зависимости разрешены и либо добавлен в очередь по крайней мере один рабочий блок, либо задание завершается по вызову функции alf_task_finalize.

Когда условия выполнены, задание готово к исполнению. Фактический момент запуска задания зависит от доступности акселераторов и плана запуска среды ALF. Если ресурсов акселераторов достаточно, несколько независимых заданий могут выполняться одновременно. После запуска задание выполняется до тех пор, пока не будет выполнено одно из следующих условий:

  • была выдана команда завершения задания alf_task_finalize, все помещенные в очередь рабочие блоки обработаны, выполнено слияние и обратная запись контекста задания;
  • была выдана команда отмены задания alf_task_destroy.

Примечание. Задание, получившее команду завершения, но не обрабатывавшее ни одного рабочего блока, не загружается в память акселератора. Среда ALF считает такое задание законченным, как только разрешены все зависимости.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

0Операция выполнена успешно
меньше 0Ошибки:
  • ALF_ERR_INVAL: неверный аргумент
  • ALF_ERR_BADF: неверная ссылка на ALF
  • ALF_ERR_NOMEM: нехватка памяти или системного ресурса
  • ALF_ERR_PERM: в данном контексте вызов функции запрещен
  • ALF_ERR_NOEXEC: неверный формат образа задания или описания
  • ALF_ERR_2BIG: требования задания к памяти превышают допустимое значение
  • ALF_ERR_NOSYS: требуемый атрибут задания не поддерживается
  • ALF_ERR_BADR: требуемые ресурсы акселератора недоступны
  • ALF_ERR_GENERIC: внутренняя ошибка

alf_task_finalize

ИМЯ

alf_task_finalize — Завершает очередь рабочих блоков указанного задания.

СИНОПСИС

int alf_task_finalize (alf_task_handle_t task_handle)

Параметры

task_handle [IN]Ссылка на задание, возвращаемая функцией alf_create_task

ОПИСАНИЕ

Эта функция завершает задание. После того как задание завершено, последующие вызовы функций alf_wb_create, alf_task_depends_on и alf_task_event_handler_register приводят к ошибке.

Примечание. Выдача команды на завершение задания является обязательным условием для его нормального выполнения.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

0Операция выполнена успешно
меньше 0Ошибки:
  • ALF_ERR_BADF: неверная ссылка на дескриптор задания.
  • ALF_ERR_SRCH: задание уже завершено.
  • ALF_ERR_PERM: в данном контексте вызов функции запрещен. (Например, часть созданных рабочих блоков не помещены в очередь.)
  • ALF_ERR_GENERIC: внутренняя ошибка.

alf_task_wait

ИМЯ

alf_task_wait — Ожидает, пока указанное задание не завершит обработку всех рабочих блоков на запланированных акселераторах.

СИНОПСИС

int alf_task_wait(alf_task_handle_t task_handle, int time_out);

Параметры

task_handle [IN] Ссылка на задание, возвращаемая функцией alf_create_task.
time_out [IN]Параметр ожидания, может принимать следующие значения:
  • больше 0: ожидать указанное число миллисекунд, затем вернуть ошибку «время истекло».
  • меньше 0: ожидать завершения обработки всеми акселераторами.
  • 0: вернуть результат немедленно.

ОПИСАНИЕ

Функция ожидает, пока указанное задание не закончит обработку всех рабочих блоков на всех запланированных акселераторах. Перед обращением к функции задание должно быть завершено посредством вызова alf_task_finalize. В противном случае возникает ошибка ALF_ERR_PERM. Данные, на которые ссылались рабочие блоки указанного задания, можно использовать только по завершении работы этой функции. Если приложение на основном процессоре обновляет буферы данных, на которые ссылаются рабочие блоки, или буфер контекста задания в ходе его выполнения, результат может быть непредсказуемым. Если необходимо обновить содержимое буфера, это следует сделать до обработки события ALF_TASK_EVENT_READY обработчиком, зарегистрированным посредством функции alf_task_event_handler_register.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

0Все акселераторы завершили работу.
меньше 0Ошибки:
  • ALF_ERR_INVAL: неверный аргумент.
  • ALF_ERR_BADF: неверная ссылка на задание.
  • ALF_ERR_NODATA: выполнение задание отменено (во время ожидания) или было отменено (до ожидания).
  • ALF_ERR_TIME: время истекло.
  • ALF_ERR_PERM: вызов API в данном контексте запрещен (например, задание не завершено).
  • ALF_ERR_GENERIC: внутренняя ошибка.

alf_task_query

ИМЯ

alf_task_query — запрашивает текущее состояние задания.

СИНОПСИС

int alf_task_query( alf_task_handle_t task_handle, unsigned int *p_unfinished_wbs, 
			unsigned int *p_total_wbs);

Параметры

task_handle [IN]Ссылка на задание, состояние которого требуется выяснить.
p_unfinished_wbs [OUT]Указатель на целочисленный буфер, куда будет помещено число незаконченных рабочих блоков. Если он имеет значение NULL, значение не возвращается. В случае ошибки возвращаемое значение не определено.
p_total_wbs [OUT]Указатель на целочисленный буфер, куда будет помещено общее число рабочих блоков задания. Если он имеет значение NULL, значение не возвращается. В случае ошибки возвращаемое значение не определено.

ОПИСАНИЕ

Функция запрашивает текущее состояние задания.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

больше 1 Задание ожидает своей очереди либо готово к запуску.
1 Задание выполняется.
0Задание нормально завершено.
меньше 0Ошибки:
  • ALF_ERR_INVAL: неверный аргумент.
  • ALF_ERR_BADF: неверная ссылка на задание.
  • ALF_ERR_NODATA: задание прекращено по команде пользователя.
  • ALF_ERR_GENERIC: внутренняя ошибка.

alf_task_destroy

ИМЯ

alf_task_destroy — отменяет задание.

СИНОПСИС

int alf_task_destroy(alf_task_handle_t* p_task_handle)

Параметры

task_handle [IN]Указатель на ссылку на задание, возвращаемый функцией alf_create_task API.

ОПИСАНИЕ

Функция отменяет выполнение задания, ожидающего своей очереди либо уже выполняющегося. Если имеются необработанные рабочие блоки, их выполнение прекращается. Если функция вызвана в момент выполнения задания, оно отменяется до момента завершения работы функции. Ресурсы, связанные с этим заданием, вновь используются средой ALF, либо синхронно, либо асинхронно, в зависимости от реализации среды. Функция, вызванная в отношении уже завершенного задания, не выполняет никаких действий. Если задание отменено, отменяются также все задания, имеющие от него прямую либо косвенную зависимость. ALF высвобождает ресурсы, занятые заданием, автоматически, поэтому нет необходимости запускать эту функцию для высвобождения ресурсов задания, выполнение которого планируется довести до конца.

Эту функцию следует использовать только для отмены задания в случае такой нужды.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

0Операция выполнена успешно
меньше 0Ошибки:
  • ALF_ERR_INVAL: неверный аргумент.
  • ALF_ERR_BADF: неверная ссылка на задание.
  • ALF_ERR_PERM: вызов функции запрещен в данном контексте.
  • ALF_ERR_BUSY: ресурс занят.
  • ALF_ERR_SRCH: задание с такой ссылкой уже было отменено.
  • ALF_ERR_GENERIC: внутренняя ошибка.

alf_task_depends_on

ИМЯ

alf_task_depends_on — описывает взаимоотношение двух заданий.

СИНОПСИС

int alf_task_depends_on (alf_task_handle_t task_handle_dependent, 
			alf_task_handle_t task_handle);

Параметры

task_handle_dependent [IN]Ссылка на зависимое задание
task_handle [IN]Ссылка на задание

ОПИСАНИЕ

Эта функция описывает взаимоотношение двух заданий. Задание, обозначенное как task_handle_dependent, не может быть принято к исполнению до тех пор, пока задание, обозначенное как task_handle, не завершится нормально. Поэтому нельзя вызывать данную функцию, если задание task_handle было отменено, в этом случае будет возвращена ошибка. Если задание, обозначенное как task_handle, было отменено, задание task_handle_dependent также будет отменено, поскольку его зависимость уже нельзя разрешить.

Если задание A зависит от задания B, вызов alf_task_wait (A_handle) будет ожидать также и завершения выполнения задания B. Двойная зависимость обрабатывается без выдачи каких-либо сообщений и не рассматривается как ошибка.

Дополнительная информация о зависимости заданий и ограничений относительно установки зависимостей приведена в разделе «Зависимости и планирование заданий» на стр. 13.

Примечание: эту функцию можно вызывать лишь до того, как в очередь задания task_handle_dependent был помещено первый рабочий блок и до того, как это задание завершено. Данные ограничения не касаются задания task_handle.

В случае недопустимой ситуации функция возвращает ошибку ALF_ERR_PERM.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

0Операция выполнена успешно
меньше 0Ошибки:
  • ALF_ERR_BADF: неверная ссылка на задание.
  • ALF_ERR_PERM: в данном контексте вызов функции запрещен. (Например, текущее состояние задание может не позволять установить зависимость.)
  • ALF_ERR_GENERIC: внутренняя ошибка.

alf_task_event_handler_register

ИМЯ

alf_task_event_handler_register — позволяет регистрировать и отменять регистрацию обработчика событий для указанного задания.

СИНОПСИС

int alf_task_event_handler_register (alf_task_handle_t task_handle, 
			int (*task_event_handler)( alf_task_handle_t task_handle, 
			ALF_TASK_EVENT_TYPE_T event, void* p_data), void* p_data,
			unsigned int data_size, unsigned int event_mask);

Параметры

task_handle [IN] Ссылка на задание.
task_event_handler [IN] Указатель на функцию — обработчик событий для указанного задания. Значение NULL указывает на требование отменить регистрацию имеющегося обработчика.
p_context [IN] Указатель на буфер контекста, копируемый в другой буфер, управляемый средой исполнения ALF. Он передается обработчику событий. Содержимое буфера контекста копируется только по значению. NULL означает отсутствие буфера контекста.
context_size [IN] Размер буфера контекста в байтах. Ноль означает отсутствие буфера контекста.
event_mask [IN]Результат логического сложения значений ALF_TASK_EVENT_TYPE_T.

ALF_TASK_EVENT_TYPE_T может принимать следующие значения (или комбинацию некоторых из них):

  • ALF_TASK_EVENT_FINALIZED: Задание было завершено, к нему нельзя добавлять новых рабочих блоков. Зарегистрированный обработчик событий вызывается непосредственно перед возвратом функции alf_task_finalize.
  • ALF_TASK_EVENT_READY: Задание было принято к исполнению. Зарегистрированный обработчик событий вызывается сразу, как только среда исполнения ALF определила, что для данного задания были разрешены все зависимости и что, таким образом, она сможет принять его исполнению, как только обработка события завершится.
  • ALF_TASK_EVENT_FINISHED: Обработка всех рабочих блоков данного задания была завершена. Зарегистрированный обработчик событий вызывается, как только был обработан последний рабочий блок и контекст задания записан назад в основную память.
  • ALF_TASK_EVENT_INSTANCE_START: Один новый экземпляр задания запущен на акселераторе после возврата из обработчика событий.
  • ALF_TASK_EVENT_INSTANCE_END: Один экземпляр задания завершил свою работу, и контекст был скопирован в прежнее местоположение либо объединен с другим активным экземпляром того же самого задания.
  • ALF_TASK_EVENT_DESTROY: Задание было отменено.

ОПИСАНИЕ

Эта функция позволяет зарегистрировать обработчик событий для указанного задания. Эту функцию можно вызывать только до вызова alf_task_finalize. В случае попытки зарегистрировать обработчик событий для уже завершенного задания будет возвращено сообщение об ошибке.

Если параметр task_event_handler имеет значение NULL, функция удаляет имеющийся обработчик событий. Если обработчик не был зарегистрирован, функция не совершает никаких действий.

Примечание. Если обработчик событий зарегистрирован после того, как задание начало выполняться, некоторые из событий могут быть пропущены.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

0Операция выполнена успешно
меньше 0Ошибки:
  • ALF_ERR_INVAL: неверная ссылка.
  • ALF_ERR_BADF: неверная ссылка на задание ALF.
  • ALF_ERR_PERM: в данном контексте вызов функции запрещен.
  • ALF_ERR_NOMEM: недостаточно памяти.
  • ALF_ERR_FAULT: неверный адрес буфера или обработчика ошибок (только в том случае, если возможно распознать ошибку).
  • ALF_ERR_GENERIC: внутренняя ошибка.

API рабочих блоков

Следующие функции относятся к операциям с рабочими блоками.

Структуры данных

alf_wb_handle_t

ИМЯ

alf_wb_handle_t — Эта структура данных ссылается на рабочий блок, создаваемый управляющим узлом.

alf_wb_create

ИМЯ

alf_wb_create — Создает новый рабочий блок для указанного вычислительного задания.

СИНОПСИС

int alf_wb_create(alf_task_handle_t task_handle, ALF_WORK_BLOCK_TYPE_T
work_block_type, unsigned int repeat_count, alf_wb_handle_t *p_wb_handle);

Параметры

p_wb_handle [OUT] Указатель на буфер, где будет помещен новый рабочий блок. В случае невозможности создания блока значения этого параметра не меняется.
task_handle [IN] Ссылка на вычислительное задание.
work_block_type [IN] Тип создаваемого рабочего блока. Тип может быть одним из следующих:
  • ALF_WB_SINGLE: рабочий блок однократного использования.
  • ALF_WB_MULTI: Рабочий блок многократного использования. Этот тип рабочего блока допустимо указывать только если задание создано с атрибутом ALF_PARTITION_ON_ACCEL.
repeat_count [IN] Число итераций рабочего блока многократного использования. При создании блока однократного использования этот параметр игнорируется.

ОПИСАНИЕ

Эта функция создает новый рабочий блок для указанного вычислительного задания. Рабочий блок добавляется в рабочую очередь задания, и после его обработки среда исполнения высвобождает выделенные ресурсы. Вызывающая программа может обновить содержимое рабочего блока лишь перед его добавлением в рабочую очередь. После того как блок добавлен в очередь, время его существования определяется средой ALF. За высвобождение всех ресурсов, выделенных для блока, также отвечает ALF. Данная функция может быть вызвана лишь до вызова alf_task_finalize.

После того как была вызвана функция alf_task_finalize, обращения к данной функции будут приводить к ошибке.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

0Операция выполнена успешно
меньше 0Ошибки:
  • ALF_ERR_INVAL: неверный аргумент.
  • ALF_ERR_PERM: в данном контексте операцию выполнить невозможно (например, задание уже завершено, или рабочий блок помещен в очередь).
  • ALF_ERR_BADF: неверная ссылка на задание.
  • ALF_ERR_NOMEM: недостаточно памяти.
  • ALF_ERR_GENERIC: внутренняя ошибка.

alf_wb_enqueue

ИМЯ

alf_wb_enqueue — Добавляет рабочий блок в очередь соответствующего задания.

СИНОПСИС

int alf_wb_enqueue(alf_wb_handle_t wb_handle)

Параметры

wb_handle [IN] Ссылка на рабочий блок, подлежащий помещений в очередь.

ОПИСАНИЕ

Эта функцию добавляет рабочий блок в очередь соответствующего задания. Вызывающая программа может обновить содержимое рабочего блока лишь до его помещения в очередь. После того как блок помещен в очередь, ссылка wb_handle становится недоступной.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

0Операция выполнена успешно
меньше 0Ошибки:
  • ALF_ERR_INVAL: неверный аргумент
  • ALF_ERR_BADF: неверная ссылка на задание или на рабочий блок
  • ALF_ERR_PERM: в данном контексте операция недопустима
  • ALF_ERR_BUSY: все внутренние ресурсы исчерпаны
  • ALF_ERR_GENERIC: внутренняя ошибка

alf_wb_parm_add

ИМЯ

alf_wb_parm_add — Добавляет указанный параметр к буферу параметров и контекста рабочего блока в порядке вызова функции.

СИНОПСИС

int alf_wb_parm_add(alf_wb_handle_t wb_handle, void *pdata, 
			unsigned int size_of_data, ALF_DATA_TYPE_T data_type, 
			unsigned int address_alignment)

Параметры

wb_handle [IN] Ссылка на рабочий блок.
pdata [IN] Указатель на данные, подлежащие копированию.
size_of_data [IN] Размер данных (число элементов данных).
data_type [IN] Тип данных. Данное значение требуется, если при перемещении данных необходимо преобразование порядка байтов.
address_alignment [IN] Логарифм числа, определяющего правило выравнивания адреса (0—16). Ноль обозначает выравнивание по байту, 8 — по 256 байтам.

ОПИСАНИЕ

Данная функция добавляет указанный параметр к буферу параметров и контекста рабочего блока в порядке своего вызова. Начальный адрес имеет нулевое смещение. Добавленные данные копируются во внутренний буфер параметров и контекста сразу же. Правило выравнивания относительного адреса данных задается программистом. Если рабочий блок был помещен в очередь посредством вызова функции alf_wb_enqueue, вызов данной функции приводит к ошибке.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

0Операция выполнена успешно
меньше 0Ошибки:
  • ALF_ERR_INVAL: неверный аргумент.
  • ALF_ERR_PERM: в данном контексте операция запрещена.
  • ALF_ERR_BADF: неверная ссылка на задание или на рабочий блок.
  • ALF_ERR_NOBUFS: необходимые внутренние ресурсы исчерпаны.
  • ALF_ERR_GENERIC: внутренняя ошибка.

alf_wb_dtl_begin

ИМЯ

alf_wb_dtl_begin — Помечает начало списка пересылки данных для указанного целевого буфера buffer_type.

СИНОПСИС

int alf_wb_dtl_begin (alf_wb_handle_t wb_handle, ALF_BUF_TYPE_T
buffer_type, unsigned int offset_to_accel_buf);

Параметры

wb_handle [IN] Ссылка на рабочий блок.
buffer_type [IN]Тип буфера. Возможные значения:
  • ALF_BUF_IN: ввод во входной буфер
  • ALF_BUF_OUT: вывод из выходного буфера
  • ALF_BUF_OVL_IN: ввод в совмещенный буфер
  • ALF_BUF_OVL_OUT: вывод из совмещенного буфера
  • ALF_BUF_OVL_INOUT: ввод в совмещенный буфер и вывод из него
offset_to_accel_buf [IN] Смещение целевого буфера в акселераторе.

ОПИСАНИЕ

Данная функция помечает начало списка пересылки данных для указанного буфера buffer_type. Дальнейшие вызовы alf_wb_dtl_entry_add будут относится к уже открытому списку пересылки данных. Можно создавать несколько списков пересылки данных для одного типа буфера, однако только один из них может быть открыт для добавления данных в конкретный момент времени и для конкретного рабочего блока. Вложенность списков пересылки данных не допускается.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

0Операция выполнена успешно
меньше 0Ошибки:
  • ALF_ERR_INVAL: неверный аргумент.
  • ALF_ERR_PERM: операция недопустимо.
  • ALF_ERR_BADF: неверная ссылка на рабочий блок.
  • ALF_ERR_2BIG: смещение буфера акселератора превышает его размер.
  • ALF_ERR_NOSYS: указанный тип операции ввода-вывода не поддерживается.
  • ALF_ERR_BADR: указанный буфер не определен в контексте задания.
  • ALF_ERR_GENERIC: внутренняя ошибка.
  • ALF_ERR_NOBUFS: внутренний буфер данных полностью использован.

alf_wb_dtl_entry_add

ИМЯ

alf_wb_dtl_entry_add — Добавляет элемент к входному или выходному списку пересылки данных рабочего блока однократного использования.

СИНОПСИС

int alf_wb_dtl_entry_add (alf_wb_handle_t wb_handle, 
			void* host_addr, unsigned int size, ALF_DATA_TYPE_T data_type);

Параметры

wb_handle [IN] Ссылка на рабочий блок
host_addr [IN] Указатель (EA) на данные в памяти, с которой осуществляется обмен
size [IN] Размер данных (число элементов данных)
data_type [IN] Тип данных. Это значение требуется указывать, если пересылка данных требует изменения порядка байтов в словах

ОПИСАНИЕ

Эта функция добавляет элемент в выходной или входной список пересылки данных рабочего блока однократного использования. Элемент описывает единицу данных, передаваемых в память сопряженного процессора или из нее. После того как рабочий блок помещен в очередь с помощью вызова alf_wb_enqueue, обращение к данной функции приводит к ошибке.

Если задание, соответствующее рабочему блоку, связано с набором данных, то набор данных должен содержать указанный буфер с параметрами host_addr и size. Попытка добавления в список пересылки данных элемента, описывающего буфер, находящийся вне связанного набора данных, приводит к ошибке ALF_ERR_PERM.

Эта функция может быть вызвана только в случае, если дескриптор задания, к которому относится данный рабочий блок, был создан с атрибутом ALF_TASK_DESC_PARTITION_ON_ACCEL в значении «ложь».

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

0Операция выполнена успешно
меньше 0Ошибки:
  • ALF_ERR_INVAL: неверный аргумент.
  • ALF_ERR_PERM: операция не разрешена.
  • ALF_ERR_BADF: неверная ссылка на рабочий блок.
  • ALF_ERR_2BIG: попытка добавить слишком много списков.
  • ALF_ERR_NOBUFS: объем данных превышает максимальный размер буфера.
  • ALF_ERR_FAULT: неверный адрес в основной памяти (если распознано).
  • ALF_ERR_GENERIC: внутренняя ошибка.

alf_wb_dtl_end

ИМЯ

alf_wb_dtl_end — Данная функция помечает конец списка пересылки данных.

СИНОПСИС

int alf_wb_dtl_end (alf_wb_handle_t wb_handle);

Параметры

wb_handle [IN] Ссылка на рабочий блок

ОПИСАНИЕ

Данная функция помечает конец списка пересылки данных.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

0Операция выполнена успешно
меньше 0Ошибки:
  • ALF_ERR_PERM: операция не разрешена.
  • ALF_ERR_BADF: неверная ссылка на рабочий блок.

API управления наборами данных

Следующие определения API относятся к функциям управления наборами данных.

alf_dataset_handle_t

ИМЯ

alf_dataset_handle_t — Эта структура данных является ссылкой на набор данных.

alf_dataset_create

ИМЯ

alf_dataset_create — Создает набор данных.

СИНОПСИС

int alf_dataset_create(alf_handle_t alf_handle, alf_dataset_handle_t *
p_dataset_handle);

Параметры

alf_handle[in]Ссылка на среду исполнения ALF
p_dataset_handle[out]Ссылка на набор данных

ОПИСАНИЕ

Эта функция создает набор данных.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

0Операция выполнена успешно
меньше 0Ошибки:
  • ALF_ERR_INVAL: неверный аргумент
  • ALF_ERR_BADF: неверная ссылка на ALF
  • ALF_ERR_GENERIC: внутренняя ошибка

alf_dataset_buffer_add

ИМЯ

alf_dataset_buffer_add — Добавляет буфер к набору данных.

СИНОПСИС

int alf_dataset_buffer_add(alf_dataset_handle_t dataset, 
			void *buffer, unsigned long long size, 
			ALF_CACHE_DATASET_ACCESS_MODE_T access_mode);

Параметры

buffer Адрес добавляемого буфера
size Размер буфера
access modeРежим доступа к буферу. Буфер может иметь один из следующих режимов доступа:
  • ALF_DATASET_READ_ONLY: только чтение. Рабочие блоки, ссылающиеся на данные в буфере, не могут его обновлять, как если бы он был выходным.
  • ALF_DATASET_WRITE_ONLY: только запись. Попытка рабочего блока интерпретировать содержимое буфера как входные данных приводит к непредсказуемым результатам. Если прикладная программа в ходе выполнения задания не записывает в этот буфер данные, его содержимое не определено.
  • ALF_DATASET_READ_WRITE: буфер рассчитан как на чтение, так и на запись. Рабочие блоки могут использовать его в качестве входного, выходного и совмещенного буфера. Если прикладная программа в ходе выполнения задания не записывает в этот буфер данные, его содержимое не определено.

ОПИСАНИЕ

Данная функция добавляет буфер к набору данных.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

0Операция выполнена успешно
меньше 0Ошибки:
  • ALF_ERR_INVAL: неверный аргумент
  • ALF_ERR_BADF: неверная ссылка на ALF
  • ALF_ERR_PERM: в текущем контексте данный вызов запрещен. Набор данных был связан с заданием и таким образом закрыт для дальнейших добавлений.
  • ALF_ERR_GENERIC: внутренняя ошибка

alf_dataset_destroy

ИМЯ

alf_dataset_destroy — Уничтожает указанный набор данных.

СИНОПСИС

int alf_dataset_destroy(alf_dataset_handle_t dataset_handle);

Параметры

dataset_handle Ссылка на набор данных

ОПИСАНИЕ

Данная функция уничтожает указанный набор данных. Результат ссылки на уничтоженный набор данных непредсказуем, в то же время дальнейшие ссылки на данные, содержавшиеся в данном наборе, допустимы. Набор данных невозможно уничтожить, если с ним связано выполняющееся задание.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

0Операция выполнена успешно
меньше 0Ошибки:
  • ALF_ERR_INVAL: неверный аргумент.
  • ALF_ERR_BADF: неверная ссылка на ALF.
  • ALF_ERR_PERM: в текущем контексте вызов данной функции запрещен. Набор данных был связан с заданием и таким образом закрыт для дальнейших добавлений.
  • ALF_ERR_GENERIC: внутренняя ошибка.

alf_task_dataset_associate

ИМЯ

alf_task_dataset_associate — Связывает указанное задание с набором данных.

СИНОПСИС

int alf_task_dataset_associate(alf_task_handle_t task, alf_dataset_handle_t dataset);

Параметры

dataset_handleСсылка на набор данных
task_handleСсылка на задание

ОПИСАНИЕ

Данная функция связывает указанное задание с набором данных. Ее можно использовать лишь до того, как в очередь задания был помещен первый рабочий блок. После того как задание связано с набором данных, все последовательно создаваемые и помещаемые к нему в очередь на обработку рабочие блоке не могут ссылаться на данные вне набора данных.

После того как задание связано с набором данных, вызов функции alf_data_buffer_add приводит к ошибке.

После того как задание связано с набором данных, прикладная программа на основном процессоре может использовать данные лишь после вызова и отработки функции alf_task_wait.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

0Операция выполнена успешно
меньше 0Ошибки:
  • ALF_ERR_INVAL: неверный аргумент
  • ALF_ERR_BADF: неверная ссылка на ALF
  • ALF_ERR_PERM: в текущем контексте вызов данной функции запрещен. Набор данных был связан с заданием и таким образом закрыт для дальнейших добавлений в буфер.
  • ALF_ERR_SRCH: ссылка на уже отмененное задание
  • ALF_ERR_GENERIC: внутренняя ошибка


В начало



На предыдущую страницуСтраница 3 из 7 На предыдущую страницу
    IBM в России Конфиденциальность Контакты