This is an automated email from the ASF dual-hosted git repository. tqchen pushed a commit to branch refactor-s0 in repository https://gitbox.apache.org/repos/asf/tvm.git
commit 3bb75d4cb19a7bbdb2a6a1714d2c4f9e3ba862c3 Author: tqchen <[email protected]> AuthorDate: Mon Mar 10 10:06:01 2025 -0400 Fix deleter to match latest --- include/tvm/runtime/memory.h | 1 + include/tvm/runtime/memory/memory_manager.h | 4 ++-- include/tvm/runtime/ndarray.h | 2 +- include/tvm/runtime/object.h | 10 ++++++---- src/runtime/memory/memory_manager.cc | 12 ++++++------ src/runtime/ndarray.cc | 15 +++++++++------ src/runtime/rpc/rpc_module.cc | 4 ++-- 7 files changed, 27 insertions(+), 21 deletions(-) diff --git a/include/tvm/runtime/memory.h b/include/tvm/runtime/memory.h index 04b4a1e7d4..2b317d05c5 100644 --- a/include/tvm/runtime/memory.h +++ b/include/tvm/runtime/memory.h @@ -30,6 +30,7 @@ namespace runtime { using tvm::ffi::make_inplace_array_object; using tvm::ffi::make_object; +using tvm::ffi::FObjectDeleter; } // namespace runtime } // namespace tvm diff --git a/include/tvm/runtime/memory/memory_manager.h b/include/tvm/runtime/memory/memory_manager.h index a88d05603f..3def5224ed 100644 --- a/include/tvm/runtime/memory/memory_manager.h +++ b/include/tvm/runtime/memory/memory_manager.h @@ -171,10 +171,10 @@ class StorageObj : public Object { String scope = "global"); /*! \brief The deleter for an NDArray when allocated from underlying storage. */ - static void ScopedDeleter(void* ptr); + static void ScopedDeleter(TVMFFIObject* ptr); /*! \brief The deleter for an NDArray when allocated from underlying storage. */ - static void Deleter(void* ptr); + static void Deleter(TVMFFIObject* ptr); ~StorageObj() { if (allocator) { diff --git a/include/tvm/runtime/ndarray.h b/include/tvm/runtime/ndarray.h index 4ed86fee82..3bfdc74e7c 100644 --- a/include/tvm/runtime/ndarray.h +++ b/include/tvm/runtime/ndarray.h @@ -332,7 +332,7 @@ class NDArray::Container : public Object, public NDArray::ContainerBase { * \brief Set the deleter field. * \param deleter The deleter. */ - void SetDeleter(void (*deleter)(void* self)) { header_.deleter = deleter; } + void SetDeleter(ffi::FObjectDeleter deleter) { header_.deleter = deleter; } // Expose DecRef and IncRef as public function // NOTE: they are only for developer purposes only. diff --git a/include/tvm/runtime/object.h b/include/tvm/runtime/object.h index 1edfae6abb..76ed5c0096 100644 --- a/include/tvm/runtime/object.h +++ b/include/tvm/runtime/object.h @@ -51,9 +51,7 @@ using tvm::ffi::GetRef; enum TypeIndex : int32_t { // Standard static index assignments, // Frontends can take benefit of these constants. - kRuntimeString = TVMFFITypeIndex::kTVMFFIStr, - kRuntimeMap = TVMFFITypeIndex::kTVMFFIMap, - kRuntimeArray = TVMFFITypeIndex::kTVMFFIArray, + /*! \brief runtime::Module. */ kRuntimeModule = TVMFFITypeIndex::kTVMFFIRuntimeModule, /*! \brief runtime::NDArray. */ @@ -68,6 +66,10 @@ enum TypeIndex : int32_t { kRuntimeDiscoDRef = kCustomStaticIndex + 2, /*! \brief runtime::RPCObjectRef */ kRuntimeRPCObjectRef = kCustomStaticIndex + 3, + // custom builtin + kRuntimeString, + kRuntimeMap, + kRuntimeArray, // static assignments that may subject to change. kStaticIndexEnd, }; @@ -194,7 +196,7 @@ class ObjectRef : public tvm::ffi::ObjectRef { */ #define TVM_DEFINE_OBJECT_REF_METHODS_WITHOUT_DEFAULT_CONSTRUCTOR(TypeName, ParentType, \ ObjectName) \ - explicit TypeName(::tvm::runtime::ObjectPtr<::tvm::runtime::Object> n) : ParentType(n) {} \ + explicit TypeName(::tvm::ffi::ObjectPtr<::tvm::ffi::Object> n) : ParentType(n) {} \ TVM_DEFINE_DEFAULT_COPY_MOVE_AND_ASSIGN(TypeName); \ const ObjectName* operator->() const { return static_cast<const ObjectName*>(data_.get()); } \ const ObjectName* get() const { return operator->(); } \ diff --git a/src/runtime/memory/memory_manager.cc b/src/runtime/memory/memory_manager.cc index fb10b7724b..97fcf0534f 100644 --- a/src/runtime/memory/memory_manager.cc +++ b/src/runtime/memory/memory_manager.cc @@ -34,8 +34,8 @@ namespace tvm { namespace runtime { namespace memory { -static void BufferDeleter(void* obj) { - auto* ptr = static_cast<NDArray::Container*>(obj); +static void BufferDeleter(TVMFFIObject* ptr_obj) { + auto* ptr = ffi::details::ObjectUnsafe::RawObjectPtrFromUnowned<NDArray::Container>(ptr_obj); ICHECK(ptr->manager_ctx != nullptr); Buffer* buffer = reinterpret_cast<Buffer*>(ptr->manager_ctx); MemoryManager::GetAllocator(buffer->device, buffer->alloc_type)->Free(*(buffer)); @@ -50,8 +50,8 @@ Storage::Storage(Buffer buffer, Allocator* allocator) { data_ = std::move(n); } -void StorageObj::Deleter(void* obj) { - auto* ptr = static_cast<NDArray::Container*>(obj); +void StorageObj::Deleter(TVMFFIObject* ptr_obj) { + auto* ptr = ffi::details::ObjectUnsafe::RawObjectPtrFromUnowned<NDArray::Container>(ptr_obj); // When invoking AllocNDArray we don't own the underlying allocation // and should not delete the buffer, but instead let it be reclaimed // by the storage object's destructor. @@ -85,8 +85,8 @@ inline size_t GetDataAlignment(const DLTensor& arr) { return align; } -void StorageObj::ScopedDeleter(void* obj) { - auto* ptr = static_cast<NDArray::Container*>(obj); +void StorageObj::ScopedDeleter(TVMFFIObject* ptr_obj) { + auto* ptr = ffi::details::ObjectUnsafe::RawObjectPtrFromUnowned<NDArray::Container>(ptr_obj); StorageObj* storage = reinterpret_cast<StorageObj*>(ptr->manager_ctx); // Let the device handle proper cleanup of view diff --git a/src/runtime/ndarray.cc b/src/runtime/ndarray.cc index 67b30bb0d1..9ad2b19ef9 100644 --- a/src/runtime/ndarray.cc +++ b/src/runtime/ndarray.cc @@ -101,8 +101,9 @@ void ArrayCopyToBytes(const DLTensor* handle, void* data, size_t nbytes) { struct NDArray::Internal { // Default deleter for the container - static void DefaultDeleter(void* ptr_obj) { - auto* ptr = static_cast<NDArray::Container*>(ptr_obj); + static void DefaultDeleter(TVMFFIObject* ptr_obj) { + auto* ptr = + ffi::details::ObjectUnsafe::RawObjectPtrFromUnowned<NDArray::Container>(ptr_obj); if (ptr->manager_ctx != nullptr) { ffi::details::ObjectUnsafe::DecRefObjectHandle( static_cast<NDArray::Container*>(ptr->manager_ctx)); @@ -117,8 +118,9 @@ struct NDArray::Internal { // that are not allocated inside of TVM. // This enables us to create NDArray from memory allocated by other // frameworks that are DLPack compatible - static void DLPackDeleter(void* ptr_obj) { - auto* ptr = static_cast<NDArray::Container*>(ptr_obj); + static void DLPackDeleter(TVMFFIObject* ptr_obj) { + auto* ptr = + ffi::details::ObjectUnsafe::RawObjectPtrFromUnowned<NDArray::Container>(ptr_obj); DLManagedTensor* tensor = static_cast<DLManagedTensor*>(ptr->manager_ctx); if (tensor->deleter != nullptr) { (*tensor->deleter)(tensor); @@ -128,8 +130,9 @@ struct NDArray::Internal { // Deleter for NDArray based on external DLTensor // The memory is allocated from outside and it is assumed that // responsibility for its freeing is also outside - static void SelfDeleter(void* ptr_obj) { - auto* ptr = static_cast<NDArray::Container*>(ptr_obj); + static void SelfDeleter(TVMFFIObject* ptr_obj) { + NDArray::Container* ptr = + ffi::details::ObjectUnsafe::RawObjectPtrFromUnowned<NDArray::Container>(ptr_obj); delete ptr; } // Local create function which allocates tensor metadata diff --git a/src/runtime/rpc/rpc_module.cc b/src/runtime/rpc/rpc_module.cc index 57f2771501..aef4ed4a99 100644 --- a/src/runtime/rpc/rpc_module.cc +++ b/src/runtime/rpc/rpc_module.cc @@ -41,8 +41,8 @@ namespace tvm { namespace runtime { // deleter of RPC remote array -static void RemoteNDArrayDeleter(void* obj) { - auto* ptr = static_cast<NDArray::Container*>(obj); +static void RemoteNDArrayDeleter(TVMFFIObject* ptr_obj) { + auto* ptr = ffi::details::ObjectUnsafe::RawObjectPtrFromUnowned<NDArray::Container>(ptr_obj); RemoteSpace* space = static_cast<RemoteSpace*>(ptr->dl_tensor.data); if (ptr->manager_ctx != nullptr) { space->sess->FreeHandle(ptr->manager_ctx, kTVMNDArrayHandle);
