2013-03-22 3 views
0

У меня возникла следующая проблема. Я хочу измерить gst_efficiency и gld_efficiency для моего приложения cuda, используя nvprof. Документация распространяется с CUDA 5.0 говорит мне, чтобы генерировать их, используя следующие формулы для устройств с возможностью вычисления 2,0-3,0:вычисление gst_throughput и gld_throughput с помощью nvprof

gld_efficiency = 100 * gld_requested_throughput/gld_throughput 

gst_efficiency = 100 * gst_requested_throughput/gst_throughput 

Для требуемых показателей следующие формулы приведены:

gld_throughput = ((128 * global_load_hit) + (l2_subp0_read_requests + l2_subp1_read_requests) * 32 - (l1_local_ld_miss * 128))/gputime 

gst_throughput = (l2_subp0_write_requests + l2_subp1_write_requests) * 32 - (l1_local_ld_miss * 128))/gputime 

gld_requested_throughput = (gld_inst_8bit + 2 * gld_inst_16bit + 4 * gld_inst_32bit + 8 
* gld_inst_64bit + 16 * gld_inst_128bit)/gputime 

gst_requested_throughput = (gst_inst_8bit + 2 * gst_inst_16bit + 4 * gst_inst_32bit + 8 
* gst_inst_64bit + 16 * gst_inst_128bit)/gputime 

Поскольку нет формула приведена для используемых метрик. Я предполагаю, что это события, которые можно подсчитать с помощью nvprof. Но некоторые из событий, похоже, недоступны на моем gtx 460 (также пробовал gtx 560 Ti). Я вставил output из nvprof --query-events.

Любые идеи, что происходит не так, или что я неправильно интерпретирую?

EDIT: Я не хочу, чтобы использовать CUDA Визуальная Profiler, так как я пытаюсь проанализировать мое приложение для различных параметров. Поэтому я хочу запустить nvprof, используя несколько конфигураций параметров, записывая несколько событий (каждый в своем первом запуске), а затем выводит данные в таблицах. Я уже получил эту автоматизацию и работал для других показателей (т. Е. Инструкций) и хочу сделать это для повышения эффективности загрузки и хранения. Вот почему меня не интересует решение, связанное с nvvp. Кстати, для моего приложения nvvp не удалось вычислить показатели, необходимые для эффективности хранения, поэтому в этом случае мне это совсем не помогает.

+0

Вы можете использовать Визуальный Profiler, который измеряет эти показатели непосредственно для вас, так что вам не нужно, чтобы собрать все эти события. –

+0

@YuZhou, пожалуйста, см. Мой EDIT, спасибо – soriak

+0

Возможно, имена событий в -query-событиях выглядят иначе, чем те, что указаны в таблице. Попробуйте следующие формулы: 'gld_throughput = ((128 * l1_global_load_hit) + (l2_subp0_read_sector_queries + l2_subp1_read_sector_queries) * 32 - (l1_local_ld_miss * 128))/gputime' ' gst_throughput = (l2_subp0_write_sector_queries + l2_subp1_write_sector_queries) * 32 - (l1_local_ld_miss * 128))/gputime' –

ответ

1

Я рад, что у кого-то была такая же проблема :) Я пытался сделать то же самое и не мог использовать Visual Profiler, потому что хотел профилировать как 6000 разных ядер.

формул на сайте NVidia плохо документированы - на самом деле переменные могут быть:

а) события

б) другие показатели

с) различные переменные в зависимости от GPU у вас есть

Однако в LOT из показателей есть либо опечатки в нем, либо они немного разбираются в nvprof, чем на сайте. Кроме того, переменные не помечены, поэтому вы не можете просто определить, являются ли они a), b) или c). Я использовал скрипт, чтобы grep их, а затем пришлось исправить это вручную. Вот что я нашел:

1) "l1_local/global_ld/st_hit/miss" У них есть "load"/"store" в nvprof вместо "ld"/"st" на сайте.

2) «l2_ ... все ... _requests» В «nvprof» вместо «запросов» есть «сектор_запросы».

3) "local_load/store_hit/промах" Они имеют "l1_" в дополнительно в профилировщика - "l1_local/global_load/store_hit/пропустить"

4) "tex0_cache_misses" Это один имеет "сектор" в нем в профилировщика - "tex0_cache_sector_misses"

5) "tex_cache_sector_queries" Missing "0" - так "tex0_cache_sector_queries" в nvprof.

Наконец, переменные:

1) "#SM" Число потоковых мультипроцессоров. Получить через cudaDeviceProp.

2) "gputime" Очевидно, что время выполнения на графическом процессоре.

3) "warp_size" Размер warp на вашем графическом процессоре, снова получите cudaDeviceProp.

4) "max_warps_per_sm" Количество блоков, исполняемых на sm * #SM * warps на блок. Я полагаю.

5) "elapsed_cycles" Найдено это: https://devtalk.nvidia.com/default/topic/518827/computeprof-34-active-cycles-34-counter-34-active-cycles-34-value-doesn-39-t-make-sense-to-/ Но до сих пор не совсем уверен, если я получу его.

Надеюсь, это поможет вам и некоторые другие люди, которые сталкиваются с той же проблемой :)

+0

Спасибо за ваш ответ, отлично, что вы поделились этим. К сожалению, мне пришлось завершить свой проект без этой информации. Но я надеюсь, что ваши решения помогут некоторым другим людям. – soriak

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