Skip to content

Commit df8c763

Browse files
authored
Merge pull request #1043 from I2PC/agm_cuda_12_5
CUDA 12.5 error: Lambdas __device__ on Thrust requires __host__
2 parents 5fdba38 + fab72e9 commit df8c763

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

src/xmipp/libraries/reconstruction_cuda/cuda_volume_restoration_kernels.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ void VolumeRestorationKernels<T>::restorationSigmaCostError(T& error, const std:
172172
const vec2_type<T>* __restrict__ d_fV1 = (vec2_type<T>*)_d_fV1;
173173
const vec2_type<T>* __restrict__ d_fV2 = (vec2_type<T>*)_d_fV2;
174174

175-
auto error_func = [=] __device__ (int n) -> T {
175+
auto error_func = [=] __host__ __device__ (int n) -> T {
176176
const T R2n = d_R2[n];
177177
if (R2n <= 0.25) {
178178
const T H1 = exp(K1 * R2n);
@@ -195,7 +195,7 @@ void VolumeRestorationKernels<T>::restorationSigmaCostError(T& error, const std:
195195

196196
template< typename T >
197197
void VolumeRestorationKernels<T>::computeDiffAndAverage(const T* __restrict__ d_V1, const T* __restrict__ d_V2, T* __restrict__ d_S, T* __restrict__ d_N, size_t volume_size) {
198-
auto k = [=] __device__ (int n) {
198+
auto k = [=] __host__ __device__ (int n) {
199199
d_N[n] = d_V1[n] - d_V2[n];
200200
d_S[n] = (d_V1[n] + d_V2[n]) * static_cast<T>(0.5);
201201
};
@@ -222,7 +222,7 @@ template< typename T >
222222
std::pair<T, T> VolumeRestorationKernels<T>::computeAvgStd(const T* __restrict__ d_N, size_t volume_size) {
223223
const T avg = thrust::reduce(thrust::device, d_N, d_N + volume_size);
224224

225-
auto square_kernel = [=] __device__ (T x) -> T {
225+
auto square_kernel = [=] __host__ __device__ (T x) -> T {
226226
return x * x;
227227
};
228228

@@ -233,7 +233,7 @@ std::pair<T, T> VolumeRestorationKernels<T>::computeAvgStd(const T* __restrict__
233233

234234
template< typename T >
235235
std::pair<T, T> VolumeRestorationKernels<T>::computeAvgStdWithMask(const T* __restrict__ d_N, const int* __restrict__ d_mask, size_t mask_size, size_t volume_size) {
236-
auto masked_k = [=] __device__ (int n) -> T {
236+
auto masked_k = [=] __host__ __device__ (int n) -> T {
237237
if (d_mask[n]) {
238238
return d_N[n];
239239
} else {
@@ -244,7 +244,7 @@ std::pair<T, T> VolumeRestorationKernels<T>::computeAvgStdWithMask(const T* __re
244244
const T avg = thrust::transform_reduce(thrust::device, thrust::counting_iterator<int>(0), thrust::counting_iterator<int>(volume_size), masked_k,
245245
static_cast<T>(0), thrust::plus<T>());
246246

247-
auto masked_square_k = [=] __device__ (int n) -> T {
247+
auto masked_square_k = [=] __host__ __device__ (int n) -> T {
248248
if (d_mask[n]) {
249249
return d_N[n] * d_N[n];
250250
} else {
@@ -260,7 +260,7 @@ std::pair<T, T> VolumeRestorationKernels<T>::computeAvgStdWithMask(const T* __re
260260

261261
template< typename T >
262262
void VolumeRestorationKernels<T>::computeDifference(T* __restrict__ d_V1, T* __restrict__ d_V2, const T* __restrict__ d_S, const T* __restrict__ d_N, T k, size_t volume_size) {
263-
auto ker = [=] __device__ (int n) {
263+
auto ker = [=] __host__ __device__ (int n) {
264264
const T Nn = d_N[n];
265265
const T w = exp(k * Nn * Nn);
266266
const T s = d_S[n];
@@ -278,7 +278,7 @@ size_t VolumeRestorationKernels<T>::computeMaskSize(const int* __restrict__ d_ma
278278

279279
template< typename T >
280280
void VolumeRestorationKernels<T>::multiplyByConstant(T* __restrict__ d_array, T c, size_t volume_size) {
281-
auto k = [=] __device__ (int n) {
281+
auto k = [=] __host__ __device__ (int n) {
282282
d_array[n] = d_array[n] * c;
283283
};
284284

0 commit comments

Comments
 (0)