forked from apache/tvm
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Hexagon] RPC server/client for simulator (apache#10361)
This is the C++ code for running Hexagon code on simulator via the RPC mechanism. It is intended to be integrated into the current HexagonLauncher, although the integration will require further changes to the launcher python code. The final goal is to be able to run the same file.py on either hardware or simulator without needing to edit the python file, but simply by changing the configuration of the execution platform (i.e. something like --exectute-on=simulator as a command line or in an environment variable). The exact details are still to be determined.
- Loading branch information
Krzysztof Parzyszek
authored and
pfk-beta
committed
Apr 11, 2022
1 parent
87f821a
commit aa71c5f
Showing
6 changed files
with
1,776 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
/* | ||
* Licensed to the Apache Software Foundation (ASF) under one | ||
* or more contributor license agreements. See the NOTICE file | ||
* distributed with this work for additional information | ||
* regarding copyright ownership. The ASF licenses this file | ||
* to you 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 TVM_RUNTIME_HEXAGON_RPC_SIMULATOR_HEXAGON_SIM_PROTO_H_ | ||
#define TVM_RUNTIME_HEXAGON_RPC_SIMULATOR_HEXAGON_SIM_PROTO_H_ | ||
|
||
struct Message { | ||
enum : uint32_t { | ||
kNone = 0, | ||
kAck, | ||
kTerminate, | ||
kReceiveStart, | ||
kReceiveEnd, | ||
kSendStart, | ||
kSendEnd, | ||
}; | ||
enum : uint32_t { | ||
null_va = 0, | ||
}; | ||
|
||
uint32_t code; | ||
uint32_t len; | ||
uint32_t va; | ||
} __attribute__((packed)); | ||
|
||
// Protocol: | ||
// | ||
// Copying data from host to remote: | ||
// | ||
// Host >-- [ kReceiveStart, len, null_va ] --> Remote | ||
// * Remote client prepares a buffer with at least `len` bytes. | ||
// Host <-- [ kAck, buf_size, buf_ptr ] <-- Remote | ||
// * Host writes `nbytes` into buffer, `nbytes` <= `len`. | ||
// Host >-- [ kReceiveEnd, nbytes, buf_ptr ] --> Remote | ||
// * Remote client processes the data. | ||
// Host <-- [ kAck, ___, ___ ] <-- Remote | ||
// | ||
// Copying data from remote to host: | ||
// | ||
// Host >-- [ kSendStart, len, null_va ] --> Remote | ||
// * Remote client returns pointer to the buffer with the data to be read. | ||
// * There should be at least `len` bytes ready in the buffer. | ||
// Host <-- [ kAck, buf_size, buf_ptr ] <-- Remote | ||
// * Host reads `nbytes` from buffer, `nbytes` <= `buf_size`. | ||
// Host >-- [ kSendEnd , nbytes, buf_ptr ] --> Remote | ||
// * Remote client processes the data. | ||
// Host <-- [ kAck, ___, ___ ] <-- Remote | ||
// | ||
// Teminating server: | ||
// | ||
// Host >-- [ kTerminate, ___, ___ ] --> Remote | ||
// Host <-- [ kAck, ___, ___ ] <-- Remote | ||
// * Host continues execution of the client. | ||
// * Client terminates. | ||
|
||
#define DISPATCH_FUNCTION_NAME dispatch_875b2e3a28186123 | ||
#define MESSAGE_BUFFER_NAME message_buffer_71d6a7b93c318d7e | ||
|
||
#endif // TVM_RUNTIME_HEXAGON_RPC_SIMULATOR_HEXAGON_SIM_PROTO_H_ |
Oops, something went wrong.