У меня есть несколько ядер CUDA, которые выполняют много операций, включая загрузку / хранение глобальной / разделяемой памяти. В последние дни я обнаружил, что производительность этих ядер различна, когда я компилирую с помощью dlcm = cg или dlcm = ca ptxasoptions (нужно ли включать кэш L1).
Проблема в том, что я могу реализовать конфигурацию кэша l1 в коде CUDA вместо перекомпиляции ядра?
GPU: тельса P4
Я попробовал API времени выполнения cudaDeviceSetCacheConfig, но ничего не получил.
Кроме того, я искал на некоторых форумах и нашел ответ на использование инструкций PTX для глобальной загрузки памяти (ld.cg), после чего я использую инструменты Nvidia objdump для вывода sass-кода из двух кубинов ядра, скомпилированных с помощью dlcm = cg и dlcm. = ca, и обнаружил, что за исключением ptxasoptions в начале (cg против ca), остальная часть кода sass одинакова, но при запуске двух ядер все еще существует огромный разрыв в производительности.
cuobjdump -sass от dlcm = cg:
1
2 member kernel1.a:common.cu.o:
3
4 Fatbin ptx code:
5 ================
6 arch = sm_61
7 code version = [6,0]
8 producer = cuda
9 host = linux
10 compile_size = 64bit
11 compressed
12 ptxasOptions = -dlcm=cg -warn-spills --compile-only
13
14 Fatbin elf code:
15 ================
16 arch = sm_61
17 code version = [1,7]
18 producer = cuda
19 host = linux
20 compile_size = 64bit
21 compressed
...SAME SASS CODE...
cuobjdump -sass от dlcm = ca:
1
2 member kernel2.a:common.cu.o:
3
4 Fatbin ptx code:
5 ================
6 arch = sm_61
7 code version = [6,0]
8 producer = cuda
9 host = linux
10 compile_size = 64bit
11 compressed
12 ptxasOptions = -dlcm=ca -warn-spills --compile-only
13
14 Fatbin elf code:
15 ================
16 arch = sm_61
17 code version = [1,7]
18 producer = cuda
19 host = linux
20 compile_size = 64bit
21 compressed
...SAME SASS CODE...
Задача ещё не решена.
Других решений пока нет …