gpt4 book ai didi

cuda - 插入cuda内核

转载 作者:行者123 更新时间:2023-12-05 01:00:37 27 4
gpt4 key购买 nike

我的机器 (Linux SL7) 上也安装了 cuda 8.0,我已经下载了 thrust 1.8.1 并将现有的 thrust 库替换为新的 1.8.1。

据我所知,从 thrust 1.8 开始支持 thrust 并且可以在内核中使用。我从他们的网站上引用:

Thrust 1.8.0 introduces support for algorithm invocation from CUDA __device__ code, support for CUDA streams, and algorithm performance improvements. Users may now invoke Thrust algorithms from CUDA __device__ code

但是,当我使用 Nsight eclipse 构建应用程序时,它向我显示此错误:

calling a __host__ function("thrust::sort") from a __global__ function("mykernel") is not allowed.

有什么建议吗?

这是我的代码:

#include <iostream>
#include <numeric>
#include <stdlib.h>
#include <stdio.h>
#include <cuda_runtime.h>
#include <cuda.h>
#include <thrust/sort.h>
#include <thrust/execution_policy.h>

__global__ void mykernel(int* a, int* b)
{

thrust::sort(a, a + 10);
}

int main(void)
{
int a[10] = { 0, 9, 7, 3, 1, 6, 4, 5, 2, 8 };
int b[10];
int *d_a, *d_c;

cudaMalloc((void**)&d_a, 10 * sizeof(int));
cudaMalloc((void**)&d_c, 10 * sizeof(int));

std::cout << "A\n";
for (int i = 0; i < 10; ++i) {
std::cout << a[i] << " ";
}

cudaMemcpy(d_a, a, 10 * sizeof(int), cudaMemcpyHostToDevice);
mykernel<<<1, 1> > >(d_a, d_c);
cudaMemcpy(a, d_c, 10 * sizeof(int), cudaMemcpyDeviceToHost);
std::cout << "\nA\n";
for (int i = 0; i < 10; ++i) {
std::cout << a[i] << " ";
}

cudaFree(d_a);
cudaFree(d_c);
return 0;
}

最佳答案

你是对的。 Thrust 1.8 和更新版本支持设备代码中的算法调用。但是,要利用这一点,您需要使用新的 execution policies使库在设备代码中正常工作。

如果你使用sort的版本其中包括这样的执行策略:

__global__ void mykernel(int* a, int* b)
{
thrust::sort(thrust::device, a, a + 10);
}

您应该会发现代码可以正确编译。

关于cuda - 插入cuda内核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42075470/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com