1# INnrtDevice
2
3
4## 概述
5
6定义了与设备相关的接口,实现设备管理和模型编译等操作。
7
8当有多个设备注册时,需要保证设备名称和设备商名称的组合全局唯一。
9
10**起始版本:** 3.2
11
12**相关模块:**[NNRt](_n_n_rt_v20.md)
13
14
15## 汇总
16
17
18### Public 成员函数
19
20| 名称 | 描述 |
21| -------- | -------- |
22| [GetDeviceName](#getdevicename) ([out] String name) | 获取设备名称  |
23| [GetVendorName](#getvendorname) ([out] String name) | 获取设备商名称  |
24| [GetDeviceType](#getdevicetype) ([out] enum [DeviceType](_n_n_rt_v20.md#devicetype) deviceType) | 获取设备类型  |
25| [GetDeviceStatus](#getdevicestatus) ([out] enum [DeviceStatus](_n_n_rt_v20.md#devicestatus) status) | 获取设备当前状态  |
26| [GetSupportedOperation](#getsupportedoperation) ([in] struct [Model](_model_v20.md) model, [out] boolean[] ops) | 查询设备对指定模型的算子支持程度  |
27| [IsFloat16PrecisionSupported](#isfloat16precisionsupported) ([out] boolean isSupported) | 查询设备是否支持以Float16精度运算Float32的模型。  |
28| [IsPerformanceModeSupported](#isperformancemodesupported) ([out] boolean isSupported) | 查询设备是否支持性能偏好设置,性能偏好的定义可以参考[PerformanceMode](_n_n_rt_v20.md#performancemode)。  |
29| [IsPrioritySupported](#isprioritysupported) ([out] boolean isSupported) | 查询设备是否支持任务优先级设置,优先级的定义可以参考[Priority](_n_n_rt_v20.md#priority)。  |
30| [IsDynamicInputSupported](#isdynamicinputsupported) ([out] boolean isSupported) | 查询设备是否支持变尺寸输入,变尺寸输入意味着同一个模型的不同次运算输入的形状可以不一样。  |
31| [PrepareModel](#preparemodel) ([in] struct [Model](_model_v20.md) model, [in] struct [ModelConfig](_model_config_v20.md) config, [out] [IPreparedModel](interface_i_prepared_model_v20.md) preparedModel) | 编译模型  |
32| [IsModelCacheSupported](#ismodelcachesupported) ([out] boolean isSupported) | 查询是否支持模型缓存功能  |
33| [PrepareModelFromModelCache](#preparemodelfrommodelcache) ([in] struct [SharedBuffer](_shared_buffer_v20.md)[] modelCache, [in] struct [ModelConfig](_model_config_v20.md) config, [out] [IPreparedModel](interface_i_prepared_model_v20.md) preparedModel) | 加载模型缓存,该模型缓存是通过ExportModelCache接口导出的。  |
34| [PrepareOfflineModel](#prepareofflinemodel) ([in] struct [SharedBuffer](_shared_buffer_v20.md)[] modelCache, [in] struct [ModelConfig](_model_config_v20.md) config, [out] [IPreparedModel](interface_i_prepared_model_v20.md) preparedModel) | 加载离线模型文件的缓存,该离线模型是由推理框架传入NNRt并由NNRt解析得到的。  |
35| [AllocateBuffer](#allocatebuffer) ([in] unsigned int length, [out] struct [SharedBuffer](_shared_buffer_v20.md) buffer) | 申请设备共享内存,以文件描述符的形式返回,共享内存主要用于推理输入输出数据的快速传递。  |
36| [ReleaseBuffer](#releasebuffer) ([in] struct [SharedBuffer](_shared_buffer_v20.md) buffer) | 释放共享内存。  |
37
38
39## 成员函数说明
40
41
42### AllocateBuffer()
43
44```
45INnrtDevice::AllocateBuffer ([in] unsigned int length, [out] struct SharedBuffer buffer )
46```
47**描述**
48
49申请设备共享内存,以文件描述符的形式返回,共享内存主要用于推理输入输出数据的快速传递。
50
51**起始版本:** 3.2
52
53**参数:**
54
55| 名称 | 描述 |
56| -------- | -------- |
57| length | 申请共享内存的大小,单位是字节。  |
58| buffer | 共享内存的信息,包含共享内存的文件描述符和空间大小,SharedBuffer定义请查看[SharedBuffer](_shared_buffer_v20.md)。 |
59
60**返回:**
61
62返回0表示成功
63
64返回非0表示失败,负数为HDF标准错误码,正数为NNRt定义的专用错误码(请查看[NNRT_ReturnCode](_n_n_rt_v20.md#nnrt_returncode))
65
66
67### GetDeviceName()
68
69```
70INnrtDevice::GetDeviceName ([out] String name)
71```
72**描述**
73
74获取设备名称
75
76**起始版本:** 3.2
77
78**参数:**
79
80| 名称 | 描述 |
81| -------- | -------- |
82| name | 设备名称 |
83
84**返回:**
85
86返回0表示成功
87
88返回非0表示失败,负数为HDF标准错误码,正数为NNRt定义的专用错误码(请查看[NNRT_ReturnCode](_n_n_rt_v20.md#nnrt_returncode))
89
90
91### GetDeviceStatus()
92
93```
94INnrtDevice::GetDeviceStatus ([out] enum DeviceStatus status)
95```
96**描述**
97
98获取设备当前状态
99
100**起始版本:** 3.2
101
102**参数:**
103
104| 名称 | 描述 |
105| -------- | -------- |
106| status | 设备当前状态,DeviceStatus枚举定义了可选的设备状态,详细定义请查看[DeviceStatus](_n_n_rt_v20.md#devicestatus)。 |
107
108**返回:**
109
110返回0表示成功
111
112返回非0表示失败,负数为HDF标准错误码,正数为NNRt定义的专用错误码(请查看[NNRT_ReturnCode](_n_n_rt_v20.md#nnrt_returncode))
113
114
115### GetDeviceType()
116
117```
118INnrtDevice::GetDeviceType ([out] enum DeviceType deviceType)
119```
120**描述**
121
122获取设备类型
123
124**起始版本:** 3.2
125
126**参数:**
127
128| 名称 | 描述 |
129| -------- | -------- |
130| deviceType | 设备类型,DeviceType枚举定义了可选的设备类型,详细定义请查看[DeviceType](_n_n_rt_v20.md#devicetype)。 |
131
132**返回:**
133
134返回0表示成功
135
136返回非0表示失败,负数为HDF标准错误码,正数为NNRt定义的专用错误码(请查看[NNRT_ReturnCode](_n_n_rt_v20.md#nnrt_returncode))
137
138
139### GetSupportedOperation()
140
141```
142INnrtDevice::GetSupportedOperation ([in] struct Model model, [out] boolean[] ops )
143```
144**描述**
145
146查询设备对指定模型的算子支持程度
147
148**起始版本:** 3.2
149
150**参数:**
151
152| 名称 | 描述 |
153| -------- | -------- |
154| model | AI模型,模型结构由Model定义,详细定义请查看[Model](_model_v20.md)。  |
155| ops | 算子是否支持列表,算子支持列表的顺序与在model中的顺序要一致。 |
156
157**返回:**
158
159返回0表示成功
160
161返回非0表示失败,负数为HDF标准错误码,正数为NNRt定义的专用错误码(请查看[NNRT_ReturnCode](_n_n_rt_v20.md#nnrt_returncode))
162
163
164### GetVendorName()
165
166```
167INnrtDevice::GetVendorName ([out] String name)
168```
169**描述**
170
171获取设备商名称
172
173**起始版本:** 3.2
174
175**参数:**
176
177| 名称 | 描述 |
178| -------- | -------- |
179| name | 设备商名称 |
180
181**返回:**
182
183返回0表示成功
184
185返回非0表示失败,负数为HDF标准错误码,正数为NNRt定义的专用错误码(请查看[NNRT_ReturnCode](_n_n_rt_v20.md#nnrt_returncode))
186
187
188### IsDynamicInputSupported()
189
190```
191INnrtDevice::IsDynamicInputSupported ([out] boolean isSupported)
192```
193**描述**
194
195查询设备是否支持变尺寸输入,变尺寸输入意味着同一个模型的不同次运算输入的形状可以不一样。
196
197如果支持变尺寸输入,模型输入Tensor的形状上用-1标记该维度是否可变。
198
199**起始版本:** 3.2
200
201**参数:**
202
203| 名称 | 描述 |
204| -------- | -------- |
205| isSupported | 是否支持变尺寸输入。 |
206
207**返回:**
208
209返回0表示成功
210
211返回非0表示失败,负数为HDF标准错误码,正数为NNRt定义的专用错误码(请查看[NNRT_ReturnCode](_n_n_rt_v20.md#nnrt_returncode))
212
213
214### IsFloat16PrecisionSupported()
215
216```
217INnrtDevice::IsFloat16PrecisionSupported ([out] boolean isSupported)
218```
219**描述**
220
221查询设备是否支持以Float16精度运算Float32的模型。
222
223**起始版本:** 3.2
224
225**参数:**
226
227| 名称 | 描述 |
228| -------- | -------- |
229| isSupported | 是否支持Float16精度。 |
230
231**返回:**
232
233返回0表示成功
234
235返回非0表示失败,负数为HDF标准错误码,正数为NNRt定义的专用错误码(请查看[NNRT_ReturnCode](_n_n_rt_v20.md#nnrt_returncode))
236
237
238### IsModelCacheSupported()
239
240```
241INnrtDevice::IsModelCacheSupported ([out] boolean isSupported)
242```
243**描述**
244
245查询是否支持模型缓存功能
246
247若支持,则需要实现PrepareModelFromModelCache和ExportModelCache两个接口。
248
249**起始版本:** 3.2
250
251**参数:**
252
253| 名称 | 描述 |
254| -------- | -------- |
255| isSupported | 是否支持模型缓存。 |
256
257**返回:**
258
259返回0表示成功
260
261返回非0表示失败,负数为HDF标准错误码,正数为NNRt定义的专用错误码(请查看[NNRT_ReturnCode](_n_n_rt_v20.md#nnrt_returncode))
262
263
264### IsPerformanceModeSupported()
265
266```
267INnrtDevice::IsPerformanceModeSupported ([out] boolean isSupported)
268```
269**描述**
270
271查询设备是否支持性能偏好设置,性能偏好的定义可以参考[PerformanceMode](_n_n_rt_v20.md#performancemode)。
272
273**起始版本:** 3.2
274
275**参数:**
276
277| 名称 | 描述 |
278| -------- | -------- |
279| isSupported | 是否支持性能偏好设置。 |
280
281**返回:**
282
283返回0表示成功
284
285返回非0表示失败,负数为HDF标准错误码,正数为NNRt定义的专用错误码(请查看[NNRT_ReturnCode](_n_n_rt_v20.md#nnrt_returncode))
286
287
288### IsPrioritySupported()
289
290```
291INnrtDevice::IsPrioritySupported ([out] boolean isSupported)
292```
293**描述**
294
295查询设备是否支持任务优先级设置,优先级的定义可以参考[Priority](_n_n_rt_v20.md#priority)。
296
297**起始版本:** 3.2
298
299**参数:**
300
301| 名称 | 描述 |
302| -------- | -------- |
303| isSupported | 是否支持性能偏好设置。 |
304
305**返回:**
306
307返回0表示成功
308
309返回非0表示失败,负数为HDF标准错误码,正数为NNRt定义的专用错误码(请查看[NNRT_ReturnCode](_n_n_rt_v20.md#nnrt_returncode))
310
311
312### PrepareModel()
313
314```
315INnrtDevice::PrepareModel ([in] struct Model model, [in] struct ModelConfig config, [out] IPreparedModel preparedModel )
316```
317**描述**
318
319编译模型
320
321如果是变尺寸输入模型,则模型输入的维度信息中至少有一个是-1。
322
323**起始版本:** 3.2
324
325**参数:**
326
327| 名称 | 描述 |
328| -------- | -------- |
329| model | 需要编译的模型,Model定义请查看[Model](_model_v20.md)。  |
330| config | 编译模型的配置,ModelConfig定义请查看[ModelConfig](_model_config_v20.md)。  |
331| preparedModel | 编译好的模型对象,用于后续的运算,IPreparedModel定义请查看[IPreparedModel](interface_i_prepared_model_v20.md)。 |
332
333**返回:**
334
335返回0表示成功
336
337返回非0表示失败,负数为HDF标准错误码,正数为NNRt定义的专用错误码(请查看[NNRT_ReturnCode](_n_n_rt_v20.md#nnrt_returncode))
338
339
340### PrepareModelFromModelCache()
341
342```
343INnrtDevice::PrepareModelFromModelCache ([in] struct SharedBuffer[] modelCache, [in] struct ModelConfig config, [out] IPreparedModel preparedModel )
344```
345**描述**
346
347加载模型缓存,该模型缓存是通过ExportModelCache接口导出的。
348
349**起始版本:** 3.2
350
351**参数:**
352
353| 名称 | 描述 |
354| -------- | -------- |
355| modelCache | 模型缓存文件的数组,数组顺序与导出时的数组顺序一致,数组元素类型请查看SharedBuffer定义[SharedBuffer](_shared_buffer_v20.md)。  |
356| config | 加载模型缓存的配置,配置参数的详细定义请参考[ModelConfig](_model_config_v20.md)。  |
357| preparedModel | 加载缓存得到的模型对象,用于后续的运算,IPreparedModel定义请查看[IPreparedModel](interface_i_prepared_model_v20.md)。 |
358
359**返回:**
360
361返回0表示成功
362
363返回非0表示失败,负数为HDF标准错误码,正数为NNRt定义的专用错误码(请查看[NNRT_ReturnCode](_n_n_rt_v20.md#nnrt_returncode))
364
365
366### PrepareOfflineModel()
367
368```
369INnrtDevice::PrepareOfflineModel ([in] struct SharedBuffer[] modelCache, [in] struct ModelConfig config, [out] IPreparedModel preparedModel )
370```
371**描述**
372
373加载离线模型文件的缓存,该离线模型是由推理框架传入NNRt并由NNRt解析得到的。
374
375**起始版本:** 3.2
376
377**参数:**
378
379| 名称 | 描述 |
380| -------- | -------- |
381| modelCache | 离线模型文件缓存的数组,元素顺序与用户传入的离线模型格式有关,元素类型请查看SharedBuffer定义[SharedBuffer](_shared_buffer_v20.md)。  |
382| config | 加载离线模型文件缓存的配置,配置参数的详细定义请参考[ModelConfig](_model_config_v20.md)。  |
383| preparedModel | 加载离线模型文件缓存得到的模型对象,用于后续的运算,IPreparedModel定义请查看[IPreparedModel](interface_i_prepared_model_v20.md)。 |
384
385**返回:**
386
387返回0表示成功
388
389返回非0表示失败,负数为HDF标准错误码,正数为NNRt定义的专用错误码(请查看[NNRT_ReturnCode](_n_n_rt_v20.md#nnrt_returncode))
390
391
392### ReleaseBuffer()
393
394```
395INnrtDevice::ReleaseBuffer ([in] struct SharedBuffer buffer)
396```
397**描述**
398
399释放共享内存。
400
401**起始版本:** 3.2
402
403**参数:**
404
405| 名称 | 描述 |
406| -------- | -------- |
407| buffer | 共享内存的信息,包含共享内存的文件描述符和空间大小,SharedBuffer定义请查看[SharedBuffer](_shared_buffer_v20.md)。 |
408
409**返回:**
410
411返回0表示成功
412
413返回非0表示失败,负数为HDF标准错误码,正数为NNRt定义的专用错误码(请查看[NNRT_ReturnCode](_n_n_rt_v20.md#nnrt_returncode))
414