ailia  1.7.0.0
ailia.h
[詳解]
1 
15 #ifndef INCLUDED_AILIA
16 #define INCLUDED_AILIA
17 #include <wchar.h>
18 
19 /* 呼び出し規約 */
20 
21 #if defined(_WIN64) || defined(_M_X64) || defined(__amd64__) || defined(__x86_64__) || defined(__APPLE__) || \
22  defined(__ANDROID__) || defined(ANDROID) || defined(__linux__) || defined(NN_NINTENDO_SDK)
23 #define AILIA_API
24 #else
25 #define AILIA_API __stdcall
26 #endif
27 
28 #include "ailia_call.h"
29 
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33 /****************************************************************
34  * ライブラリ状態定義
35  **/
36 
46 #define AILIA_STATUS_SUCCESS (0)
58 #define AILIA_STATUS_INVALID_ARGUMENT (-1)
70 #define AILIA_STATUS_ERROR_FILE_API (-2)
82 #define AILIA_STATUS_INVALID_VERSION (-3)
94 #define AILIA_STATUS_BROKEN (-4)
106 #define AILIA_STATUS_MEMORY_INSUFFICIENT (-5)
118 #define AILIA_STATUS_THREAD_ERROR (-6)
130 #define AILIA_STATUS_INVALID_STATE (-7)
144 #define AILIA_STATUS_UNSUPPORTED_NET (-9)
148 #define AILIA_STATUS_UNSUPPORT_NET (-9)
162 #define AILIA_STATUS_INVALID_LAYER (-10)
174 #define AILIA_STATUS_INVALID_PARAMINFO (-11)
187 #define AILIA_STATUS_NOT_FOUND (-12)
201 #define AILIA_STATUS_GPU_UNSUPPORTED_LAYER (-13)
205 #define AILIA_STATUS_GPU_UNSUPPORT_LAYER (-13)
217 #define AILIA_STATUS_GPU_ERROR (-14)
231 #define AILIA_STATUS_UNIMPLEMENTED (-15)
245 #define AILIA_STATUS_PERMISSION_DENIED (-16)
257 #define AILIA_STATUS_EXPIRED (-17)
271 #define AILIA_STATUS_UNSETTLED_SHAPE (-18)
284 #define AILIA_STATUS_DATA_HIDDEN (-19)
285 #define AILIA_STATUS_DATA_REMOVED AILIA_STATUS_DATA_HIDDEN
298 #define AILIA_STATUS_LICENSE_NOT_FOUND (-20)
312 #define AILIA_STATUS_LICENSE_BROKEN (-21)
327 #define AILIA_STATUS_LICENSE_EXPIRED (-22)
340 #define AILIA_STATUS_NDIMENSION_SHAPE (-23)
353 #define AILIA_STATUS_ALREADY_LOADED (-24)
367 #define AILIA_STATUS_OTHER_ERROR (-128)
368 
369 /****************************************************************
370  * ネットワークオブジェクトのインスタンス
371  **/
372 
373 struct AILIANetwork;
374 
375 /****************************************************************
376  * 形状情報
377  **/
378 
379 #define AILIA_SHAPE_VERSION (1)
380 
381 typedef struct _AILIAShape {
389  unsigned int x;
397  unsigned int y;
405  unsigned int z;
413  unsigned int w;
421  unsigned int dim;
423 
424 /****************************************************************
425  * スレッド数
426  **/
427 
428 #define AILIA_MULTITHREAD_AUTO (0)
429 
430 /****************************************************************
431  * 推論実行環境自動設定
432  **/
433 
434 #define AILIA_ENVIRONMENT_ID_AUTO (-1)
435 
436 /****************************************************************
437  * 推論時の内部データ(Blob)の型
438  * ailiaGetBlobDataType で取得可能
439  **/
440 
441 #define AILIA_DATATYPE_UNDEFINED 0
442 #define AILIA_DATATYPE_FLOAT 1
443 #define AILIA_DATATYPE_UINT8 2
444 #define AILIA_DATATYPE_INT8 3
445 #define AILIA_DATATYPE_UINT16 4
446 #define AILIA_DATATYPE_INT16 5
447 #define AILIA_DATATYPE_INT32 6
448 #define AILIA_DATATYPE_INT64 7
449 #define AILIA_DATATYPE_BOOL 9
450 #define AILIA_DATATYPE_FLOAT16 10
451 #define AILIA_DATATYPE_DOUBLE 11
452 #define AILIA_DATATYPE_UINT32 12
453 #define AILIA_DATATYPE_UINT64 13
454 #define AILIA_DATATYPE_BFLOAT16 16
455 
456 /****************************************************************
457  * 推論API
458  **/
459 
488 int AILIA_API ailiaCreate(struct AILIANetwork** net, int env_id, int num_thread);
489 
509 int AILIA_API ailiaOpenStreamFileA(struct AILIANetwork* net, const char* path);
510 int AILIA_API ailiaOpenStreamFileW(struct AILIANetwork* net, const wchar_t* path);
511 
535 int AILIA_API ailiaOpenStreamEx(struct AILIANetwork* net, const void* fopen_args, ailiaFileCallback callback, int version);
536 
558 int AILIA_API ailiaOpenStreamMem(struct AILIANetwork* net, const void* buf, unsigned int buf_size);
559 
579 int AILIA_API ailiaOpenWeightFileA(struct AILIANetwork* net, const char* path);
580 int AILIA_API ailiaOpenWeightFileW(struct AILIANetwork* net, const wchar_t* path);
581 
605 int AILIA_API ailiaOpenWeightEx(struct AILIANetwork* net, const void* fopen_args, ailiaFileCallback callback, int version);
606 
628 int AILIA_API ailiaOpenWeightMem(struct AILIANetwork* net, const void* buf, unsigned int buf_size);
629 
639 void AILIA_API ailiaDestroy(struct AILIANetwork* net);
640 
672 int AILIA_API ailiaSetInputShape(struct AILIANetwork* net, const AILIAShape* shape, unsigned int version);
673 
701 int AILIA_API ailiaSetInputShapeND(struct AILIANetwork* net, const unsigned int* shape, unsigned int dim);
702 
731 int AILIA_API ailiaGetInputShape(struct AILIANetwork* net, AILIAShape* shape, unsigned int version);
732 
752 int AILIA_API ailiaGetInputDim(struct AILIANetwork* net, unsigned int* dim);
753 
779 int AILIA_API ailiaGetInputShapeND(struct AILIANetwork* net, unsigned int* shape, unsigned int dim);
780 
805 int AILIA_API ailiaGetOutputShape(struct AILIANetwork* net, AILIAShape* shape, unsigned int version);
806 
826 int AILIA_API ailiaGetOutputDim(struct AILIANetwork* net, unsigned int* dim);
827 
849 int AILIA_API ailiaGetOutputShapeND(struct AILIANetwork* net, unsigned int* shape, unsigned int dim);
850 
878 int AILIA_API
879 ailiaPredict(struct AILIANetwork* net, void* dest, unsigned int dest_size, const void* src, unsigned int src_size);
880 
881 /****************************************************************
882  * 状態取得API
883  **/
884 
909 int AILIA_API ailiaGetBlobCount(struct AILIANetwork* net, unsigned int* blob_count);
910 
938 int AILIA_API ailiaGetBlobShape(struct AILIANetwork* net, AILIAShape* shape, unsigned int blob_idx, unsigned int version);
939 
961 int AILIA_API ailiaGetBlobDim(struct AILIANetwork* net, unsigned int* dim, unsigned int blob_idx);
962 
986 int AILIA_API ailiaGetBlobShapeND(struct AILIANetwork* net, unsigned int* shape, unsigned int dim, unsigned int blob_idx);
987 
1012 int AILIA_API ailiaGetBlobData(struct AILIANetwork* net, void* dest, unsigned int dest_size, unsigned int blob_idx);
1013 
1035 int AILIA_API ailiaGetBlobDataType(struct AILIANetwork* net, int* type, unsigned int blob_idx);
1036 
1061 int AILIA_API ailiaFindBlobIndexByName(struct AILIANetwork* net, unsigned int* blob_idx, const char* name);
1062 
1087 int AILIA_API ailiaGetBlobNameLengthByIndex(struct AILIANetwork* net, const unsigned int blob_idx, unsigned int* buffer_size);
1088 
1115 int AILIA_API ailiaFindBlobNameByIndex(struct AILIANetwork* net, char* buffer, const unsigned int buffer_size, const unsigned int blob_idx);
1116 
1136 int AILIA_API ailiaGetSummaryLength(struct AILIANetwork* net, unsigned int* buffer_size);
1137 
1161 int AILIA_API ailiaSummary(struct AILIANetwork* net, char* const buffer, const unsigned int buffer_size);
1162 
1163 /****************************************************************
1164  * 複数入力指定・推論API
1165  **/
1166 
1191 int AILIA_API ailiaGetInputBlobCount(struct AILIANetwork* net, unsigned int* input_blob_count);
1192 
1216 int AILIA_API ailiaGetBlobIndexByInputIndex(struct AILIANetwork* net, unsigned int* blob_idx, unsigned int input_blob_idx);
1217 
1246 int AILIA_API ailiaSetInputBlobData(struct AILIANetwork* net, const void* src, unsigned int src_size, unsigned int blob_idx);
1247 
1279 int AILIA_API ailiaSetInputBlobShape(struct AILIANetwork* net, const AILIAShape* shape, unsigned int blob_idx, unsigned int version);
1280 
1310 int AILIA_API ailiaSetInputBlobShapeND(struct AILIANetwork* net, const unsigned* shape, const unsigned dim, unsigned int blob_idx);
1311 
1343 int AILIA_API ailiaCopyBlobData(struct AILIANetwork* dst_net, unsigned int dst_blob_idx, struct AILIANetwork* src_net, unsigned int src_blob_idx);
1344 
1366 int AILIA_API ailiaUpdate(struct AILIANetwork* net);
1367 
1387 int AILIA_API ailiaGetOutputBlobCount(struct AILIANetwork* net, unsigned int* output_blob_count);
1388 
1410 int AILIA_API ailiaGetBlobIndexByOutputIndex(struct AILIANetwork* net, unsigned int* blob_idx, unsigned int output_blob_idx);
1411 
1412 /****************************************************************
1413  * リソース解放 API
1414  **/
1415 
1436 
1437 /****************************************************************
1438  * 推論実行環境取得・指定API
1439  **/
1440 
1441 #define AILIA_ENVIRONMENT_VERSION (2)
1442 
1443 #define AILIA_ENVIRONMENT_TYPE_CPU (0)
1444 #define AILIA_ENVIRONMENT_TYPE_BLAS (1)
1445 #define AILIA_ENVIRONMENT_TYPE_GPU (2)
1446 
1447 #define AILIA_ENVIRONMENT_BACKEND_NONE (0)
1448 #define AILIA_ENVIRONMENT_BACKEND_CUDA (2)
1449 #define AILIA_ENVIRONMENT_BACKEND_MPS (3)
1450 #define AILIA_ENVIRONMENT_BACKEND_VULKAN (6)
1451 
1452 #define AILIA_ENVIRONMENT_PROPERTY_NORMAL (0)
1460 #define AILIA_ENVIRONMENT_PROPERTY_LOWPOWER (1)
1468 #define AILIA_ENVIRONMENT_PROPERTY_FP16 (2)
1469 
1470 typedef struct _AILIAEnvironment {
1478  int id;
1486  int type;
1494  const char* name;
1502  int backend;
1510  int props;
1512 
1538 int AILIA_API ailiaSetTemporaryCachePathA(const char* cache_dir);
1539 int AILIA_API ailiaSetTemporaryCachePathW(const wchar_t* cache_dir);
1540 
1554 int AILIA_API ailiaGetEnvironmentCount(unsigned int* env_count);
1555 
1573 int AILIA_API ailiaGetEnvironment(AILIAEnvironment** env, unsigned int env_idx, unsigned int version);
1574 
1592 int AILIA_API ailiaGetSelectedEnvironment(struct AILIANetwork* net, AILIAEnvironment** env, unsigned int version);
1593 
1594 /****************************************************************
1595  * メモリモードAPI
1596  **/
1597 
1605 #define AILIA_MEMORY_NO_OPTIMIZATION (0)
1613 #define AILIA_MEMORY_REDUCE_CONSTANT (1)
1621 #define AILIA_MEMORY_REDUCE_CONSTANT_WITH_INPUT_INITIALIZER (2)
1629 #define AILIA_MEMORY_REDUCE_INTERSTAGE (4)
1639 #define AILIA_MEMORY_REUSE_INTERSTAGE (8)
1661 #define AILIA_MEMORY_REDUCE_CONSTANT_WITH_FILE_MAPPED (16)
1662 
1663 #define AILIA_MEMORY_OPTIMAIZE_DEFAULT (AILIA_MEMORY_REDUCE_CONSTANT)
1664 
1694 int AILIA_API ailiaSetMemoryMode(struct AILIANetwork* net, unsigned int mode);
1695 
1696 /****************************************************************
1697  * 最適化制御API
1698  **/
1699 
1721 int AILIA_API ailiaDisableLayerFusion(struct AILIANetwork* net);
1722 
1723 /****************************************************************
1724  * プロファイルモードAPI
1725  **/
1726 
1734 #define AILIA_PROFILE_DISABLE (0x00)
1743 #define AILIA_PROFILE_AVERAGE (0x01)
1744 
1753 #define AILIA_PROFILE_NETWORK (0x02)
1754 
1778 int AILIA_API ailiaSetProfileMode(struct AILIANetwork* net, unsigned int mode);
1779 
1780 /****************************************************************
1781  * 情報取得API
1782  **/
1783 
1805 const char* AILIA_API ailiaGetStatusString(int status_code);
1806 
1828 const char* AILIA_API ailiaGetErrorDetail(struct AILIANetwork* net);
1829 
1845 const char* AILIA_API ailiaGetVersion(void);
1846 
1847 #ifdef UNICODE
1848 #define ailiaOpenStreamFile ailiaOpenStreamFileW
1849 #define ailiaOpenWeightFile ailiaOpenWeightFileW
1850 #define ailiaSetTemporaryCachePath ailiaSetTemporaryCachePathW
1851 #else
1852 #define ailiaOpenStreamFile ailiaOpenStreamFileA
1853 #define ailiaOpenWeightFile ailiaOpenWeightFileA
1854 #define ailiaSetTemporaryCachePath ailiaSetTemporaryCachePathA
1855 #endif
1856 
1857 #ifdef __cplusplus
1858 }
1859 #endif
1860 #endif /* !defined(INCLUDED_AILIA) */
int AILIA_API ailiaOpenWeightMem(struct AILIANetwork *net, const void *buf, unsigned int buf_size)
ネットワークオブジェクトに重み係数を読み込みます。(メモリから読み込み)
#define AILIA_API
Definition: ailia.h:25
int AILIA_API ailiaOpenWeightFileW(struct AILIANetwork *net, const wchar_t *path)
int AILIA_API ailiaOpenWeightFileA(struct AILIANetwork *net, const char *path)
ネットワークオブジェクトに重み係数を読み込みます。(ファイルから読み込み)
int AILIA_API ailiaOpenWeightEx(struct AILIANetwork *net, const void *fopen_args, ailiaFileCallback callback, int version)
ネットワークオブジェクトに重み係数を読み込みます。(ユーザ定義ファイルアクセスコールバック)
int AILIA_API ailiaGetSummaryLength(struct AILIANetwork *net, unsigned int *buffer_size)
ネットワークSummary用に必要なバッファのサイズを取得します。
int AILIA_API ailiaDisableLayerFusion(struct AILIANetwork *net)
推論時のレイヤー統合を無効化します
int AILIA_API ailiaGetBlobNameLengthByIndex(struct AILIANetwork *net, const unsigned int blob_idx, unsigned int *buffer_size)
内部データ(Blob)の名前の出力に必要なバッファのサイズを取得します。
const char *AILIA_API ailiaGetErrorDetail(struct AILIANetwork *net)
エラーの詳細を返します
int AILIA_API ailiaGetBlobData(struct AILIANetwork *net, void *dest, unsigned int dest_size, unsigned int blob_idx)
推論時の内部データ(Blob)を取得します。
int AILIA_API ailiaSetInputBlobShape(struct AILIANetwork *net, const AILIAShape *shape, unsigned int blob_idx, unsigned int version)
指定したBlobの形状を変更します。
int AILIA_API ailiaSetTemporaryCachePathA(const char *cache_dir)
一時キャッシュディレクトリを指定します
int AILIA_API ailiaOpenStreamFileA(struct AILIANetwork *net, const char *path)
ネットワークオブジェクトを初期化します。(ファイルから読み込み)
int AILIA_API ailiaGetBlobDim(struct AILIANetwork *net, unsigned int *dim, unsigned int blob_idx)
推論時の内部データ(Blob)の次元を取得します。
int AILIA_API ailiaGetBlobShape(struct AILIANetwork *net, AILIAShape *shape, unsigned int blob_idx, unsigned int version)
推論時の内部データ(Blob)の形状を取得します。
int AILIA_API ailiaGetBlobDataType(struct AILIANetwork *net, int *type, unsigned int blob_idx)
推論時の内部データ(Blob)の型を取得します。
struct _AILIAEnvironment AILIAEnvironment
const char *AILIA_API ailiaGetVersion(void)
ライブラリバージョンを取得します
int AILIA_API ailiaGetEnvironmentCount(unsigned int *env_count)
利用可能な計算環境(CPU, GPU)の数を取得します
int AILIA_API ailiaGetOutputBlobCount(struct AILIANetwork *net, unsigned int *output_blob_count)
出力データ(Blob)の数を取得します。
void AILIA_API ailiaDestroy(struct AILIANetwork *net)
ネットワークオブジェクトを破棄します。
int AILIA_API ailiaSetInputShape(struct AILIANetwork *net, const AILIAShape *shape, unsigned int version)
推論時の入力データの形状を変更します。
int AILIA_API ailiaCopyBlobData(struct AILIANetwork *dst_net, unsigned int dst_blob_idx, struct AILIANetwork *src_net, unsigned int src_blob_idx)
指定したBlob間でデータをコピーします
int AILIA_API ailiaOpenStreamFileW(struct AILIANetwork *net, const wchar_t *path)
int AILIA_API ailiaSetInputBlobShapeND(struct AILIANetwork *net, const unsigned *shape, const unsigned dim, unsigned int blob_idx)
指定したBlobの形状を変更します。
int AILIA_API ailiaFinalize(void)
ailiaがグローバルに確保したGPUリソース等を解放します
int AILIA_API ailiaSetTemporaryCachePathW(const wchar_t *cache_dir)
const char *AILIA_API ailiaGetStatusString(int status_code)
ステータスコードに対応する文字列を返します。
int AILIA_API ailiaGetOutputShape(struct AILIANetwork *net, AILIAShape *shape, unsigned int version)
推論時の出力データの形状を取得します。
int AILIA_API ailiaGetBlobShapeND(struct AILIANetwork *net, unsigned int *shape, unsigned int dim, unsigned int blob_idx)
推論時の内部データ(Blob)の形状を取得します。
int AILIA_API ailiaSetMemoryMode(struct AILIANetwork *net, unsigned int mode)
推論時のメモリの使用方針を設定します
int AILIA_API ailiaGetEnvironment(AILIAEnvironment **env, unsigned int env_idx, unsigned int version)
計算環境の一覧を取得します
int AILIA_API ailiaGetInputBlobCount(struct AILIANetwork *net, unsigned int *input_blob_count)
入力データ(Blob)の数を取得します。
int AILIA_API ailiaFindBlobIndexByName(struct AILIANetwork *net, unsigned int *blob_idx, const char *name)
推論時の内部データ(Blob)のインデックスを名前で探し取得します。
int AILIA_API ailiaPredict(struct AILIANetwork *net, void *dest, unsigned int dest_size, const void *src, unsigned int src_size)
推論を行い推論結果を取得します。
int AILIA_API ailiaGetOutputDim(struct AILIANetwork *net, unsigned int *dim)
推論時の出力データの次元を取得します。
struct _AILIAShape AILIAShape
int AILIA_API ailiaSetInputBlobData(struct AILIANetwork *net, const void *src, unsigned int src_size, unsigned int blob_idx)
指定したBlobに入力データを与えます。
int AILIA_API ailiaGetInputShape(struct AILIANetwork *net, AILIAShape *shape, unsigned int version)
推論時の入力データの形状を取得します。
int AILIA_API ailiaOpenStreamEx(struct AILIANetwork *net, const void *fopen_args, ailiaFileCallback callback, int version)
ネットワークオブジェクトを初期化します。(ユーザ定義ファイルアクセスコールバック)
int AILIA_API ailiaUpdate(struct AILIANetwork *net)
事前に指定した入力データで推論を行います。
int AILIA_API ailiaCreate(struct AILIANetwork **net, int env_id, int num_thread)
ネットワークオブジェクトを作成します。
int AILIA_API ailiaGetInputDim(struct AILIANetwork *net, unsigned int *dim)
推論時の入力データの次元を取得します。
int AILIA_API ailiaGetOutputShapeND(struct AILIANetwork *net, unsigned int *shape, unsigned int dim)
推論時の出力データの形状を取得します。
int AILIA_API ailiaFindBlobNameByIndex(struct AILIANetwork *net, char *buffer, const unsigned int buffer_size, const unsigned int blob_idx)
推論時の内部データ(Blob)の名前をインデックスで探し取得します。
int AILIA_API ailiaSummary(struct AILIANetwork *net, char *const buffer, const unsigned int buffer_size)
各Blobの名前と形状を表示します。
int AILIA_API ailiaOpenStreamMem(struct AILIANetwork *net, const void *buf, unsigned int buf_size)
ネットワークオブジェクトを初期化します。(メモリから読み込み)
int AILIA_API ailiaSetProfileMode(struct AILIANetwork *net, unsigned int mode)
プロファイルモードをセットします
int AILIA_API ailiaGetBlobIndexByInputIndex(struct AILIANetwork *net, unsigned int *blob_idx, unsigned int input_blob_idx)
入力データ(Blob)のインデックスを取得します
int AILIA_API ailiaGetBlobCount(struct AILIANetwork *net, unsigned int *blob_count)
推論時の内部データ(Blob)の数を取得します。
int AILIA_API ailiaGetInputShapeND(struct AILIANetwork *net, unsigned int *shape, unsigned int dim)
推論時の入力データの形状を取得します。
int AILIA_API ailiaGetBlobIndexByOutputIndex(struct AILIANetwork *net, unsigned int *blob_idx, unsigned int output_blob_idx)
出力データ(Blob)のインデックスを取得します
int AILIA_API ailiaGetSelectedEnvironment(struct AILIANetwork *net, AILIAEnvironment **env, unsigned int version)
選択された計算環境を取得します
int AILIA_API ailiaSetInputShapeND(struct AILIANetwork *net, const unsigned int *shape, unsigned int dim)
推論時の入力データの形状を変更します。
ユーザ定義コールバック
Definition: ailia.h:1470
const char * name
Definition: ailia.h:1494
int backend
Definition: ailia.h:1502
int type
Definition: ailia.h:1486
int id
Definition: ailia.h:1478
int props
Definition: ailia.h:1510
Definition: ailia.h:381
unsigned int w
Definition: ailia.h:413
unsigned int z
Definition: ailia.h:405
unsigned int y
Definition: ailia.h:397
unsigned int x
Definition: ailia.h:389
unsigned int dim
Definition: ailia.h:421
Definition: ailia_call.h:202