pub struct Stream<'a> { /* private fields */ }
Expand description
A stream of asynchronous operations operating in a Context
Implementations§
Source§impl<'a> Stream<'a>
impl<'a> Stream<'a>
Sourcepub fn new(_handle: &Rc<Handle<'a>>) -> CudaResult<Self>
pub fn new(_handle: &Rc<Handle<'a>>) -> CudaResult<Self>
Creates a new stream for a handle
Sourcepub fn sync(&mut self) -> CudaResult<()>
pub fn sync(&mut self) -> CudaResult<()>
Drives all pending tasks on the stream to completion
Sourcepub fn is_synced(&self) -> CudaResult<bool>
pub fn is_synced(&self) -> CudaResult<bool>
Returns Ok(true)
if the stream has finished processing all queued tasks.
Sourcepub fn wait_32<'b>(
&'b mut self,
addr: &'b DevicePtr<'a>,
value: u32,
mode: WaitValueMode,
flush: bool,
) -> CudaResult<()>
pub fn wait_32<'b>( &'b mut self, addr: &'b DevicePtr<'a>, value: u32, mode: WaitValueMode, flush: bool, ) -> CudaResult<()>
Wait for a 4-byte value in a specific location to compare to value
by mode
.
Sourcepub fn wait_64<'b>(
&mut self,
addr: &'b DevicePtr<'a>,
value: u64,
mode: WaitValueMode,
flush: bool,
) -> CudaResult<()>
pub fn wait_64<'b>( &mut self, addr: &'b DevicePtr<'a>, value: u64, mode: WaitValueMode, flush: bool, ) -> CudaResult<()>
Wait for a 8-byte value in a specific location to compare to value
by mode
.
Sourcepub fn write_32<'b>(
&'b mut self,
addr: &'b DevicePtr<'a>,
value: u32,
no_memory_barrier: bool,
) -> CudaResult<()>
pub fn write_32<'b>( &'b mut self, addr: &'b DevicePtr<'a>, value: u32, no_memory_barrier: bool, ) -> CudaResult<()>
Writes a 4-byte value to device memory asynchronously
Sourcepub fn write_64<'b>(
&'b mut self,
addr: &'b DevicePtr<'a>,
value: u64,
no_memory_barrier: bool,
) -> CudaResult<()>
pub fn write_64<'b>( &'b mut self, addr: &'b DevicePtr<'a>, value: u64, no_memory_barrier: bool, ) -> CudaResult<()>
Writes a 8-byte value to device memory asynchronously
Sourcepub fn callback<F: FnOnce() + Send + Sync>(
&mut self,
callback: F,
) -> CudaResult<()>
pub fn callback<F: FnOnce() + Send + Sync>( &mut self, callback: F, ) -> CudaResult<()>
Calls a callback closure function callback
once all prior tasks in the Stream have been driven to completion.
Note that it is a memory leak to drop the stream before this callback is called.
The callback is not guaranteed to be called if the stream errors out.
Also note that it is erroneous in libcuda
to make any calls to libcuda
from this callback.
The callback is called from a CUDA internal thread, however this is an implementation detail of libcuda
and not guaranteed.
Sourcepub unsafe fn launch<'b, D1: Into<Dim3>, D2: Into<Dim3>, K: KernelParameters>(
&mut self,
f: &Function<'a, 'b>,
grid_dim: D1,
block_dim: D2,
shared_mem_size: u32,
parameters: K,
) -> CudaResult<()>
pub unsafe fn launch<'b, D1: Into<Dim3>, D2: Into<Dim3>, K: KernelParameters>( &mut self, f: &Function<'a, 'b>, grid_dim: D1, block_dim: D2, shared_mem_size: u32, parameters: K, ) -> CudaResult<()>
Launch a CUDA kernel on this Stream
with the given grid_dim
grid dimensions, block_dim
block dimensions, shared_mem_size
allocated shared memory pool, and parameters
kernel parameters.
It is undefined behavior to pass in parameters
that do not conform to the passes CUDA kernel. If the argument count is wrong, CUDA will generally throw an error.
If your parameters
is accurate to the kernel definition, then this function is otherwise safe.