2015-07-20 3 views
0

Как я знаю, CUDA поддерживает C и C++. Но я не могу использовать C++ в своем ядре.Код C++ в ядре CUDA?

Стараюсь простой пример, как этот

__global__ void simple(){ 
    cout<<"abc"; 
} 

То есть ошибка. Но если я перейду на printf("abc");, это правильно.

Можете ли вы объяснить мне? Большое спасибо!

+1

CUDA реализует * подмножество * полного C++. – njuffa

ответ

2

С CUDA 7,5 NVidia слайдов:

C++ 11 Поддерживаемые функции:

  • авто
  • Лямбдами
  • СТД :: initializer_list
  • VARIADIC шаблоны
  • static_as serts
  • constexpr
  • Rvalue ссылки
  • диапазон, основанный на петлях

C++ не поддерживаются особенности

  • thread_local
  • Стандартные библиотеки: зЬй :: *

std::cout определен в стандартной библиотеке C++, которая не поддерживается CUDA. Использовать C printf

Из CUDA 6.5 архитектуры 'compute_11', 'compute_12', 'compute_13', 'sm_11', 'sm_12' и 'sm_13' устарели. Таким образом, nvcc будет компилировать по умолчанию CC 2.0, поддерживая поддержку printf.

Подробнее here и here

+0

Спасибо за помощь ^^ –

0

CUDA не связывает библиотеки & файлы заголовков, необходимые для использования функции cout. Тем не менее, вы можете включить использование printf()

Этот ответ объясняет процесс, который позволяет эту функцию: printing from cuda kernels цитируемый здесь для более легкого доступа:

Чтобы включить использование простого Printf() на устройствах Compute Capability> = 2.0, важно скомпилировать для CC по крайней мере CC 2.0 и отключить значение по умолчанию, которое включает сборку для CC 1.0.

Щелкните правой кнопкой мыши файл .cu в вашем проекте, выберите «Свойства», выберите «Свойства конфигурации» | CUDA C/C++ | Устройство. Нажмите на строку генерации кода, щелкните треугольник, выберите «Изменить». В диалоговом окне «Генерация кода» снимите флажок «Наследовать» из родительского или проекта по умолчанию, введите «compute_20», sm_20 в верхнем окне, нажмите «ОК».

Смежные вопросы