Как установить флаги CUDA в Visual Studio

Я пытаюсь измерить разлив регистра в моем проекте CUDA в Visual Studio. Для этого я использую флаг –Xptxas –v,–abi=no, как написано здесь http://on-demand.gputechconf.com/gtc-express/2011/presentations/register_spilling.pdf

В моем проекте VS 2010 в свойствах я попытался поставить этот флаг:

  1. properties/cuda/host/дополнительные флаги компиляции - безрезультатно.
  2. свойства/cuda/командная строка. Компиляция завершается с -1.
  3. свойства /c/командная строка. Ошибка компиляции

В свойствах Cuda я также установил флаги «Да»: генерировать отладочную информацию о графическом процессоре и подробный вывод PTXAS. Я ищу вывод в окне вывода. Как это сделать правильно? У меня GPU с CC = 2.1.

РЕДАКТИРОВАТЬ: поэтому правильным местом для установки флага, как указывают ответы, является строка properties/cuda/command. Но я все еще не получаю ожидаемого результата (даже в примерах проектов). Ниже я показываю другие параметры, которые у меня есть в свойствах: cuda/device.

  1. C с чередованием в выводе PTXAS - Нет
  2. Генерация кода - Compute_20, sm_21
  3. генерировать информацию об отладке графического процессора - Да
  4. максимально используемый регистр - 0
  5. подробный вывод ptxas (да/нет - оба протестированы).

person rank1    schedule 05.08.2013    source источник


Ответы (2)


Я думаю, что шаги довольно просты. Я сделал чистую установку VS2010 Express, а затем установил CUDA 5.0 для Windows 7.

Я выбрал пример кода VectorAdd, который находится в Пакет образцов CUDA 5.0. По умолчанию мой проект настроен на компиляцию для Win32 и Debug.

Единственное изменение, которое мне пришлось сделать, это выбрать Project...Properties...CUDA C/C++...Command Line

Затем я добавил параметры -Xptxas -v в текстовое поле Addtional Options в нижней части диалогового окна свойств, например: ">

(если у вас возникли проблемы с четким изображением выше, щелкните правой кнопкой мыши изображение, затем выберите «Сохранить изображение как ...» и сохраните его на жесткий диск, а затем откройте его оттуда.)

