Платформа и источник
Статья подготовлена по PDF производителя RKNN V2.5.0 и относится только к перечисленным в нём чипам и интерфейсам. Для платы ArmSoM сначала проверьте SoC, драйвер NPU, Toolkit/Runtime, SDK/BSP и версию ядра. Проверки на оборудовании ArmSoM не проводились; примеры и измерения оригинала не являются тестами ArmSoM.
Навигация по серии
- Платформы, заголовки и компоновка
- Владение памятью и общий/zero-copy процессы
- Устройство, контекст и флаги инициализации
- Запросы модели, тензоров и динамических форм
- Вход, выполнение, выход и динамические формы
- Тензоры, выделение памяти и синхронизация
- Матричное умножение и динамические формы
- Регистрация и атрибуты пользовательских операторов
- Коды состояния, тензоры, память и расширения
- Структуры матричного умножения
- Структуры операторов и миграция устаревших API
6.4. Структуры пользовательских операторов
rknn_gpu_op_context
rknn_gpu_op_context содержит контекст пользовательского оператора, выполняемого указанной GPU. Определение структуры приведено в таблице:
| Поле | Тип | Значение |
|---|---|---|
| cl_context | void* | Объект OpenCL cl_context; при использовании выполните явное приведение к cl_context. |
| cl_command_queue | void* | Объект OpenCL cl_command_queue; при использовании выполните явное приведение к cl_command_queue. |
| cl_kernel | void* | Объект OpenCL cl_kernel; при использовании выполните явное приведение к cl_kernel. |
rknn_custom_op_context
rknn_custom_op_context содержит контекст пользовательского оператора. Определение структуры приведено в таблице:
| Поле | Тип | Значение |
|---|---|---|
| target | rknn_target_type | Устройство исполнения пользовательских операторов: RKNN_TARGET_TYPE_CPU: CPU; RKNN_TARGET_TYPE_CPU: GPU. Повтор CPU для GPU присутствует в источнике и требует проверки. |
| internal_ctx | rknn_custom_op_interal_context | Внутренний контекст оператора. |
| gpu_ctx | rknn_gpu_op_context | Контекст OpenCL пользовательского оператора. При выполнении на GPU обратный вызов получает из этой структуры объекты OpenCL, например cl_context. |
| priv_data | void* | Указатели данных, управление которыми оставлено разработчику. |
rknn_custom_op_tensor
rknn_custom_op_tensor описывает входной/выходной тензор пользовательского оператора. Определение структуры приведено в таблице:
| Поле | Тип | Значение |
|---|---|---|
| attr | rknn_tensor_attr | Имя, форма, размер и другие сведения о тензоре. |
| mem | rknn_tensor_mem | Адрес памяти тензора, fd, смещение действительных данных и другие сведения. |
rknn_custom_op_attr
rknn_custom_op_attr описывает параметры или атрибуты пользовательского оператора. Определение структуры приведено в таблице:
| Поле | Тип | Значение |
|---|---|---|
| name | char[] | Имя параметра пользовательского оператора. |
| dtype | rknn_tensor_type | Тип данных каждого элемента. |
| n_elems | uint32_t | Число элементов. |
| data | void* | Виртуальный адрес области памяти данных параметра. |
rknn_custom_op
rknn_custom_op содержит регистрационные сведения пользовательского оператора. Определение структуры приведено в таблице:
| Поле | Тип | Значение |
|---|---|---|
| version | uint32_t | Номер версии пользовательского оператора. |
| target | rknn_target_type | Тип вычислительного бэкенда оператора. |
| op_type | char[] | Тип пользовательского оператора. |
| cl_kernel_name | char[] | Имя функции ядра OpenCL. |
| cl_kernel_source | char* | Ресурс OpenCL: при cl_source_size=0 — абсолютный путь к файлу; при cl_source_size>0 — строка кода функции ядра. |
| cl_source_size | uint64_t | Если cl_kernel_source — строка, её длина; если путь к файлу — 0. |
| cl_build_options | char[] | Параметры компиляции ядра OpenCL. |
| init | int ()(rknn_custom_op_context op_ctx, rknn_custom_op_tensor* inputs, uint32_t n_inputs, rknn_custom_op_tensor* outputs, uint32_t n_outputs); |
Указатель обратного вызова инициализации оператора. Вызывается один раз при регистрации. Если не нужен, допускается NULL. |
| prepare | int ()(rknn_custom_op_context op_ctx, rknn_custom_op_tensor* inputs, uint32_t n_inputs, rknn_custom_op_tensor* outputs, uint32_t n_outputs); |
Указатель обратного вызова предварительной обработки. Вызывается один раз при rknn_run. Если не нужен, допускается NULL. |
| compute | int ()(rknn_custom_op_context op_ctx, rknn_custom_op_tensor* inputs, uint32_t n_inputs, rknn_custom_op_tensor* outputs, uint32_t n_outputs); |
Указатель обратного вызова вычисления пользовательского оператора. Вызывается один раз при rknn_run. NULL недопустим. |
| compute_native | int ()(rknn_custom_op_context op_ctx, rknn_custom_op_tensor* inputs, uint32_t n_inputs, rknn_custom_op_tensor* outputs, uint32_t n_outputs); |
Указатель высокопроизводительного вычислительного обратного вызова. Отличается от compute форматом входных и выходных тензоров. Пока не поддерживается; задаётся NULL. |
| destroy | int ()(rknn_custom_op_context op_ctx); |
Указатель обратного вызова освобождения ресурсов. Вызывается один раз при rknn_destroy. |
7. Изменения API, устаревшие интерфейсы и миграция
Добавления, изменения и устаревание интерфейсов по версиям перечислены в истории редакций оригинального справочника.
В V2.5.0 следующие интерфейсы устарели. Используйте указанные замены:
| Устаревший интерфейс | Замена |
|---|---|
| rknn_set_input_shape | rknn_set_input_shapes |
| rknn_matmul_create_dyn_shape | rknn_matmul_create_dynamic_shape |
Подробнее: rknn_set_input_shape (устаревший) в 5.3 «Выполнение инференса» и rknn_matmul_create_dyn_shape (устаревший) в 5.5 «Матричное умножение».
Источник и редакционные примечания
Технические главы разделены по назначению. Код, идентификаторы и параметры сохранены. Китайская версия следует китайскому оригиналу; английская, русская и немецкая — английскому. В главы без иллюстраций вымышленные изображения не добавлены.
Оговорки оригинала: номера глав и примерные журналы сохранены; ранние версии SDK в журналах не являются версией этой статьи. Runtime переходит от главы 3 к 5 и повторяет номера запросов. Таблица rknn_init называет extend отключённым, но далее описывает user_key и общие веса. Текст о нативном динамическом выходе указывает RKNN_QUERY_CURRENT_OUTPUT_ATTR, пример — RKNN_QUERY_CURRENT_NATIVE_OUTPUT_ATTR. Некоторые описания native NHWC/NC1HWC2 смешивают вход и выход. Проверяйте фактические заголовки V2.5.0 и целевой SDK: поведение не подтверждено тестами. Ссылка RK2118 в оригинале называется RKNN3_RK2118_Quick_Start.pdf, а в текущем каталоге находится руководство RKNN2.
