Ответ 1
Вам, вероятно, придется расколоть main.cpp из ваших других .cu вот так:
others.hpp:
void others();
others.cu:
#include "others.hpp"
#include <boost/typeof/std/utility.hpp>
#include <thrust/device_vector.h>
void others() {
thrust::device_vector<int> dv(10);
BOOST_AUTO(iter, dv.begin()); // regular C++
}
main.cpp:
#include "others.hpp"
int main() {
others();
return 0;
}
Этот конкретный ответ показывает, что компиляция с официально поддерживаемой версией gcc (как правильно утверждал Роберт Кровелла) должна работать хотя бы для кода С++ 11 в main.cpp:
g++ -std=c++0x -c main.cpp
nvcc -arch=sm_20 -c others.cu
nvcc -lcudart -o test main.o others.o
(протестирован на Debian 8 с nvcc 5.5 и gcc 4.7.3).
Чтобы ответить на ваш основной вопрос: я не знаю, что можно использовать С++ 11 в .cu файлах с CUDA 5.5 в Linux (и я не знал, что показан пример с С++ 11 на стороне хоста, - в соответствии с MSVC). Я даже подал запрос функции для поддержки constexpr, которая все еще открыта.
CUDA programming для CUDA 5.5:
Для хост-кода nvcc поддерживает любую часть С++ ISO/IEC 14882: 2003, который поддерживает компилятор хоста С++.
Для кода устройства nvcc поддерживает функции, показанные в коде Образцы с некоторыми ограничениями, описанными в Ограничениях; Это не поддерживать информацию о типе времени выполнения (RTTI), обработку исключений и Стандартная библиотека С++.
Во всяком случае, можно использовать некоторые из возможностей С++ 11, таких как auto в ядрах, например. с boost:: auto. Как внешний вид, другие возможности С++ 11, такие как threads, вряд ли могут оказаться в CUDA, и я еще не слышал официальных планов о них (по суперкомпьютер 2013).
Бесстыдный плагин: если вас интересует больше этих твиков, не стесняйтесь смотреть в нашу библиотеку libPMacc, которая обеспечивает мульти -GPU и абстракции частиц для моделирования. Мы реализовали lambda, STL-подобную концепцию доступа для матриц 1-3D и другие полезные материалы.
Все самое лучшее, Axel
Обновление. Поскольку поддержка CUDA 7.0 С++ 11 в ядрах была официально добавлена. Поскольку BenC указал нам правильно, части этой функции уже были добавлены молча в CUDA 6.5.