Class: SGC::Cuda::CudaStream

Inherits:
Object
  • Object
show all
Defined in:
lib/cuda/runtime/stream.rb

Class Method Summary (collapse)

Instance Method Summary (collapse)

Class Method Details

+ (CudaStream) create

Create and return a CUDA stream.

Returns:



36
37
38
39
40
41
# File 'lib/cuda/runtime/stream.rb', line 36

def self.create
    p = FFI::MemoryPointer.new(:CudaStream)
    status = API::cudaStreamCreate(p)
    Pvt::handle_error(status, "Failed to create CUDA stream.")
    new(p)
end

+ (Object) wait_event(event) + (Object) wait_event(event, flags)

Let all future operations submitted to any CUDA stream wait until event complete before beginning execution.

Parameters:

  • event (CudaEvent)

    The event to wait for.

  • flags (Integer) (defaults to: 0)

    Currently flags must be set to zero.



92
93
94
95
96
# File 'lib/cuda/runtime/stream.rb', line 92

def self.wait_event(event, flags = 0)
    status = API::cudaStreamWaitEvent(nil, event.to_api, flags)
    Pvt::handle_error(status, "Failed to make any CUDA stream's future operations to wait event: flags = #{flags}.")
    nil
end

Instance Method Details

- (Object) destroy

Destroy this CUDA stream.



45
46
47
48
49
50
# File 'lib/cuda/runtime/stream.rb', line 45

def destroy
    status = API::cudaStreamDestroy(self.to_api)
    Pvt::handle_error(status, "Failed to destroy this CUDA stream.")
    API::write_cudastream(@pstream, 0)
    nil
end

- (Boolean) query

Return true if all operations in this CUDA stream have completed. Otherwise, return false.

Returns:

  • (Boolean)

    Return true if all operations in this CUDA stream have completed. Otherwise, return false.

Raises:

  • (CudaStandardError)


54
55
56
57
58
59
60
61
62
63
# File 'lib/cuda/runtime/stream.rb', line 54

def query
    status = API::cudaStreamQuery(self.to_api)
    if status == Pvt::CUDA_SUCCESS
        return true
    elsif status == Pvt::CUDA_ERROR_NOT_READY
        return false
    end
    Pvt::handle_error(status, "Failed to query stream.")
    raise CudaStandardError, "Error handling fails to catch this error."
end

- (CudaStream) synchronize

Block the calling CPU thread until all operations in this CUDA stream complete.

Returns:



68
69
70
71
72
# File 'lib/cuda/runtime/stream.rb', line 68

def synchronize
    status = API::cudaStreamSynchronize(self.to_api)
    Pvt::handle_error(status)
    self
end

- (CudaStream) wait_event(event) - (CudaStream) wait_event(event, flags)

Let all future operations submitted to this CUDA stream wait until event complete before beginning execution.

Parameters:

  • event (CudaEvent)

    The event to wait for.

  • flags (Integer) (defaults to: 0)

    Currently flags must be set to zero.

Returns:



81
82
83
84
85
# File 'lib/cuda/runtime/stream.rb', line 81

def wait_event(event, flags = 0)
    status = API::cudaStreamWaitEvent(self.to_api, event.to_api, flags)
    Pvt::handle_error(status, "Failed to make this CUDA stream's future operations to wait event: flags = #{flags}.")
    self
end