#include <Sequence.h>
类 | |
| struct | Impl |
Public 成员函数 | |
| Sequence () | |
| ~Sequence () | |
| Sequence (const Sequence &)=delete | |
| Sequence & | operator= (const Sequence &)=delete |
| bool | isAvailable () const |
| void | begin () |
| void | recordUpload (GpuBuffer *dst, const void *src, uint64_t nbytes, uint64_t dstOffset=0) |
| void | recordDownload (GpuBuffer *src, GpuBuffer *staging, uint64_t nbytes, uint64_t srcOffset=0) |
| void | recordDispatch (ComputeShader *shader, int groupsX, int groupsY=1, int groupsZ=1) |
| void | submit () |
详细描述
Kompute-style GPU command sequence.
Records storage-buffer transfers and compute dispatches into a single command buffer, then submits everything once. This turns an inference graph (placeholder uploads -> N fused kernel dispatches -> output download) from N+2 separate record/submit/wait round trips into one GPU submission.
Typical usage:
seq->begin(); seq->recordUpload(inputBuffer, inputData, nbytes); seq->recordDispatch(shaderA, groupsA); // shader bindings/push seq->recordDispatch(shaderB, groupsB); // constants already set seq->recordDownload(outputBuffer, staging, nbytes); seq->submit(); // one submit, waits once staging->downloadBytes(dst, nbytes); // host-visible memcpy
A Sequence is reusable: call begin() again after submit(). Shaders keep their bindings between records; only buffers they reference may be re-bound between dispatches.
在文件 Sequence.h 第 32 行定义.
构造及析构函数说明
◆ Sequence() [1/2]
| eve::gpgpu::Sequence::Sequence | ( | ) |
在文件 Sequence.cpp 第 49 行定义.
◆ ~Sequence()
| eve::gpgpu::Sequence::~Sequence | ( | ) |
在文件 Sequence.cpp 第 50 行定义.
引用了 eve::gpgpu::Sequence::Impl::v , 以及 eve::gpgpu::vulkanSequenceDestroy().
◆ Sequence() [2/2]
|
delete |
成员函数说明
◆ begin()
| void eve::gpgpu::Sequence::begin | ( | ) |
Start recording. Safe to call again after submit() to reuse.
在文件 Sequence.cpp 第 64 行定义.
引用了 eve::gpgpu::Sequence::Impl::v , 以及 eve::gpgpu::vulkanSequenceBegin().
被这些函数引用 eve::tensor::GpuProgram::run().
◆ isAvailable()
| bool eve::gpgpu::Sequence::isAvailable | ( | ) | const |
True when the active backend (Vulkan) supports command recording.
在文件 Sequence.cpp 第 55 行定义.
引用了 eve::gpgpu::VulkanSequence::ensureReady(), eve::gpgpu::VulkanSequence::ready() , 以及 eve::gpgpu::Sequence::Impl::v.
◆ operator=()
◆ recordDispatch()
| void eve::gpgpu::Sequence::recordDispatch | ( | ComputeShader * | shader, |
| int | groupsX, | ||
| int | groupsY = 1, |
||
| int | groupsZ = 1 |
||
| ) |
Record a compute dispatch using the shader's current bindings/push constants.
在文件 Sequence.cpp 第 76 行定义.
引用了 shader, eve::gpgpu::Sequence::Impl::v , 以及 eve::gpgpu::vulkanSequenceRecordDispatch().
◆ recordDownload()
| void eve::gpgpu::Sequence::recordDownload | ( | GpuBuffer * | src, |
| GpuBuffer * | staging, | ||
| uint64_t | nbytes, | ||
| uint64_t | srcOffset = 0 |
||
| ) |
Record a device->host copy into staging (a "staging" usage buffer). Read the staging buffer after submit().
在文件 Sequence.cpp 第 71 行定义.
引用了 eve::gpgpu::Sequence::Impl::v , 以及 eve::gpgpu::vulkanSequenceRecordDownload().
被这些函数引用 eve::tensor::GpuProgram::run().
◆ recordUpload()
| void eve::gpgpu::Sequence::recordUpload | ( | GpuBuffer * | dst, |
| const void * | src, | ||
| uint64_t | nbytes, | ||
| uint64_t | dstOffset = 0 |
||
| ) |
Record a host->device copy. src is memcpy'd into an internal host-visible staging buffer immediately, so it only needs to stay valid until this call returns.
在文件 Sequence.cpp 第 66 行定义.
引用了 eve::gpgpu::Sequence::Impl::v , 以及 eve::gpgpu::vulkanSequenceRecordUpload().
被这些函数引用 eve::tensor::GpuProgram::run().
◆ submit()
| void eve::gpgpu::Sequence::submit | ( | ) |
End recording, submit the whole sequence once, and wait for completion.
在文件 Sequence.cpp 第 81 行定义.
引用了 eve::gpgpu::Sequence::Impl::v , 以及 eve::gpgpu::vulkanSequenceSubmit().
被这些函数引用 eve::tensor::GpuProgram::run().
该类的文档由以下文件生成:
- src/modules/gpgpu/Sequence.h
- src/modules/gpgpu/Sequence.cpp