2013-03-11 7 views
1

Если в качестве нескольких онлайн-ресурсов, в том числе this one, укажите количество выполненных инструкций + количество повторов = количество выданных инструкций, а если количество повторов положительно, то как ядро ​​CUDA может иметь следующие свойства (от nvprof)?Как количество выполненных инструкций может превышать количество выданных инструкций?

Invocations  Avg  Min  Max  Event Name 
1     69161760 69161760 69161760 inst_executed 
1     37263115 37263115 37263115 inst_issued1 
1     19130919 19130919 19130919 inst_issued2 

(inst_issued = inst_issued1 + inst_issued2 = 37263115 + 19130919; ratio = inst_executed/inst_issued > 1). 

Является

inst_issued = inst_issued1 + inst_issued2 

правильная формула для общего количества поручений? Имеются ли инструкции, отличные от ядра, кроме * изданных1 и * выпущенных2? Если да, то как они могут быть профилированы?

В сети я не вижу ясных ответов на свои вопросы. Например, моя версия nvprof -query-events дает только три параметра в качестве возможных аргументов --events. Там также не упоминается об этом в документации по программированию CUDA, вышеприведенной ссылке или какой-либо из других десяти или около того ссылок, которые я прочитал об этом, относятся к оптимизации инструкций CUDA.

Дополнительная информация:

0) Я бегу CUDA 5.0 и компиляции с NVCC -m64 -arch = sm_30.

1) Я запускаю только математическую версию моего ядра, и поскольку он не имеет давления в регистре, количество обращений к глобальной памяти пренебрежимо мало.

2) У меня нет доступа к визуальному профилировщику nVidia, поэтому я не уверен, что он даст мне ответы, отличные от приведенных выше.

Большое спасибо и извиняюсь заранее, если это глупо.

ответ

2

inst_issue2 - количество выпускных слотов, выданных 2 инструкциями.

inst_issued1: Количество одной инструкции, выданной за цикл

inst_issued2: Количество двойных распоряжений за один цикл

формулы для полных инструкций выпущенных:

inst_issued = (inst_issued2 * 2) + inst_issued1 

Используя числа в вопросы дают:

inst_issued = (inst_issued2 * 2) + inst_issued1 
      = (19130919 * 2) + 37263115 
      = 75524953 
ratio = inst_executed/inst_issued 
     = 69161760/75524953 
     = .916 
+0

Спасибо. В конце концов, это было глупо. – user1445860