载入中...
搜索中...
未找到
eve::gpgpu::Sequence类 参考

#include <Sequence.h>

struct  Impl
 

Public 成员函数

 Sequence ()
 
 ~Sequence ()
 
 Sequence (const Sequence &)=delete
 
Sequenceoperator= (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.h32 行定义.

构造及析构函数说明

◆ Sequence() [1/2]

eve::gpgpu::Sequence::Sequence ( )

在文件 Sequence.cpp49 行定义.

◆ ~Sequence()

eve::gpgpu::Sequence::~Sequence ( )

◆ Sequence() [2/2]

eve::gpgpu::Sequence::Sequence ( const Sequence )
delete

成员函数说明

◆ begin()

void eve::gpgpu::Sequence::begin ( )

Start recording. Safe to call again after submit() to reuse.

在文件 Sequence.cpp64 行定义.

引用了 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.cpp55 行定义.

引用了 eve::gpgpu::VulkanSequence::ensureReady(), eve::gpgpu::VulkanSequence::ready() , 以及 eve::gpgpu::Sequence::Impl::v.

◆ operator=()

Sequence & eve::gpgpu::Sequence::operator= ( const Sequence )
delete

◆ 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.cpp76 行定义.

引用了 shader, eve::gpgpu::Sequence::Impl::v , 以及 eve::gpgpu::vulkanSequenceRecordDispatch().

被这些函数引用 eve::tensor::GpuProgram::Impl::recordGroup().

◆ 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.cpp71 行定义.

引用了 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.cpp66 行定义.

引用了 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.cpp81 行定义.

引用了 eve::gpgpu::Sequence::Impl::v , 以及 eve::gpgpu::vulkanSequenceSubmit().

被这些函数引用 eve::tensor::GpuProgram::run().


该类的文档由以下文件生成: