Skip to content

Commit 68d0935

Browse files
committed
added buffer size
1 parent 0e1a2a2 commit 68d0935

File tree

5 files changed

+35
-9
lines changed

5 files changed

+35
-9
lines changed

python/tvm/contrib/hexagon/session.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,12 @@ def __init__(
5757
remote_kw: dict,
5858
session_name: str = "hexagon-rpc",
5959
remote_stack_size_bytes: int = 128 * 1024,
60+
rpc_receive_buffer_size_bytes: int = 2 * 1024 * 1024,
6061
):
6162
self._launcher = launcher
6263
self._session_name = session_name
6364
self._remote_stack_size_bytes = remote_stack_size_bytes
65+
self._rpc_receive_buffer_size_bytes = rpc_receive_buffer_size_bytes
6466
self._remote_kw = remote_kw
6567
self._rpc = None
6668
self.device = None
@@ -81,6 +83,7 @@ def __enter__(self):
8183
self._session_name,
8284
self._remote_stack_size_bytes,
8385
os.environ.get("HEXAGON_SIM_ARGS", ""),
86+
self._rpc_receive_buffer_size_bytes,
8487
],
8588
)
8689
self.device = self._rpc.hexagon(0)

src/runtime/hexagon/rpc/android/session.cc

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,19 @@ namespace hexagon {
4545

4646
class HexagonTransportChannel : public RPCChannel {
4747
public:
48-
explicit HexagonTransportChannel(const std::string& uri, int remote_stack_size_bytes) {
48+
explicit HexagonTransportChannel(const std::string& uri, int remote_stack_size_bytes,
49+
uint32_t receive_buf_size_bytes) {
4950
if (_handle != AEE_EUNKNOWN) return;
5051

5152
enable_unsigned_pd(true);
5253
set_remote_stack_size(remote_stack_size_bytes);
54+
5355
AEEResult rc = hexagon_rpc_open(uri.c_str(), &_handle);
5456
ICHECK(rc == AEE_SUCCESS) << "hexagon_rpc_open failed. URI: " << uri.c_str();
57+
58+
rc = hexagon_rpc_init(_handle, receive_buf_size_bytes);
59+
ICHECK(rc == AEE_SUCCESS) << "hexagon_rpc_set_receive_buf_size failed. receive_buf_size_bytes: "
60+
<< receive_buf_size_bytes;
5561
}
5662

5763
size_t Send(const void* data, size_t size) override {
@@ -105,10 +111,15 @@ class HexagonTransportChannel : public RPCChannel {
105111

106112
TVM_REGISTER_GLOBAL("tvm.contrib.hexagon.create_hexagon_session")
107113
.set_body([](TVMArgs args, TVMRetValue* rv) {
114+
ICHECK(args.size() >= 4) << args.size() << " is less than 4";
115+
108116
std::string session_name = args[0];
109117
int remote_stack_size_bytes = args[1];
118+
// For simulator, the third parameter is sim_args, ignore it.
119+
int hexagon_rpc_receive_buf_size_bytes = args[3];
110120
HexagonTransportChannel* hexagon_channel =
111-
new HexagonTransportChannel(hexagon_rpc_URI CDSP_DOMAIN, remote_stack_size_bytes);
121+
new HexagonTransportChannel(hexagon_rpc_URI CDSP_DOMAIN, remote_stack_size_bytes,
122+
static_cast<uint32_t>(hexagon_rpc_receive_buf_size_bytes));
112123
std::unique_ptr<RPCChannel> channel(hexagon_channel);
113124
auto ep = RPCEndpoint::Create(std::move(channel), session_name, "", NULL);
114125
auto sess = CreateClientSession(ep);

src/runtime/hexagon/rpc/hexagon/rpc_server.cc

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,7 @@ extern "C" {
4040
#include "../../hexagon/hexagon_common.h"
4141
#include "hexagon_rpc.h"
4242

43-
// TODO(mehrdadh): make this configurable.
44-
#define TVM_HEXAGON_RPC_BUFF_SIZE_BYTES 2 * 1024 * 1024
43+
#define TVM_HEXAGON_RPC_BUFF_DEFAULT_SIZE_BYTES 2 * 1024 * 1024
4544

4645
// TODO(csulivan,adstraw,kparzysz-quic) This should be set on a TVM-wide basis.
4746
#if defined(__hexagon__)
@@ -196,10 +195,16 @@ class HexagonRPCServer {
196195
} // namespace tvm
197196

198197
namespace {
199-
tvm::runtime::hexagon::HexagonRPCServer* get_hexagon_rpc_server() {
200-
static tvm::runtime::hexagon::HexagonRPCServer g_hexagon_rpc_server(
201-
new uint8_t[TVM_HEXAGON_RPC_BUFF_SIZE_BYTES], TVM_HEXAGON_RPC_BUFF_SIZE_BYTES);
202-
return &g_hexagon_rpc_server;
198+
static tvm::runtime::hexagon::HexagonRPCServer* g_hexagon_rpc_server;
199+
tvm::runtime::hexagon::HexagonRPCServer* get_hexagon_rpc_server(
200+
uint32_t rpc_receive_buff_size_bytes = TVM_HEXAGON_RPC_BUFF_DEFAULT_SIZE_BYTES) {
201+
if (g_hexagon_rpc_server) {
202+
return g_hexagon_rpc_server;
203+
}
204+
static tvm::runtime::hexagon::HexagonRPCServer hexagon_rpc_server(
205+
new uint8_t[rpc_receive_buff_size_bytes], rpc_receive_buff_size_bytes);
206+
g_hexagon_rpc_server = &hexagon_rpc_server;
207+
return g_hexagon_rpc_server;
203208
}
204209
} // namespace
205210

@@ -222,7 +227,6 @@ int __QAIC_HEADER(hexagon_rpc_open)(const char* uri, remote_handle64* handle) {
222227
return AEE_ENOMEMORY;
223228
}
224229
reset_device_api();
225-
get_hexagon_rpc_server();
226230

227231
return AEE_SUCCESS;
228232
}
@@ -235,6 +239,11 @@ int __QAIC_HEADER(hexagon_rpc_close)(remote_handle64 handle) {
235239
return AEE_SUCCESS;
236240
}
237241

242+
int __QAIC_HEADER(hexagon_rpc_init)(remote_handle64 _h, uint32_t buff_size_bytes) {
243+
get_hexagon_rpc_server(buff_size_bytes);
244+
return AEE_SUCCESS;
245+
}
246+
238247
/*!
239248
* \brief Send data from Host to Hexagon over RPCSession.
240249
* \param _handle The remote handle

src/runtime/hexagon/rpc/hexagon_rpc.idl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,5 @@ typedef sequence<octet> buffer;
2525
interface hexagon_rpc : remote_handle64 {
2626
AEEResult send(in buffer data);
2727
AEEResult receive(rout buffer buf, rout int64_t buf_written_size);
28+
AEEResult init(in uint32_t buff_size_bytes);
2829
};

src/runtime/hexagon/rpc/simulator/session.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1311,6 +1311,8 @@ detail::Optional<HEXAPI_Nullptr> SimulatorRPCChannel::to_nullptr(const detail::M
13111311

13121312
TVM_REGISTER_GLOBAL("tvm.contrib.hexagon.create_hexagon_session")
13131313
.set_body([](TVMArgs args, TVMRetValue* rv) {
1314+
ICHECK(args.size() >= 4) << args.size() << " is less than 4";
1315+
13141316
std::string session_name = args[0];
13151317
// For target, the second parameter is remote_stack_size_bytes, ignore it.
13161318
std::string sim_args = args[2];

0 commit comments

Comments
 (0)