cuda::pipeline_shared_state
Defined in header <cuda/pipeline>
:
template <cuda::thread_scope Scope, cuda::std::uint8_t StagesCount>
class cuda::pipeline_shared_state {
public:
__host__ __device__
pipeline_shared_state();
~pipeline_shared_state() = default;
pipeline_shared_state(pipeline_shared_state const&) = delete;
pipeline_shared_state(pipeline_shared_state&&) = delete;
};
The class template cuda::pipeline_shared_state
is a storage type used to coordinate the threads participating
in a cuda::pipeline
.
Template Parameters
|
A cuda::thread_scope denoting a scope including all
the threads participating in the |
|
The number of stages for the pipeline. |
Member Functions
Member function |
Description |
---|---|
|
Constructs a |
|
Destroys the |
|
|
Constructor
template <cuda::thread_scope Scope, cuda::std::uint8_t StagesCount>
__host__ __device__
cuda::pipeline_shared_state();
template <cuda::thread_scope Scope, cuda::std::uint8_t StagesCount>
cuda::pipeline_shared_state(cuda::pipeline_shared_state const&) = delete;
template <cuda::thread_scope Scope, cuda::std::uint8_t StagesCount>
cuda::pipeline_shared_state(cuda::pipeline_shared_state&&) = delete;
Construct a cuda::pipeline
shared state object.
#include <cuda/pipeline>
#pragma nv_diag_suppress static_var_with_dynamic_init
__global__ void example_kernel() {
__shared__ cuda::pipeline_shared_state<cuda::thread_scope_block, 2> shared_state;
}
NVCC __shared__
Initialization Warnings
When using libcu++ with NVCC, a __shared__
cuda::pipeline_shared_state
will lead to the following warning
because __shared__
variables are not initialized:
warning: dynamic initialization is not supported for a function-scope static
__shared__ variable within a __device__/__global__ function
It can be silenced using #pragma nv_diag_suppress static_var_with_dynamic_init
.
Example
#include <cuda/pipeline>
// Disables `pipeline_shared_state` initialization warning.
#pragma nv_diag_suppress static_var_with_dynamic_init
__global__ void example_kernel(char* device_buffer, char* sysmem_buffer) {
// Allocate a 2 stage block scoped shared state in shared memory.
__shared__ cuda::pipeline_shared_state<cuda::thread_scope_block, 2> pss0;
// Allocate a 2 stage block scoped shared state in device memory.
auto* pss1 = new cuda::pipeline_shared_state<cuda::thread_scope_block, 2>;
// Construct a 2 stage device scoped shared state in device memory.
auto* pss2 =
new (device_buffer) cuda::pipeline_shared_state<cuda::thread_scope_device, 2>;
// Construct a 2 stage system scoped shared state in system memory.
auto* pss3 =
new (sysmem_buffer) cuda::pipeline_shared_state<cuda::thread_scope_system, 2>;
}