2017-02-01 15 views
0

Мой вопрос довольно прост. Я пишу приложение CUDA, но поскольку мой основной компьютер является ПК с ОС Windows (Visual Studio 2013), я разработал там свое приложение. Но конечное приложение будет развернуто на сервере * nix.Оптимизация компилятора реестра Cuda

Мой вопрос:

На Visual Studio 2013 optimziation флаг /Ox (полная оптимизация) с /Oi (включить встроенные функции) удается сжать мое использование регистра просто 32regs таким образом получая полный размещение.

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\bin\nvcc.exe" -gencode=arch=compute_35,code=\"sm_35,compute_35\" --use-local-env --cl-version 2013 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\x86_amd64" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\include"  --keep-dir x64\Release -maxrregcount=0 --ptxas-options=-v --machine 64 --compile -cudart static  -DWIN32 -DWIN64 -DNDEBUG -D_CONSOLE -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Ox /Zi /MD " -o Simulation.cu.obj "Simulation.cu" 

На Ubuntu использованием GCC 4.9.4 и Cuda-8 скомпилированные с CMake и О3 уровня оптимизации, количество регистров составляет около 49 (> 32).

nvcc Simulation.cu -dc -o Simulation.cu.o -ccbin cc -m64 -DNDEBUG -Xcompiler ,\"-std=c++1y\",\"-w\",\"-O3\",\"-g\" -arch=sm_35 -std=c++11 -rdc=true -O3 --ptxas-options=-v -DNVCC 

У меня отсутствует какой-либо флаг? И я не хочу проливать какие-либо регистры на локальную память.

ответ

1

Различные версии инструментария (или даже драйвера, если вы скомпилируете PTX), могут использовать разные номера регистров для одного и того же кода.

Используйте launch bounds, чтобы сообщить компилятору о вашей запланированной конфигурации запуска и цели использования для конкретного ядра. При необходимости он попытается свести к минимуму использование регистров.
Независимо от того, требует ли это, чтобы регистры распространения в локальной памяти были вне вашего контроля, но компилятор будет вести себя очень разумно.

+0

Поскольку я хочу 100% занятости, почему бы мне не использовать -maxrregcount и полагаться на границы запуска, хотя спасибо за ссылку, я не знал их существования. Я сбив с толку, потому что компиляция ptx не должна быть специфичной для платформы, и я ожидал бы тех же результатов на обеих платформах. – stevengatsios

+1

-maxrregcount работает одинаково хорошо, если у вас есть одно ядро ​​на единицу компиляции (файл .cu). Позднее были добавлены аннотации, связанные с запуском ядра, поэтому каждое ядро ​​может использовать его оптимальную конфигурацию. – tera

+0

Компиляция PTX не обязательно зависит от платформы, но вы используете разные версии инструментария. Новые версии компилятора, скорее всего, включают в себя дополнительные оптимизации и корректировку эвристики, которые приведут к использованию разных регистров. – tera

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

  • Нет связанных вопросов^_^