/** * Copyright 2019 Huawei Technologies Co., Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef PREDICT_SRC_RUNTIME_ALLOCATOR_H_ #define PREDICT_SRC_RUNTIME_ALLOCATOR_H_ #include #include #include #include #include "common/module_registry.h" namespace mindspore { namespace predict { struct AllocatorContext { int shiftFactor; bool lockFlag; }; class Allocator { public: Allocator() : name("default") {} virtual ~Allocator() {} virtual void *Malloc(size_t size) = 0; virtual void Free(void *ptr) = 0; virtual void SetContext(const AllocatorContext &ctx) {} virtual size_t GetTotalSize() { return 0; } virtual void Clear() {} static std::shared_ptr Create(); std::string name; }; class DefaultAllocator : public Allocator { public: DefaultAllocator(); ~DefaultAllocator() override; void SetContext(const AllocatorContext &ctx) override; void *Malloc(size_t size) override; void Free(void *ptr) override; size_t GetTotalSize() override; void Clear() override; private: void Lock(); void UnLock(); struct MemBuf { size_t size; void *buf; }; std::mutex lock; std::vector allocatedList; std::vector freeList; int shiftFactor = 0; bool lockFlag = false; }; // these declaration are for module integration, refer to sample_allocator const char MODULE_REG_NAME_ALLOCATOR[] = "allocator"; template <> class Module : public ModuleBase { public: virtual std::shared_ptr Create() = 0; }; } // namespace predict } // namespace mindspore #endif // PREDICT_SRC_RUNTIME_ALLOCATOR_H_