2 #ifndef _NNDEPLOY_DEVICE_DEVICE_H_
3 #define _NNDEPLOY_DEVICE_DEVICE_H_
30 bool is_support_fp16_ =
false;
61 std::string library_path =
"") = 0;
70 std::string library_path =
"") = 0;
91 std::string library_path =
"") = 0;
125 std::shared_ptr<Architecture>> &
135 template <
typename T>
144 if (architecture_map.find(type) == architecture_map.end()) {
145 architecture_map[type] = std::shared_ptr<T>(
new T(type));
224 Stream *stream =
nullptr) = 0;
235 Stream *stream =
nullptr) = 0;
246 Stream *stream =
nullptr) = 0;
256 Stream *stream =
nullptr) = 0;
266 Stream *stream =
nullptr) = 0;
276 Stream *stream =
nullptr) = 0;
359 : device_type_(device_type) {};
498 template <
typename T>
500 return static_cast<T *
>(
this);
504 bool is_external_ =
false;
591 template <
typename T>
593 return static_cast<T *
>(
this);
641 std::string library_path);
650 std::string library_path);
704 Event **events,
size_t count);
714 Event **events,
size_t count);
base::Status insertDevice(int device_id, Device *device)
插入设备(供Python使用)
virtual ~Architecture()
析构函数
std::map< int, Device * > devices_
设备映射表
virtual base::Status enableDevice(int device_id=0, std::string library_path="")=0
启用设备
virtual std::vector< DeviceInfo > getDeviceInfo(std::string library_path="")=0
获取设备信息列表
virtual base::Status disableDevice()
禁用设备
virtual base::Status checkDevice(int device_id=0, std::string library_path="")=0
检查设备是否可用
base::DeviceTypeCode getDeviceTypeCode() const
获取设备类型代码
Architecture(base::DeviceTypeCode device_type_code)
构造函数
virtual Device * getDevice(int device_id)=0
获取指定ID的设备
virtual base::Status createEvents(Event **events, size_t count)
批量创建事件
virtual void * allocatePinned(const BufferDesc &desc)
分配锁页内存
virtual base::DataFormat getDataFormatByShape(const base::IntVector &shape)
根据形状获取数据格式
virtual base::Status upload(Buffer *src, Buffer *dst, Stream *stream=nullptr)=0
缓冲区上传
virtual void * allocate(size_t size)=0
分配内存
virtual base::Status deinit()=0
反初始化设备
virtual base::Status destroyEvents(Event **events, size_t count)
批量销毁事件
virtual base::Status bindThread()
绑定线程
virtual base::Status destroyEvent(Event *event)
销毁事件
virtual void deallocatePinned(void *ptr)
释放锁页内存
virtual Event * createEvent()
创建事件
virtual void * getContext()
获取设备上下文
virtual base::Status copy(Buffer *src, Buffer *dst, Stream *stream=nullptr)=0
缓冲区拷贝
virtual base::Status init()=0
初始化设备
virtual Stream * createStream()
创建流
base::DeviceType getDeviceType() const
获取设备类型
virtual base::Status download(void *src, void *dst, size_t size, Stream *stream=nullptr)=0
从设备下载数据到主机
base::DeviceType device_type_
设备类型
virtual base::Status copy(void *src, void *dst, size_t size, Stream *stream=nullptr)=0
内存拷贝
Device(base::DeviceType device_type, std::string library_path="")
构造函数
virtual base::Status destroyStream(Stream *stream)
销毁流
virtual base::Status upload(void *src, void *dst, size_t size, Stream *stream=nullptr)=0
从主机上传数据到设备
virtual void * allocate(const BufferDesc &desc)=0
分配内存
virtual void deallocate(void *ptr)=0
释放内存
virtual void * allocatePinned(size_t size)
分配锁页内存
virtual BufferDesc toBufferDesc(const TensorDesc &desc, const base::IntVector &config)=0
转换为缓冲区描述符
virtual base::Status download(Buffer *src, Buffer *dst, Stream *stream=nullptr)=0
缓冲区下载
virtual Stream * createStream(void *stream)
从现有流创建流对象
virtual bool queryDone()
查询事件是否已完成
virtual base::Status synchronize()
同步等待事件完成
Event(Device *device)
构造函数
virtual void * getNativeEvent()
获取原生事件对象
virtual Device * getDevice() const
获取关联设备
virtual base::DeviceType getDeviceType() const
获取设备类型
virtual base::Status synchronize()
同步流
virtual void * getNativeStream()
获取原生流对象
virtual base::Status onExecutionContextTeardown()
执行上下文清理
virtual base::Status waitEvent(Event *event)
等待事件完成
Stream(Device *device, void *stream)
构造函数(从现有流)
virtual Device * getDevice() const
获取关联设备
virtual base::Status recordEvent(Event *event)
在流中记录事件
virtual base::Status onExecutionContextSetup()
执行上下文设置
Stream(Device *device)
构造函数
virtual base::DeviceType getDeviceType() const
获取设备类型
TypeArchitectureRegister(base::DeviceTypeCode type)
构造函数,自动注册架构
#define NNDEPLOY_CC_API
api
std::vector< int > IntVector
base::Status destroyStream(Stream *stream)
销毁流
Architecture * getArchitecture(base::DeviceTypeCode type)
获取指定类型的架构
base::DeviceType getDefaultHostDeviceType()
获取默认主机设备类型
bool isHostDeviceType(base::DeviceType device_type)
判断是否为主机设备类型
base::Status enableDevice(base::DeviceType device_type, std::string library_path)
启用设备
base::Status disableDevice()
禁用设备
base::Status createEvents(base::DeviceType device_type, Event **events, size_t count)
批量创建事件
Device * getDevice(base::DeviceType device_type)
获取指定类型的设备
base::Status checkDevice(base::DeviceType device_type, std::string library_path)
检查设备是否可用
Device * getDefaultHostDevice()
获取默认主机设备
Stream * createStream(base::DeviceType device_type)
创建指定类型的流
base::Status destroyEvents(base::DeviceType device_type, Event **events, size_t count)
批量销毁事件
std::map< base::DeviceTypeCode, std::shared_ptr< Architecture > > & getArchitectureMap()
获取架构映射表
std::shared_ptr< Architecture > getArchitectureSharedPtr(base::DeviceTypeCode type)
获取指定类型架构的共享指针
base::Status destoryArchitecture()
销毁架构
Event * createEvent(base::DeviceType device_type)
创建指定类型的事件
base::Status destroyEvent(Event *event)
销毁事件
std::vector< DeviceInfo > getDeviceInfo(base::DeviceTypeCode type, std::string library_path)
获取设备信息
base::Status shape(device::Tensor *input, std::shared_ptr< ir::ShapeParam > param, device::Tensor *output)
base::DeviceType device_type_
设备类型