载入中...
搜索中...
未找到
OnnxCompute.h
浏览该文件的文档.
1#pragma once
2#include <cstdint>
3#include <memory>
4#include <span>
5#include <string>
6#include <vector>
7#include "common/Result.h"
9
10namespace eve::tensor {
12struct OnnxKernel {
13 std::string source;
14 std::vector<std::span<const uint8_t>> inputs;
15 size_t outputBytes = 0;
16 uint32_t workItems = 0;
17};
26public:
28 virtual ~OnnxCompute() = default;
31 [[nodiscard]] virtual Result<std::vector<uint8_t>> dispatch(const OnnxKernel& kernel) = 0;
32
37 [[nodiscard]] virtual Result<OnnxBuffer> enqueue(const std::string& source, std::span<const OnnxBuffer> inputs,
38 size_t outputBytes, uint32_t workItems) {
39 OnnxKernel k{source, {}, outputBytes, workItems};
40 std::vector<std::vector<uint8_t>> copies;
41 copies.reserve(inputs.size());
42 for (const auto& input : inputs) {
43 if (input.host)
44 k.inputs.push_back(*input.host);
45 else {
46 if (!input.device)
51 auto r = input.device->readback();
52 if (!r.ok()) return Result<OnnxBuffer>::failure(r.status());
53 copies.push_back(std::move(r.value()));
54 k.inputs.push_back(copies.back());
55 }
56 }
57 auto r = dispatch(k);
58 if (!r.ok()) return Result<OnnxBuffer>::failure(r.status());
59 auto bytes = std::make_shared<const std::vector<uint8_t>>(std::move(r.value()));
61 return Result<OnnxBuffer>::success({bytes, {}, bytes->size()});
62 }
64 virtual OnnxTransferStats transferStats() const { return {}; }
65
66protected:
67 friend class OnnxModel;
69 virtual void beginRun() noexcept {}
71 virtual void endRun() noexcept {}
72};
88 uint32_t compilerWorkers = 4);
89} // namespace eve::tensor
EvpackChunkInput input
Definition Evpack.cpp:170
#define EVENGINE_API_DOMAINS
Definition Export.h:110
int inputs
Definition GridGraph.cpp:23
double r
std::uint64_t bytes
uint32_t compilerWorkers
Move-only, checked operation results for the common layer.
const UnitySourceAsset & source
static Diagnostic error(DiagnosticCode code, std::string message, std::string path={}, DiagnosticDetails details={}, std::string source={})
Construct an error diagnostic with the standard error severity.
Definition Diagnostic.h:125
Move-only operation result carrying either a value or Status.
Definition Result.h:155
static Result success(T value)
Construct a successful result owning value.
Definition Result.h:164
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
GPU execution boundary for native ONNX; retains no model and retains compiled resources for the lifet...
Definition OnnxCompute.h:25
virtual ~OnnxCompute()=default
Release device resources after all synchronous calls have returned.
virtual OnnxTransferStats transferStats() const
Observable transfer counters for the current or most recent run.
Definition OnnxCompute.h:64
virtual void beginRun() noexcept
Start a synchronous run cache scope; invoked only by OnnxModel on the device thread.
Definition OnnxCompute.h:69
virtual Result< std::vector< uint8_t > > dispatch(const OnnxKernel &kernel)=0
Compatibility-only synchronous host-byte entry point; engine dispatch delegates to enqueue.
virtual Result< OnnxBuffer > enqueue(const std::string &source, std::span< const OnnxBuffer > inputs, size_t outputBytes, uint32_t workItems)
Queue a kernel using immutable host/device buffers; no readback is required.
Definition OnnxCompute.h:37
virtual void endRun() noexcept
Retire temporary activations/recordings; compiled resources may survive for later calls.
Definition OnnxCompute.h:71
Native ONNX import and CPU/GPU execution using tensor kernels, without ONNX Runtime.
Definition OnnxModel.h:63
EVENGINE_API_DOMAINS Result< std::unique_ptr< OnnxCompute > > createOnnxGpuCompute(uint32_t compilerWorkers=4)
Create a reusable GPU session for the active engine Gpgpu Vulkan device, or an error.
Synchronous GPU kernel request; all inputs are borrowed only until dispatch returns.
Definition OnnxCompute.h:12
std::vector< std::span< const uint8_t > > inputs
Definition OnnxCompute.h:14
Actual transfers and submissions made during one GPU run.
Definition OnnxStorage.h:26