我使用的是Visual Studio 2017,平台工具集v141和CUDA Toolkit 9.2。我注意到在使用nvcc编译thrust :: device_vector时,不存在移动构造函数和移动赋值。原因是检查Thrust lib中__cplusplus宏的值的条件。
正如在docs中所解释的,我将C ++语言标准设置为/ std:c ++ 17并另外设置/ Zc:__ cplusplus以便在msvc中正确定义宏,即201703.但是对于由nvcc编译的文件,宏是设定为199711。
我创建了一个简单的案例来重现这个问题。
test.cuh:
#pragma once
#include <iostream>
void test();
test.粗:
#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的解决方案。
我已经设法通过将-Xcompiler / Zc:__ cplusplus传递给nvcc来将__cplusplus设置为201402。由于nvcc只支持C ++ 14,这可能是我用CUDA 9.2最好的。