/** * @Description : * @Author : chenht2022 * @Date : 2024-08-05 04:49:08 * @Version : 1.0.0 * @LastEditors : chenht2022 * @LastEditTime : 2024-08-05 06:36:41 * @Copyright (c) 2024 by KVCache.AI, All Rights Reserved. **/ #ifndef CPUINFER_SHAREDMEMBUFFER_H #define CPUINFER_SHAREDMEMBUFFER_H #include #include #include #include #include #include #include #include struct MemoryRequest { std::vector> funcs; std::vector sizes; size_t total_size(); void update_base_ptr(void* base); template void append_pointer(T** ptr, size_t size) { append_function([ptr](void* base) { *ptr = reinterpret_cast(base); }, size); } void append_function(std::function func, size_t size); }; class SharedMemBuffer { public: SharedMemBuffer(); ~SharedMemBuffer(); void alloc(void* object, MemoryRequest requests); private: void* buffer; uint64_t size; std::vector object_requests; }; static SharedMemBuffer shared_mem_buffer; static SharedMemBuffer shared_mem_buffer_for_decoder_layer; class SharedMemBufferNuma { std::mutex lock; std::map> numa_mem; public: void alloc(int numa, void* object, MemoryRequest requests); }; static SharedMemBufferNuma shared_mem_buffer_numa; #endif