/** * @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 #include #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 CreateVDevice();//create device using default params; static std::unique_ptr 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 m_dispatchEngine; std::atomic m_shutdown; std::shared_ptr m_phyDevices; }; }