Когда я запускаю профилировщик для моего кода, часть вывода выглядит так:
Limiting Factor
Achieved Occupancy: 0.02 ( Theoretical Occupancy: 0.67 )
IPC: 1.00 ( Maximum IPC: 4 )
Достигнутая занятость 0,02 кажется ужасно низкой.Возможно ли, что это связано с отсутствием CSV-файлов в профиле?Он жалуется на:
Program run #18 completed.
Read profiler output file for context #0, run #1, Number of rows=6
Error : Error in profiler data file '/.../temp_compute_profiler_1_0.csv' at line number 1. No column found
Error in reading profiler output:
Application : "/.../bin/python".
Profiler data file '/.../temp_compute_profiler_2_0.csv' for application run 2 not found.
Read profiler output file for context #0, run #4, Number of rows=6
Мои блоки - 32 * 4 * 1, сетка - 25 * 100, и тестирование показало, что 32 регистра обеспечивают лучшую производительность (даже если это приводит к разливу).
Если число 0,02 верно, как я могу отладить, что происходит?Я уже пытался переместить вероятных кандидатов в общую и / или постоянную память, экспериментировать с launch_bounds , перемещать данные в текстуры и т. Д.
Редактировать: если будет больше данных из профиля, будетполезно, просто дайте мне знать, и я могу предоставить это.Спасибо за прочтение.
Редактировать 2: запрошенные данные.
IPC: 1.00
Maximum IPC: 4
Divergent branches(%): 6.44
Control flow divergence(%): 96.88
Replayed Instructions(%): -0.00
Global memory replay(%): 10.27
Local memory replays(%): 5.45
Shared bank conflict replay(%): 0.00
Shared memory bank conflict per shared memory instruction(%): 0.00
L1 cache read throughput(GB/s): 197.17
L1 cache global hit ratio (%): 51.23
Texture cache memory throughput(GB/s): 0.00
Texture cache hit rate(%): 0.00
L2 cache texture memory read throughput(GB/s): 0.00
L2 cache global memory read throughput(GB/s): 9.80
L2 cache global memory write throughput(GB/s): 6.80
L2 cache global memory throughput(GB/s): 16.60
Local memory bus traffic(%): 206.07
Peak global memory throughput(GB/s): 128.26
The following derived statistic(s) cannot be computed as required counters are not available:
Kernel requested global memory read throughput(GB/s)
Kernel requested global memory write throughput(GB/s)
Global memory excess load(%)
Global memory excess store(%)
Achieved global memory read throughput(GB/s)
Achieved global memory write throughput(GB/s)
Решение (я):
Проблема с отсутствующими данными была вызвана слишком малым значением времени ожидания;некоторые ранние прогоны данных будут иметь тайм-аут, и данные не будут записаны (и эти сообщения об ошибках будут потеряны в спаме более поздних прогонов).
Достигнутая 0,02 занятость была вызвана active_warps
и active_cycles
(и, возможно, другие значения), достигнув максимума (2 ** 32-1).Уменьшение размера входных данных в профилированном сценарии привело к появлению гораздо большего количества правильных значений (включая более качественную / более реалистичную статистику IPC и ветвления).