67template <
typename T,
size_t str
ide>
75 for (
cs_lnum_t id = blockIdx.x * blockDim.x + threadIdx.x;
id < n;
76 id += blockDim.x * gridDim.x) {
77 for (
int j = 0; j < size_arrs; j++)
78 for (
size_t k = 0;
k < stride;
k++) {
79 array_ptrs[j][
id*stride +
k] = ref_val;
84template <
typename T,
size_t str
ide>
91 for (
cs_lnum_t id = blockIdx.x * blockDim.x + threadIdx.x;
id < n;
92 id += blockDim.x * gridDim.x) {
93 for (
int j = 0; j < size_arrs; j++)
94 for (
size_t k = 0;
k < stride;
k++) {
95 array_ptrs[j][
id*stride +
k] = ref_val[
k];
118template <
typename T,
size_t stride,
typename... Arrays>
126 const long block_size_ = 256;
127 const long grid_size_ = (n_elts % block_size_) ?
128 n_elts/block_size_ + 1 : n_elts/block_size_;
130 const int size_arrs =
sizeof...(arrays);
131 T** array_ptrs = NULL;
135 T* _array_ptrs[] = {arrays ...};
137 for (
int j = 0; j < size_arrs; j++)
138 array_ptrs[j] = _array_ptrs[j];
140 cuda_kernel_set_value<T, stride><<<grid_size_, block_size_, 0, stream>>>
141 (n_elts, ref_val, size_arrs, array_ptrs);
143 CS_CUDA_CHECK(cudaStreamSynchronize(stream));
144 CS_CUDA_CHECK(cudaGetLastError());
167template <
typename T,
size_t stride,
typename... Arrays>
174 const long block_size_ = 256;
175 const long grid_size_ = (n_elts % block_size_) ?
176 n_elts/block_size_ + 1 : n_elts/block_size_;
178 const int size_arrs =
sizeof...(arrays);
179 T** array_ptrs = NULL;
182 T* _array_ptrs[] = {arrays ...};
184 for (
int j = 0; j < size_arrs; j++)
185 array_ptrs[j] = _array_ptrs[j];
187 cuda_kernel_set_value<T, stride><<<grid_size_, block_size_, 0, stream>>>
188 (n_elts, ref_val, size_arrs, array_ptrs);
190 CS_CUDA_CHECK(cudaStreamSynchronize(stream));
191 CS_CUDA_CHECK(cudaGetLastError());
217 cudaMemcpyAsync(dest, src, size*
sizeof(T),
218 cudaMemcpyDeviceToDevice, stream);
void cs_array_copy(cudaStream_t stream, const cs_lnum_t size, const T *src, T *dest)
Copy values from an array to another of the same dimensions.
Definition: cs_array_cuda.h:212
void cs_arrays_set_value(cudaStream_t stream, const cs_lnum_t n_elts, const T *ref_val, Arrays &&... arrays)
Assign values to all elements of multiple arrays. ref_val is input as a pointer or an array.
Definition: cs_array_cuda.h:120
__global__ void cuda_kernel_set_value(cs_lnum_t n, const T ref_val, const int size_arrs, T **array_ptrs)
Definition: cs_array_cuda.h:69
#define CS_FREE_HD(_ptr)
Definition: cs_base_accel.h:52
int cs_lnum_t
local mesh entity id
Definition: cs_defs.h:335
@ k
Definition: cs_field_pointer.h:72
#define CS_MALLOC_HD(_ptr, _ni, _type, _mode)
Definition: cs_mem.h:99
#define cs_alloc_mode
Definition: cs_mem.h:186