Мой вопрос довольно прост. Я пишу приложение 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
У меня отсутствует какой-либо флаг? И я не хочу проливать какие-либо регистры на локальную память.
Поскольку я хочу 100% занятости, почему бы мне не использовать -maxrregcount и полагаться на границы запуска, хотя спасибо за ссылку, я не знал их существования. Я сбив с толку, потому что компиляция ptx не должна быть специфичной для платформы, и я ожидал бы тех же результатов на обеих платформах. – stevengatsios
-maxrregcount работает одинаково хорошо, если у вас есть одно ядро на единицу компиляции (файл .cu). Позднее были добавлены аннотации, связанные с запуском ядра, поэтому каждое ядро может использовать его оптимальную конфигурацию. – tera
Компиляция PTX не обязательно зависит от платформы, но вы используете разные версии инструментария. Новые версии компилятора, скорее всего, включают в себя дополнительные оптимизации и корректировку эвристики, которые приведут к использованию разных регистров. – tera