(CUDA) nvcc не может правильно проанализировать путь набора инструментов в моем проекте, в то время как в примере проекта он может - PullRequest
1 голос
/ 07 марта 2011

Я пытался добавить файл .cu в свой собственный (dll) проект win32 и скомпилировать его, используя VS2008 на Windows7.Мне удалось скомпилировать .cu в примере проекта cppIntegration, но в моем проекте возникли проблемы.

Сначала я получил ошибку "Не знаю, что делать с" Инструментарием ...«Кажется, у nvcc возникли проблемы с тем, что в наборе инструментов есть пробелы. При переименовании папки набора инструментов NVIDIA, чтобы в ней не было пробелов, я получил ту же ошибку, но теперь он говорит то же самое, начиная с« Файлы », которыеявляется частью папки «Program Files», в которой также есть пробел.

Обратите внимание, что в cppIntegration он работал правильно, хотя у него был точно такой же путь. Поэтому я выбрал путь набора инструментов SymbLink, и теперь я получилдругая ошибка при компиляции файла .cu в моем проекте (но не в cppIntegration). «Не удалось найти указанный путь». Я предполагаю, что это относится к тому же пути, который я только что использовал SymbLinked.

Я считаю, что мне нужноизменить что-то в свойствах проекта. Может быть, проблема в том, что я создаю dll. Возможно, это связано с 64-битной версией CUDAв то время как я делаю win32 в 32-битном (возможно?).

Спасибо.

Обновление

Это вывод, когда я компилирую в VS2008.

Compiling with CUDA Build Rule...
1>"\MyCUDA\CUDA\v3.2\\bin\nvcc.exe"   

-gencode = arch = compute_10, code = \ "sm_10, compute_10 \" -gencode = arch = compute_20, code = \ "sm_20, compute_20 \" --machine 32 -ccbin"C: \ Program Files (x86) \ Microsoft Visual Studio 9.0 \ VC \ bin" -Xcompiler "/ EHsc / W3 / nologo / O2 / Zi / MT" -I "\ MyCUDA \ CUDA \ v3.2 \ include" -maxrregcount = 32 --compile -o ". \ Intermediate \ Release / Decoder.cu.obj" Decoder.cu

1> Система не может найти указанный путь.

1> Проект:ошибка PRJ0019: инструмент вернул код ошибки из «Компиляция с правилом сборки CUDA ...»

Это компиляция для cppIntegration:

"\ MyCUDA \ CUDA\ v3.2 \ bin \ nvcc.exe "
-gencode = arch = compute_10, code = \" sm_10, compute_10 \ "-gencode = arch = compute_20, code = \" sm_20, compute_20 \ "--machine 32-ccbin "C: \ Program Files (x86) \ Microsoft Visual Studio 9.0 \ VC \ bin" -Xcompiler "/ EHsc/ W3 / nologo / O2 / Zi / MT "-I" \ MyCUDA \ CUDA \ v3.2 \ include "-maxrregcount = 32 - compile -o" Release / cppIntegration.cu.obj "cppIntegration.cu

Ответы [ 3 ]

2 голосов
/ 07 марта 2011

Я решил свою проблему. Дело в том, что в моей переменной окружения CUDA_PATH была \ MyCUDA. Это работало для cppIntegration, потому что это было на C :, но не для моего проекта, потому что это было на E :. Поэтому мне пришлось добавить C: \ MyCUDA. Это все еще не объясняет, почему nvcc не нравятся пробелы в пути.

Надеюсь, кто-нибудь найдет это полезным.

1 голос
/ 05 декабря 2011

У меня возникла эта проблема с VS2008, когда я указал путь включения, который заканчивался на "\".

Например, я установил Свойство конфигурации CUDA RuntimeAPI / General / Additional Включить каталоги в c: \ projects \ cuda_by_example.Инструмент сгенерировал командную строку nvcc, которая включала следующее:

... -I "c: \ projects \ cuda_by_example \" -I "C: \ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v4.0\ include "...

Я думаю, что последний обратный слеш первого параметра действовал, чтобы избежать двойной кавычки, а nvcc рассматривал начало следующего параметра как часть пути включения.После разбора следующего параметра было сгенерировано сообщение «Не знаю, что делать с инструментарием ...».

Удаление последней косой черты в спецификации каталога позволило решить проблему.

0 голосов
/ 07 марта 2011

Как насчет указания всех проблемных путей в кавычках? В большинстве случаев это решает проблему.

В противном случае, я думаю, вы должны предоставить нам именно то, что вы делаете (точные командные строки и т. Д.). Обычно общая идея в порядке, и проблема заключается в деталях.

...