После этого нажмите Apply и OK. Затем нажмите F7, чтобы построить проект, и вы должны увидеть такой вывод в окне Output (ваше окно вывода должно автоматически отображать вывод «Сборка» при компиляции:

1>------ Rebuild All started: Project: vectorAdd, Configuration: Debug Win32 -----
1> 
1> C:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.0\0_Simple\vectorAdd>"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\bin\nvcc.exe" -ccbin "C:\Program Files\Microsoft Visual Studio 10.0\VC\bin" -I"../../common/inc" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include" -G --keep-dir "Debug" -maxrregcount=0 --machine 32 --compile -Xptxas -v -g -DWIN32 -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MTd " -o "Win32/Debug/vectorAdd.cu.obj" "C:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.0\0_Simple\vectorAdd\vectorAdd.cu" -clean 
1> Compiling CUDA source file vectorAdd.cu...
1> 
1> C:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.0\0_Simple\vectorAdd>"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\bin\nvcc.exe" -gencode=arch=compute_10,code=\"sm_10,compute_10\" -gencode=arch=compute_20,code=\"sm_20,compute_20\" -gencode=arch=compute_30,code=\"sm_30,compute_30\" -gencode=arch=compute_35,code=\"sm_35,compute_35\" --use-local-env --cl-version 2010 -ccbin "C:\Program Files\Microsoft Visual Studio 10.0\VC\bin" -I"../../common/inc" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include" -G --keep-dir "Debug" -maxrregcount=0 --machine 32 --compile -Xptxas -v -g -DWIN32 -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MTd " -o "Win32/Debug/vectorAdd.cu.obj" "C:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.0\0_Simple\vectorAdd\vectorAdd.cu" 
1> ptxas : info : 0 bytes gmem
1> ptxas : info : Compiling entry function '_Z9vectorAddPKfS0_Pfi' for 'sm_10'
1> ptxas : info : Used 4 registers, 32 bytes smem, 4 bytes cmem[1]
1> ptxas : info : 0 bytes gmem
1> ptxas : info : Compiling entry function '_Z9vectorAddPKfS0_Pfi' for 'sm_20'
1> ptxas : info : Function properties for _Z9vectorAddPKfS0_Pfi
1> 0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
1> ptxas : info : Used 8 registers, 48 bytes cmem[0]
1> ptxas : info : 0 bytes gmem
1> ptxas : info : Compiling entry function '_Z9vectorAddPKfS0_Pfi' for 'sm_30'
1> ptxas : info : Function properties for _Z9vectorAddPKfS0_Pfi
1> 0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
1> ptxas : info : Used 8 registers, 336 bytes cmem[0]
1> ptxas : info : 0 bytes gmem
1> ptxas : info : Compiling entry function '_Z9vectorAddPKfS0_Pfi' for 'sm_35'
1> ptxas : info : Function properties for _Z9vectorAddPKfS0_Pfi
1> 0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
1> ptxas : info : Used 8 registers, 336 bytes cmem[0]
1> tmpxft_00001438_00000000-39_vectorAdd.compute_10.ii
1> vectorAdd_vs2010.vcxproj -> C:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.0\0_Simple\vectorAdd\../../bin/win32/Debug/vectorAdd.exe
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========

Учтите, что независимо от того, видите ли вы какие-либо фактические выбросы, это зависит от кода, который вы компилируете. В этом коде нет сбросов, но если бы они были, компилятор сообщил бы об этом именно здесь.

Вам не нужна опция -abi=no, чтобы увидеть результаты компилятора.

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

Вероятно, есть и другие настройки проекта, которые также могут мешать этому, поэтому я предлагаю попробовать один из примеров кода CUDA, который вы не изменили, и использовать описанные выше шаги в качестве проверки работоспособности, чтобы продемонстрировать, что вы можете заставить его работать. там первый. Тогда попробуйте это на своем проекте.

Убедитесь, что вы изменяете настройки (например, Win32/x64, Release/Debug), которые соответствуют проекту, который вы фактически создаете.

EDIT: В приведенном выше случае используется CUDA 5.0. В исходном вопросе не была указана версия CUDA. Я обнаружил, что с предыдущей версией CUDA в Visual Studio метод командной строки «Дополнительные параметры», похоже, не работал, но использование поля выбора/раскрывающегося списка для указания подробного вывода PTXAS (Да) работало.

EDIT2: ОК. Я выполнил чистую установку VS2010, а затем чистую установку инструментария CUDA 4.2, и мне удалось воспроизвести проблему. Я использовал следующие шаги, чтобы иметь возможность увидеть фактический подробный вывод ptxas:

  1. В меню «Инструменты...Настройки» выберите «Экспертные настройки».
  2. В Project...Properties...Configuration Properties...CUDA C/C++...Device измените подробный раскрывающийся список ptxas на «Да (--ptxas-options=-v)».
  3. В меню Инструменты...Параметры...Проекты и решения...Сборка и запуск измените параметр "Подробность вывода сборки проекта MSBuild" с "Минимальный" на "Нормальный".
  4. Затем выберите Build...Rebuild Solution, и вы должны увидеть подробный вывод ptxas в окне вывода сборки.
person Robert Crovella    schedule 27.08.2013
comment
К сожалению, это даже не работает (нет желаемого результата) с этим чистым примером проекта (CUDA 4.2) - person rank1; 28.08.2013
comment
Почему бы не перейти на CUDA 5 (или CUDA 5.5)? - person Robert Crovella; 28.08.2013
comment
Отредактировал мой ответ (EDIT 2) с новой последовательностью, чтобы попробовать. - person Robert Crovella; 29.08.2013
comment
Установка CUDA 5.5 помогла ;) - person rank1; 31.08.2013

Я использую --ptxas-options=-v (без пробелов), но, по общему признанию, я все еще использую более старую версию CUDA.

Насчет того, куда поставить:

  • Объявление 1) properties / cuda / host / дополнительные флаги компиляции - это изменит компиляцию вашего кода ЦП исходного кода CUDA (функции, отмеченные как __host__). Это не то место, где вы хотите поставить флаг.
  • Объявление 2) properties / cuda / command line - это должно изменить компиляцию вашего кода GPU. Если компиляция происходит с ошибкой, каково сообщение об ошибке?
  • Объявление 3) properties / c / command line - это повлияет на ваш собственный компилятор C/C++, который не понимает ни --ptxas-options, ни -Xptxas
person CygnusX1    schedule 28.08.2013
comment
Я изменил флаг, но, как и прежде, он компилируется, но желаемого результата нет, даже в примере проекта. Спасибо за объяснение - person rank1; 28.08.2013