我正在使用Visual Studio 2017,平台工具集v141和CUDA Toolkit 9.2。 我注意到用nvcc编译 thrust :: device_vector 时,不存在move构造函数和move分配。原因是检查Thrust库中 __ cplusplus 宏的值的条件。
如docs中所述,我将C ++语言标准设置为 / std:c ++ 17 ,并另外设置了 / Zc:__ cplusplus 在msvc中正确定义了宏,即 201703 。 但是,对于由nvcc编译的文件,宏设置为 199711 。
我创建了一个简单的案例来再现问题。
test.cuh:
#pragma once
#include <iostream>
void test();
test.cu:
#include "test.cuh"
void test()
{
std::cout << "CU file: " << __cplusplus << std::endl;
}
main.cpp:
#include "test.cuh"
int main()
{
test();
std::cout << "CPP file: " << __cplusplus << std::endl;
return 0;
}
输出:
CU file: 199711
CPP file: 201703
我正在寻找一种同样适用于使用FindCUDA的CMake的解决方案。