Visual Studio 2017 msvc vs nvcc __cplusplus несоответствие макроса - PullRequest
0 голосов
/ 13 сентября 2018

Я использую Visual Studio 2017, набор инструментов платформы v141 и CUDA Toolkit 9.2. Я заметил, что конструктор перемещения и назначение перемещения отсутствуют при компиляции thrust :: device_vector с помощью nvcc. Причиной является условие, которое проверяет значение макроса __ cplusplus в библиотеке Thrust.

Как объяснено в документах , я установил C ++ Language Standard на / 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

Я ищу решение, применимое также к CMake с FindCUDA.

1 Ответ

0 голосов
/ 14 сентября 2018

Мне удалось установить __cplusplus на 201402, передав -Xcompiler / Zc: __cplusplus в nvcc. Поскольку nvcc поддерживает только до C ++ 14, это, вероятно, лучшее, что я могу получить с CUDA 9.2.

...