CUDA не может распознать пространство имен nvcuda во время компиляции - PullRequest
0 голосов
/ 05 декабря 2018

Я следую учебному пособию CUDA по использованию тензорных ядер V100.Мой код MWE:

$ cat src/wmma.cu
#include <cuda_runtime_api.h>
#include <mma.h>
using namespace nvcuda;
int main(void){
    return 0;
} 

Компиляция с помощью CUDA 9.0,

$ nvcc src/wmma.cu
src/wmma.cu(10): error: name must be a namespace name

1 error detected in the compilation of "/gpfs0/scratch/1430008/tmpxft_0002054c_00000000-8_wmma.cpp1.ii".

Если я добавлю опцию --gpu-architecture=compute_62, я все равно получаю ту же ошибку.CPATH установлен на /opt/cuda/9.0/include:, поэтому я считаю, что у меня нет проблем с поиском файлов заголовков.

Когда я закомментирую using namespace nvcuda, он компилируется и выполняется так, как ожидается.

ВОПРОС:

  1. Почему не удается выполнить компиляцию этого тривиального кода?

1 Ответ

0 голосов
/ 05 декабря 2018

Почему моя компиляция этого тривиального кода не удалась?

Поскольку необходимо указать архитектуру компиляции, которая поддерживает эти функции, в противном случае они не определены:

$ cat nvnvnv.cu 
#include <cuda_runtime_api.h>
#include <mma.h>
using namespace nvcuda;
int main(void){
    return 0;
} 


$ nvcc nvnvnv.cu 
nvnvnv.cu(3): error: name must be a namespace name

1 error detected in the compilation of "/tmp/tmpxft_00005444_00000000-8_nvnvnv.cpp1.ii".

Архитектура компиляции по умолчанию sm_30 на компиляторе, который я использую (CUDA 9.2).Если указать правильную архитектуру, ошибка исчезнет:

$ nvcc -arch=sm_70 nvnvnv.cu 

$

Ссылка на (очень полезный) тег CUDA wiki :

Если вы обнаружите, чтовы получаете синтаксические ошибки по ключевым словам CUDA при компиляции кода устройства, убедитесь, что вы компилируете с использованием nvcc и что ваш исходный файл имеет ожидаемое расширение .cu.Если вы обнаружите, что функции устройства CUDA или пространства имен функций, которые вы ожидаете работать, не найдены (элементарные функции, функции голосования деформации, арифметика с половинной точностью, кооперативные группы и т. Д.), Убедитесь, что вы явно передаете аргументы компиляции, которые включают параметры архитектуры, которыеподдерживать эти функции.

...