7
DCU工具
标题
2025-04-12 11:15:59
72

DTK 24.04.3的CUDA编译器不支持thrust库的调用吗?
卡是K100
报了如下错误

全部评论(6)
只看楼主
P
panhb
1楼
麻烦提供完整代码以供分析
2025/4/12
网
网友YKJnYE
回复 @panhb

#include "cuda_runtime.h"

#include "device_launch_parameters.h"

#include "thrust/reduce.h"

#include "thrust/device_vector.h"

#include <iostream>

__global__ void array_init(int N, double* a) {

int id = threadIdx.x + blockDim.x * blockIdx.x;

int gridStride = blockDim.x * gridDim.x;

for (int idx = id; idx < N; idx+= gridStride) {

a[idx] = (double)idx;

}

}

__global__ void array_add(int N, double* a) {

int id = threadIdx.x + blockDim.x * blockIdx.x;

int gridStride = blockDim.x * gridDim.x;

for (int idx = id; idx < N; idx += gridStride) {

a[idx] += 1.0;

}

}

int main()

{

int N = 10;

double* h_A, * d_A;

cudaMalloc((void**)&d_A, N * sizeof(double));

h_A = new double[N];

array_init<<<128,256>>>(N,d_A);

array_add<<<128,256>>>(N,d_A);

double sum_a_dev = thrust::reduce(

thrust::device_ptr <double>(d_A),

thrust::device_ptr <double>(d_A + N),

0.0,

thrust::plus<double>()

);

double min_a_dev = thrust::reduce(

thrust::device_ptr <double>(d_A),

thrust::device_ptr <double>(d_A + N),

1.0e35,

thrust::minimum<double>()

);

cudaMemcpy(h_A, d_A, N * sizeof(double), cudaMemcpyDeviceToHost);

int sum_a_hos(0.0), min_a_hos(1.0e35);

for (size_t i = 0; i < N; i++) {

sum_a_hos += h_A[i];

min_a_hos = fmin(h_A[i], min_a_hos);

}

std::cout

<< "sum on host: " << sum_a_hos << "\n"

<< "sum on device: " << sum_a_dev << "\n"

<< "min on host: " << min_a_hos << "\n"

<< "min on device: " << min_a_dev << "\n"

;

return 0;

} 您查看
2025/4/12
网
网友YKJnYE
回复 @panhb
在分析了吗
2025/4/13
网
网友dqhQpS
回复 @panhb
你好,这个问题是由于c++版本的问题,默认使用c++11,使用c++14版本可以解决上述问题(加上”-std=c++14“这个命令选项)
2025/4/14
全部5条回复
没有更多内容了
--
楼主
Level.1
0 帖子
楼主热帖
暂无数据