This document is relevant for: Inf2, Trn1, Trn2, Trn3
Async API Usage Examples#
Schedule#
NRT_STATUS exec_ret;
NRT_STATUS ret = nrta_execute_schedule(model, inputs, outputs, 0, &exec_ret, &seq);
if (ret != NRT_SUCCESS) {
if (ret == NRT_QUEUE_FULL) {
// or handle retries if desired
break;
}
// handle other errors
...
} else {
req_seqs[req] = seq;
}
Wait for Completion via polling#
Here’s an example for polling for completion:
nrta_seq_t last_req_seq;
nrta_seq_t completed_seq = {};
while (true) {
nrta_get_sequence(lnc, NRTA_XU_COMPUTE, &completed_seq);
if (completed_seq >= last_req_seq) {
break;
}
usleep(1);
}
In a similar vein, we can also poll with
nrta_is_completed(last_req_seq, &is_completed)
Error Handling#
We need to maintain an array/vector to track the execution return statuses.
static const int NUM_EXECS = 8;
int lnc = 0;
NRT_STATUS exec_rets[NUM_EXECS];
// submit execution requests
nrta_seq_t req_seqs[NUM_EXECS];
for (int req = 0; req < NUM_EXECS; req++) {
nrta_seq_t seq = {};
NRT_STATUS ret = nrta_execute_schedule(model, inputs, outputs, 0, &exec_rets[req], &seq);
if (ret != NRT_SUCCESS) {
if (ret == NRT_QUEUE_FULL) {
// or handle retries if desired
break;
}
// handle other errors
...
} else {
req_seqs[req] = seq;
}
}
// check for execution errors
int error_count = 0;
for (int req = 0; req < NUM_EXECS; req++) {
if (exec_rets[req] != NRT_SUCCESS) {
fprintf(stderr, "Request [%x] completed with error %lu\n", req_seqs[req], exec_rets[req]);
error_count++;
}
}
if (error_count > 0) {
...
}
Finding Number of Pending Executions#
While this is susceptible to some races, here’s an example of how to estimate the outstanding requests:
nrta_seq_t last_completed = {};
const int compute_queue = 0; // Compute XU only has 1 queue
nrta_get_sequence(lnc, NRTA_XU_COMPUTE, compute_queue, &last_completed);
// sanity check: the two sequence ids should be from the same XU
assert(NRTA_SEQ_GET_XU_ID(last_submitted) == NRTA_SEQ_GET_XU_ID(last_completed));
// the sequence id is a monotone and sequential value for each XU
return last_submitted - last_completed;
This document is relevant for: Inf2, Trn1, Trn2, Trn3