115 lines
3.2 KiB
C++
115 lines
3.2 KiB
C++
/**
|
|
* @file calrt_vdevice.h
|
|
* @brief temporary only support one physical device.
|
|
* @version 0.1
|
|
* @date 2024-11-11
|
|
*
|
|
* @copyright Copyright (c) 2024
|
|
*
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <memory>
|
|
#include <atomic>
|
|
|
|
#include "calrt_device.h"
|
|
#include "calrt_buffer.h"
|
|
|
|
namespace calrt
|
|
{
|
|
//class CalrtDeviceHandle; // device resource manage
|
|
//struct CalrtDeviceStatus;// record device status
|
|
//class CalDeviceParams; // the device params;
|
|
|
|
class CALRT_API VirtualDevice
|
|
{
|
|
public:
|
|
~VirtualDevice();
|
|
|
|
static std::unique_ptr<VirtualDevice> CreateVDevice();//create device using default params;
|
|
static std::unique_ptr<VirtualDevice> CreateVDevice(CalrtDeviceType_e type);
|
|
|
|
CalrtDevice* GetDevice() { return m_phyDevices.get(); }
|
|
const char *GetDeviceInfo(size_t idx) {return m_phyDevices->GetDevInfo().c_str();}
|
|
// std::size_t GetPhyDeviceNum() { return m_phyDevices.size(); }
|
|
|
|
/**
|
|
* @brief
|
|
*
|
|
* @param model
|
|
* @param inputBuffer
|
|
* @param outputBuffer
|
|
* @param forceEngineMode default: -1, automatically run engine mode. 0: force ping. 1: force pong
|
|
*/
|
|
void SubmitJob(CalbinModel* model, CalrtInputBuf* inputBuffer, CalrtOutputBuf* outputBuffer, TaskType_e forceEngineMode = TaskType_e::UNDEFINED_TASK);
|
|
void Shutdown();
|
|
void ReportDeviceInfo();
|
|
void EnableTraceDevice(bool enable) {m_phyDevices->EnableTraceDevice(enable);}
|
|
CalrtError_e Status();
|
|
void EnableParallelMode(bool switch_on);
|
|
|
|
/**
|
|
* @brief read device memory from selected chip
|
|
*
|
|
* @param srcAddr
|
|
* @param dst
|
|
* @param size
|
|
* @param chipId chip id, default 0
|
|
* @return CalrtError_e
|
|
*/
|
|
CalrtError_e ReadMem(void *srcAddr, uint64_t dst, uint64_t size, uint32_t chipId = 0);
|
|
|
|
/**
|
|
* @brief write data to selected chip's memory
|
|
*
|
|
* @param srcAddr
|
|
* @param dst
|
|
* @param size
|
|
* @param chipId chip id, default 0
|
|
* @return CalrtError_e
|
|
*/
|
|
CalrtError_e WriteMem(void *srcAddr, uint64_t dst, uint64_t size, uint32_t chipId = 0);
|
|
|
|
/**
|
|
* @brief reset CCU
|
|
*
|
|
*/
|
|
void ResetCCU();
|
|
|
|
/**
|
|
* @brief reset deployed calbin on the current device
|
|
*
|
|
*/
|
|
void ResetConfiguration();
|
|
|
|
/**
|
|
* @brief reset device
|
|
*
|
|
*/
|
|
void Reset();
|
|
|
|
/**
|
|
* @brief release device. for handle sigabrt, sigint signal
|
|
*
|
|
*/
|
|
void Release();
|
|
|
|
CalrtDeviceType_e Type() noexcept;
|
|
|
|
VirtualDevice(const VirtualDevice &) = delete;
|
|
VirtualDevice &operator=(const VirtualDevice&) = delete;
|
|
VirtualDevice(VirtualDevice &&) = delete;
|
|
VirtualDevice &operator=(VirtualDevice &&other) = delete;
|
|
|
|
private:
|
|
|
|
VirtualDevice();
|
|
|
|
class CalrtJobEngine;
|
|
std::unique_ptr<CalrtJobEngine> m_dispatchEngine;
|
|
std::atomic<bool> m_shutdown;
|
|
std::shared_ptr<CalrtDevice> m_phyDevices;
|
|
};
|
|
}
|