我正在尝试制作一个示例代码,我从 a 复制std::deque
到 athrust::device_vector
但编译器警告calling a __host__ function from a __host__ __device__ function is not allowed
(我试图在这里复制粘贴整个错误,但它超出了问题中的字符限制)。如果需要,我可以发布更多详细信息。
代码编译成功,但我真的对这些错误感到恼火,因为它们不会发生在其他 stl 容器std::list
和std::vector
. 我想知道它们为什么会发生以及如何解决这些警告。
结果如下nvcc --version
:
nvcc:NVIDIA (R) Cuda 编译器驱动程序 版权所有 (c) 2005-2016 NVIDIA Corporation 建于 Tue_Jan_10_13:22:03_CST_2017 Cuda编译工具,发布8.0,V8.0.61
这是我的示例代码
#include <iostream>
#include <algorithm>
#include <deque>
#include <thrust/device_vector.h>
const uint size = 100;
__global__
void hello (int *a) {
a[threadIdx.x] += threadIdx.x;
}
int main (int argc, const char **argv) {
std::deque<int> a(size);
std::fill(a.begin(), a.end(), 1);
thrust::device_vector<int> a_cuda(a.begin(), a.end());
dim3 dimBlock(size, 1);
dim3 dimGrid(1, 1);
hello<<< dimGrid, dimBlock >>>(thrust::raw_pointer_cast(&a_cuda[0]));
thrust::copy(a_cuda.begin(), a_cuda.end(), a.begin());
for (const int i : a) {
std::cout << i << ' ';
}
std::cout << std::endl;
return EXIT_SUCCESS;
}
这是我用来编译的命令:
nvcc file.cu -std=c++11 -O3 -o 你好
提前致谢