Rockchip · AI & Linux Hub

KI-Inferenz

RKNN Runtime C API V2.5.0 — Strukturen zur Matrixmultiplikation

RKNN Runtime C API V2.5.0 — Strukturen zur Matrixmultiplikation | Vollständige Parameter, Beispiele und Plattformgrenzen

· ArmSoM · 5 Min. Lesezeit

Plattform und Quelle

Dieser Artikel basiert auf dem RKNN-V2.5.0-PDF des Herstellers und gilt nur für die dort genannten Chips und Schnittstellen. Bei ArmSoM-Boards zuerst SoC, NPU-Treiber, Toolkit/Runtime, SDK/BSP und Kernelversion prüfen. Eine ArmSoM-Hardwareprüfung wurde nicht durchgeführt; Beispiele und Messwerte stammen aus der Quelle, nicht aus ArmSoM-Tests.

Seriennavigation

6.3. Strukturen zur Matrixmultiplikation

rknn_matmul_info

rknn_matmul_info beschreibt die Spezifikation der Matrixmultiplikation: Dimensionen, Datentyp und Speicherlayout der Ein- und Ausgabematrizen. Die Strukturdefinition folgt in der Tabelle:

Feld Typ Bedeutung
M int32_t Zeilenanzahl von A.
K int32_t Spaltenanzahl von A.
N int32_t Spaltenanzahl von B.
type rknn_matmul_type Datentypen der Ein- und Ausgabematrizen:
RKNN_FLOAT16_MM_FLOAT16_TO_FLOAT32: A/B — float16, C — float;
RKNN_INT8_MM_INT8_TO_INT32: A/B — int8, C — int32;
RKNN_INT8_MM_INT8_TO_INT8: A/B/C — int8;
RKNN_FLOAT16_MM_FLOAT16_TO_FLOAT16: A/B/C — float16;
RKNN_FLOAT16_MM_INT8_TO_FLOAT32: A — float16, B — int8, C — float;
RKNN_FLOAT16_MM_INT8_TO_FLOAT16: A — float16, B — int8, C — float16;
RKNN_FLOAT16_MM_INT4_TO_FLOAT32: A — float16, B — int4, C — float;
RKNN_FLOAT16_MM_INT4_TO_FLOAT16: A — float16, B — int4, C — float16;
RKNN_INT8_MM_INT8_TO_FLOAT32: A/B — int8, C — float;
RKNN_INT4_MM_INT4_TO_INT16: A/B — int4, C — int16;
RKNN_INT8_MM_INT4_TO_INT32: A — int8, B — int4, C — int32.
B_layout int16_t Speicherlayout von B. 0 bezeichnet [K,N]. RKNN_MM_LAYOUT_NORM — ursprüngliche Form KxN; RKNN_MM_LAYOUT_NATIVE — leistungsoptimiertes Layout; RKNN_MM_LAYOUT_TP_NORM — transponierte Form NxK.
B_quant_type int16_t Quantisierung von B: RKNN_QUANT_TYPE_PER_LAYER_SYM — symmetrisch pro Schicht; RKNN_QUANT_TYPE_PER_LAYER_ASYM — asymmetrisch pro Schicht; RKNN_QUANT_TYPE_PER_CHANNEL_SYM — symmetrisch pro Kanal; RKNN_QUANT_TYPE_PER_CHANNEL_ASYM — asymmetrisch pro Kanal; RKNN_QUANT_TYPE_PER_GROUP_SYM — symmetrisch pro Gruppe; RKNN_QUANT_TYPE_PER_GROUP_ASYM — asymmetrisch pro Gruppe.
AC_layout int16_t Datenlayout von A und C: RKNN_MM_LAYOUT_NORM — ursprüngliche Formen; RKNN_MM_LAYOUT_NATIVE — leistungsoptimierte Formen.
AC_quant_type int16_t Quantisierung von A und C: RKNN_QUANT_TYPE_PER_LAYER_SYM — symmetrisch pro Schicht; RKNN_QUANT_TYPE_PER_LAYER_ASYM — asymmetrisch pro Schicht.
iommu_domain_id int32_t Index der IOMMU-Adressraumdomäne des Matrixkontexts. Adressraum und Kontext sind einander eindeutig zugeordnet; jeder Adressraum umfasst 4 GB. Der Parameter wird hauptsächlich für große A/B/C verwendet, wenn nach mehr als 4 GB NPU-Speicherzuweisung in einer Domäne ein Wechsel in eine andere nötig ist.
group_size int16_t Elementanzahl je Gruppe; nur bei aktivierter Gruppenquantisierung wirksam.
reserved int8_t[] Reserviertes Feld.

