FLImaging 6.5.16.1
ComputationalGraphUtilities.h
1#pragma once
2
3#if _MSC_VER >= 1900 && defined(_M_X64)
4
5#include <map>
6
7namespace FLImaging
8{
9 namespace AI
10 {
11 template <typename T>
12 class CComputationalBase;
13
14 template <typename T>
15 class CComputationalGraph;
16
17 template <typename T>
18 class CTensor;
19
20 template <typename T>
21 class CInternalOptimizerBase;
22
23 template <typename T>
24 class FL_EXPORT CComputationalGraphUtilities : public Base::CFLBase
25 {
26 private:
27 CComputationalGraphUtilities();
28
29 public:
30 virtual ~CComputationalGraphUtilities();
31
32 static const CResult SetBinaryData(const Base::CFLData* pFldModel, CComputationalBase<T>** ppResultModel, int64_t i64Base = 0, int64_t i64Size = -1);
33 static const CResult SetBinaryData(const Base::CFLData* pFldModel, std::vector<Base::CFLString<wchar_t>>& vctModelID, CComputationalBase<T>** ppResultModel, std::vector<int64_t>& vctModelOffset, int64_t i64Base = 0, int64_t i64Size = -1);
34 static const CResult GetBinaryData(const CComputationalBase<T>* pModel, Base::CFLData* pFldResult, bool bDumpMode = false, bool bAppend = false);
35
36 static const CResult Load(const wchar_t* pWcsFileName, CComputationalBase<T>** ppResultModel);
37 static const CResult Save(const wchar_t* pWcsFileName, const CComputationalBase<T>* pModel, bool bDumpMode = false);
38
39 static const CResult GetSequentialNode(const CComputationalBase<T>* pModel, std::vector<const CComputationalBase<T>*>* pVctResult, bool bIncludeIntrinsicOperands = false, bool bIncludePlaceholderOperands = false, bool bStartFromTailNode = true, bool bOnlyActivatedNodes = true);
40 static const CResult GetSequentialNode(std::vector<const CComputationalBase<T>*>& vctModels, std::vector<const CComputationalBase<T>*>* pVctResult, bool bIncludeIntrinsicOperands = false, bool bIncludePlaceholderOperands = false, bool bStartFromTailNode = true, bool bOnlyActivatedNodes = true);
41 static const CResult GetSequentialNode(const CComputationalBase<T>* pModelStart, const CComputationalBase<T>* pModelEnd, std::vector<const CComputationalBase<T>*>* pVctResult, bool bIncludeIntrinsicOperands = false, bool bIncludePlaceholderOperands = false);
42
43 static const CResult Evaluate(CComputationalBase<T>& cgLastLayer, CTensor<T>* pTsrOutput, int64_t i64DeviceIndex, const std::vector<int64_t>* pVctBatchIndices = nullptr, int32_t* pI32IterationFeedback = nullptr, int32_t i32MiniBatch = 0);
44 static T Validate(CComputationalBase<T>& cgLabelLayer, CComputationalBase<T>& cgLastLayer, const std::vector<int64_t>* pVctBatchIndices = nullptr, int32_t* pI32IterationFeedback = nullptr);
45 static const CResult Delete(CComputationalBase<T>* pCgLayer, bool bDeletePlaceholder = false);
46 static const CResult Delete2(CComputationalBase<T>* pCgLayer);
47 static int64_t GetMaxMiniBatch(CComputationalBase<T>* pModel, bool bTrainingMode, int64_t i64DeviceIndex, int64_t i64MaxMiniBatchRange = 0, double f64MemoryLimitRatio = 1., CInternalOptimizerBase<T>* pOptimizer = nullptr);
48 static int64_t GetRequiredOptimizerMemory(CInternalOptimizerBase<T>* pOptimizer, int64_t i64MiniBatchSize = 1);
49 static int64_t GetUniformMiniBatch(CComputationalBase<T>* pModel, bool bTrainingMode, int64_t i64MaxBatch = 0);
50 static const CResult SetProcessingUnit(CComputationalBase<T>* pModel, const Base::CProcessingUnitBase* pPuBase, bool bRecursive = true);
51
52 static const CResult ClearTensorMemory(CComputationalBase<T>* pModel);
53
54 static const CResult RegisterComputationalBaseObjects(CComputationalBase<T>* pObject);
55 static CComputationalBase<T>* CreateComputationalBaseObject(const Base::CFLString<char>& astrClassNameWithNamespace);
56
57 static CComputationalGraphUtilities<T>* GetSingletonObject();
58
59 static const CResult DuplicateGraph(const CComputationalBase<T>* pCgSource, CComputationalBase<T>** ppCgTarget, int32_t i32TargetDeviceNumber);
60
61 static const CResult SetRetainedGraph(CComputationalBase<T>* pModel);
62 static const CResult SetAddGradientCount(CComputationalBase<T>* pModel, int64_t i64AddGraidentCount);
63
64 static const CResult GetGPUName(Base::CFLString<wchar_t>& strGPUName, int32_t& i32ComputeCapabilityMajor, int32_t& i32ComputeCapabilityMinor, int32_t i32DeviceIndex);
65 static const CResult GetGPUMemoryInfo(int64_t& i64AvailableGPUMemory, int64_t& i64TotalGPUMemory, int32_t i32DeviceIndex);
66 static const CResult ClearAllSharedMemory();
67 static const CResult ResetCudaMemory(int32_t i32DeviceIndex);
68
69 static const CResult SetCudaDevice(int32_t i32DeviceIndex);
70 DeclareGetClassType();
71
72 static const CResult ReApplyComputationalGraph(CComputationalGraph<T>* pReapplyCGCost, int64_t i64ReapplyClassCount, int64_t i64ChCount);
73 static const CResult ReApplyComputationalGraph(CComputationalGraph<T>* pReapplyModel, const std::vector<Base::CFLString<wchar_t>>& vctGraphName, const std::vector<int64_t>& vctReapplyCount, const std::vector<bool>& vctAdjustToOut);
74 static const CResult TransferModel(CComputationalGraph<T>* pTarget, const CComputationalGraph<T>* pSource);
75 static const CResult TransferModel(std::vector<const CComputationalBase<T>*>& vctTarget, const std::vector<const CComputationalBase<T>*>& vctSource);
76
77 public:
78 std::map<Base::CFLString<char>, CComputationalBase<T>*>& m_mapSingletonObjects;
79
80 protected:
81 virtual void Throw(const CResult& res, const wchar_t* pWcsExtraMessage = nullptr) const override;
82
83 private:
84 static CComputationalGraphUtilities<T>* GetSingletonInstance();
85 };
86
87 typedef CComputationalGraphUtilities<float> CComputationalGraphUtilitiesF;
88 typedef CComputationalGraphUtilities<double> CComputationalGraphUtilitiesD;
89 }
90}
91
92#endif
@ Delete
Remove windows and remove menu items from tree.