Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions include/tvm/runtime/object.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ struct TypeIndex {
kRuntimeShapeTuple = 6,
/*! \brief runtime::PackedFunc. */
kRuntimePackedFunc = 7,
/*! \brief runtime::DRef */
kRuntimeDiscoDRef = 8,
// static assignments that may subject to change.
kRuntimeClosure,
kRuntimeADT,
Expand Down
10 changes: 10 additions & 0 deletions src/runtime/minrpc/minrpc_server.h
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,12 @@ class MinRPCReturns : public MinRPCReturnInterface {
io_->Exit(static_cast<int>(code));
}

void WriteObject(void* obj) { this->ThrowError(RPCServerStatus::kUnknownTypeCode); }
uint64_t GetObjectBytes(void* obj) {
this->ThrowError(RPCServerStatus::kUnknownTypeCode);
return 0;
}

template <typename T>
void Write(const T& data) {
static_assert(std::is_trivial<T>::value && std::is_standard_layout<T>::value,
Expand Down Expand Up @@ -748,6 +754,10 @@ class MinRPCServer {
return ReadRawBytes(data, sizeof(T) * count);
}

void ReadObject(int* tcode, TVMValue* value) {
this->ThrowError(RPCServerStatus::kUnknownTypeCode);
}

private:
void RecvPackedSeq(TVMValue** out_values, int** out_tcodes, int* out_num_args) {
RPCReference::RecvPackedSeq(out_values, out_tcodes, out_num_args, this);
Expand Down
4 changes: 4 additions & 0 deletions src/runtime/minrpc/minrpc_server_logging.h
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,10 @@ class MinRPCSniffer {
return ReadRawBytes(data, sizeof(T) * count);
}

void ReadObject(int* tcode, TVMValue* value) {
this->ThrowError(RPCServerStatus::kUnknownTypeCode);
}

private:
bool ReadRawBytes(void* data, size_t size) {
uint8_t* buf = reinterpret_cast<uint8_t*>(data);
Expand Down
13 changes: 13 additions & 0 deletions src/runtime/minrpc/rpc_reference.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@
namespace tvm {
namespace runtime {

// Forward declare TVM Object to use `Object*` in RPC protocol.
class Object;

/*! \brief The current RPC procotol version. */
constexpr const char* kRPCProtocolVer = "0.8.0";

Expand Down Expand Up @@ -194,6 +197,8 @@ struct RPCReference {
num_bytes_ += sizeof(T) * num;
}

void WriteObject(Object* obj) { num_bytes_ += channel_->GetObjectBytes(obj); }

void ThrowError(RPCServerStatus status) { channel_->ThrowError(status); }

uint64_t num_bytes() const { return num_bytes_; }
Expand Down Expand Up @@ -364,6 +369,10 @@ struct RPCReference {
channel->WriteArray(bytes->data, len);
break;
}
case kTVMObjectHandle: {
channel->WriteObject(static_cast<Object*>(value.v_handle));
break;
}
default: {
channel->ThrowError(RPCServerStatus::kUnknownTypeCode);
break;
Expand Down Expand Up @@ -461,6 +470,10 @@ struct RPCReference {
value.v_handle = ReceiveDLTensor(channel);
break;
}
case kTVMObjectHandle: {
channel->ReadObject(&tcodes[i], &value);
break;
}
default: {
channel->ThrowError(RPCServerStatus::kUnknownTypeCode);
break;
Expand Down
10 changes: 10 additions & 0 deletions src/runtime/rpc/rpc_endpoint.cc
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,16 @@ class RPCEndpoint::EventHandler : public dmlc::Stream {
this->Write(cdata);
}

void WriteObject(void* obj) { this->ThrowError(RPCServerStatus::kUnknownTypeCode); }
uint64_t GetObjectBytes(void* obj) {
this->ThrowError(RPCServerStatus::kUnknownTypeCode);
return 0;
}

void ReadObject(int* tcode, TVMValue* value) {
this->ThrowError(RPCServerStatus::kUnknownTypeCode);
}

void MessageDone() {
// Unused here, implemented for microTVM framing layer.
}
Expand Down