rknn_matmul_tensor_attr

rknn_matmul_tensor_attr beschreibt die Tensorattribute jeder Matrix: Name, Form, Größe und Datentyp. Die Strukturdefinition folgt in der Tabelle:

Feld Typ Bedeutung
name char[] Matrixname.
n_dims uint32_t Anzahl der Matrixdimensionen.
dims uint32_t[] Matrixform.
size uint32_t Matrixgröße.
type rknn_tensor_type Matrixdatentyp.

rknn_matmul_io_attr

rknn_matmul_io_attr beschreibt alle Ein- und Ausgabetensoren der Matrixoperation, einschließlich der Attribute von A, B und C. Die Strukturdefinition folgt in der Tabelle:

Feld Typ Bedeutung
A rknn_matmul_tensor_attr Tensorattribute der Matrix A.
B rknn_matmul_tensor_attr Tensorattribute der Matrix B.
C rknn_matmul_tensor_attr Tensorattribute der Matrix C.

rknn_quant_params

rknn_quant_params beschreibt die Quantisierungsparameter einer Matrix: Name sowie Zeiger und Längen der Arrays scale und zero_point. name kennzeichnet die Matrix und lässt sich aus der bei Kontextinitialisierung erhaltenen rknn_matmul_io_attr entnehmen. Die Strukturdefinition folgt in der Tabelle:

Feld Typ Bedeutung
name char[] Matrixname.
scale float* Zeiger auf das scale-Array der Matrix.
scale_len int32_t Länge des scale-Arrays der Matrix.
zp int32_t* Zeiger auf das zero_point-Array der Matrix.
zp_len int32_t Länge des zero_point-Arrays der Matrix.

rknn_matmul_shape

rknn_matmul_shape beschreibt M, K und N einer bestimmten Matrixmultiplikationsform. Bei Initialisierung eines Kontexts mit dynamischen Formen sind die Formenanzahl und ein rknn_matmul_shape-Array sämtlicher Eingabeformen anzugeben. Die Strukturdefinition folgt in der Tabelle:

Feld Typ Bedeutung
M int32_t Zeilenanzahl von A.
K int32_t Spaltenanzahl von A.
N int32_t Spaltenanzahl von C.

Quelle und redaktionelle Hinweise

Technische Kapitel sind nach Anwendung aufgeteilt. Code, Bezeichner und Parameter bleiben erhalten. Chinesisch folgt der chinesischen Quelle, Englisch, Russisch und Deutsch der englischen. Für Kapitel ohne Abbildungen wurden keine erfundenen Bilder hinzugefügt.

Hinweise zur Quelle: Kapitelnummern und Beispielausgaben bleiben erhalten; ältere SDK-Versionen in Protokollen sind nicht die aktuelle Dokumentversion. Die Runtime-Quelle springt von Kapitel 3 zu 5 und wiederholt Abfragenummern. Die rknn_init-Tabelle bezeichnet extend als deaktiviert, spätere Typen beschreiben jedoch user_key und gemeinsame Gewichte. Der Text zur nativen dynamischen Ausgabe nennt RKNN_QUERY_CURRENT_OUTPUT_ATTR, das Beispiel RKNN_QUERY_CURRENT_NATIVE_OUTPUT_ATTR. Einige native NHWC/NC1HWC2-Beschreibungen verwechseln Ein- und Ausgabe. Mit tatsächlichen V2.5.0-Headern und Ziel-SDK abgleichen; das Verhalten wurde nicht getestet. Der RK2118-Verweis heißt im Original RKNN3_RK2118_Quick_Start.pdf, im aktuellen Verzeichnis liegt eine RKNN2-Kurzanleitung.

RKNN-Toolkit2 · ArmSoM documentation

Dieses Thema entdecken → · Lernpfade →