У меня есть программа cuda, которую я запускаю на 680gtx, при тестировании различных параметров компилятора я заметил, что:
компиляция моего кода для вычислительных возможностей 1.0 и sm 1.0 дает время выполнения 47 мс.
компиляция моего кода для вычислительных возможностей 3.5 (также 2.0) и sm 3.0 дает время выполнения 60 мс
в чем могут быть причины таких результатов?
Я компилирую на компиляторе nsight на Linux и CUDA 5.0, и мое ядро в основном связано с памятью.
благодаря.
команды:
cc 1.0
nvcc --compile -O0 -Xptxas -v -gencode arch=compute_10,code=compute_10 -gencode arch=compute_10,code=sm_10 -keep -keep-dir /tmp/debug -lineinfo -pg -v -x cu -o "BenOlaCuda/src/main.o" "../BenOlaCuda/src/main.cu"
cc 3.0
nvcc -lineinfo -pg -O0 -v -keep -keep-dir /tmp/debug -Xptxas -v -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -odir "BenOlaCuda/src" -M -o "BenOlaCuda/src/main.d" "../BenOlaCuda/src/main.cu"
еще немного информации о компиляции моего ядра:
cc 1.0
ptxas info : Compiling entry function '_Z15optimizePixelZ3tfPfS_S_S_tttttt' for 'sm_10'
ptxas info : Used 40 registers, 68 bytes smem, 64 bytes cmem[1], 68 bytes lmem
cc 3.0
ptxas info : Compiling entry function '_Z15optimizePixelZ3tfPfS_S_S_tttttt' for 'sm_30'
ptxas info : Function properties for _Z15optimizePixelZ3tfPfS_S_S_tttttt
128 bytes stack frame, 100 bytes spill stores, 108 bytes spill loads
ptxas info : Used 63 registers, 380 bytes cmem[0], 20 bytes cmem[2]
sm 1.0
иsm 3.5
, вероятно, было бы неплохо избежать такого попадания в кадр стека. возможно, удалить немного разворачивания цикла или что-то в этом роде? - person solvingPuzzles   schedule 12.05.2013