123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- #ifndef CNSTREAM_SYNCMEM_HPP_
- #define CNSTREAM_SYNCMEM_HPP_
- #include <cstddef>
- #include <mutex>
- #include "cnrt.h"
- #include "cnstream_common.hpp"
- #include "cnstream_logging.hpp"
- #define CNS_CNRT_CHECK(__EXPRESSION__) \
- do { \
- cnrtRet_t ret = (__EXPRESSION__); \
- LOGF_IF(FRAME, CNRT_RET_SUCCESS != ret) << "Call [" << #__EXPRESSION__ << "] failed, error code: " << ret; \
- } while (0)
- #define CALL_CNRT_BY_CONTEXT(__EXPRESSION__, __DEV_ID__, __DDR_CHN__) \
- do { \
- int dev_id = (__DEV_ID__); \
- cnrtDev_t dev; \
- cnrtChannelType_t ddr_chn = static_cast<cnrtChannelType_t>((__DDR_CHN__)); \
- CNS_CNRT_CHECK(cnrtGetDeviceHandle(&dev, dev_id)); \
- CNS_CNRT_CHECK(cnrtSetCurrentDevice(dev)); \
- if (ddr_chn >= 0) \
- CNS_CNRT_CHECK(cnrtSetCurrentChannel(ddr_chn)); \
- CNS_CNRT_CHECK(__EXPRESSION__); \
- } while (0)
- namespace cnstream {
- class CNSyncedMemory : private NonCopyable {
- public:
-
- explicit CNSyncedMemory(size_t size);
-
- explicit CNSyncedMemory(size_t size, int mlu_dev_id, int mlu_ddr_chn = -1);
-
- ~CNSyncedMemory();
-
- const void* GetCpuData();
-
- void SetCpuData(void* data);
-
- const void* GetMluData();
-
- void SetMluData(void* data);
-
- void SetMluDevContext(int dev_id, int ddr_chn = -1);
-
- int GetMluDevId() const;
-
- int GetMluDdrChnId() const;
-
- void* GetMutableCpuData();
-
- void* GetMutableMluData();
-
- enum class SyncedHead {
- UNINITIALIZED,
- HEAD_AT_CPU,
- HEAD_AT_MLU,
- SYNCED
- };
-
- SyncedHead GetHead() const { return head_; }
-
- size_t GetSize() const { return size_; }
- #ifndef UNIT_TEST
- private:
- #endif
-
- bool own_cpu_data_ = false;
- bool own_mlu_data_ = false;
- private:
-
- void ToCpu();
-
- void ToMlu();
- void* cpu_ptr_ = nullptr;
- void* mlu_ptr_ = nullptr;
- SyncedHead head_ = SyncedHead::UNINITIALIZED;
- size_t size_ = 0;
- int dev_id_ = -1;
- int ddr_chn_ = -1;
- mutable std::mutex mutex_;
- };
- }
- #endif
|