2016-08-18 8 views
0

я вижу следующее, когда я запускаю Intel VTune на моей рабочей нагрузки:Устный Intel VTune выход

Memory Bound     50.8%    

Я прочитал документ Intel, который говорит (Intel doc):

памяти Bound меры фракции слотами где трубопровод может быть остановлен из-за требований нагрузки или сохранения инструкций. Это объясняется главным образом неполными нагрузками на память в полете, которые совпадают с голоданием исполнения в дополнение к менее распространенным случаям, когда магазины могут подразумевать обратное давление на трубопровод.

Означает ли это, что примерно половина инструкций в моем приложении задерживается в ожидании памяти, или это более тонко, чем это?

+0

Можете ли вы связать документ, чтобы мы могли видеть, что они подразумевают под слотом? Конвейерные процессоры вне очереди не просто запускают одну инструкцию за раз, поэтому ваша интерпретация не имеет смысла. Это не проблема пропускной способности, если одна команда должна ждать, но есть независимая работа, чтобы поддерживать работу процессора. Скорее всего, это мера циклов, в которых не выполнялись никакие удары или не удалялись. (Это почти наверняка не измерение интерфейса, если только оно не может отслеживать, почему ROB является полным или по какой-либо другой причине, препятствует выпуску uops.) –

+0

Сделай это прямо сейчас в исходном сообщении. Благодарю. – Frank

+0

Вкратце: не думайте, с какими инструкциями влияет что-то медленное; подумайте о том, позволяет ли ваш код процессору подавать свои голодные исполнительные блоки с работой, независимо от того, в каком порядке он происходит. –

ответ

1

Концепция слота трубопровода, используемая VTune, объясняет, например. здесь: https://software.intel.com/en-us/top-down-microarchitecture-analysis-method-win. В коротком слоте трубопровода представлены аппаратные ресурсы, необходимые для обработки одного uOp. Таким образом, для четырехпроцессорных процессоров (большинство процессоров Intel) мы можем выполнять 4 операции каждого цикла, и общее количество слотов будет измеряться как 4 * CPU_CLK_UNHALTED.THREAD от VTune. Метрика, связанная с памятью, построена на событии CYCLE_ACTIVITY.STALLS_MEM_ANY, которое дает вам прямую доступность из-за памяти. Принимая во внимание не по порядку. В основном, только если CPU застопорился и в то же время он имеет в полете нагрузки, счетчик увеличивается. Если в полете есть нагрузки, но процессор остается занятым, он не учитывается как срыв памяти. Таким образом, метрическая привязка к памяти обеспечивает довольно точную оценку того, насколько рабочая нагрузка связана с проблемами производительности памяти. Значение 50% означает, что половина времени была потрачена впустую, ожидая данных из памяти.

+0

Я не читал эту статью в глубину. Но CPU может быть остановлен по многим причинам, чем просто память. Так что только потому, что CPU застопорился, когда он имеет нагрузку в полете, не обязательно означает, что он заглох * из-за * памяти. Я не знаю, учитывает ли VTune это при вычислении этой метрики. Но если это не так, то трудно сказать, что «половина времени была потрачена впустую, ожидая данных из памяти». – Mysticial

+0

Также есть «стойло», определяющее наличие * любого * из 4 слотов ошибок, пустых? Или это, когда * все * 4 слота пусты. Например, код с плавающей запятой редко насыщает 4 слота с ошибками, поскольку инструкции FP имеют высокие задержки, и есть только два порта, которые могут их выполнить. Таким образом, неблокирующий кеш-промах в середине цепочки команд FP, получающих 2 инструкции/цикл, определенно не означает, что время теряется в ожидании памяти. – Mysticial

+0

Тем не менее, я уверен, что VTune умнее этого, но я говорю, что так много угловых случаев считают, что абсолютные цифры, такие как «50% времени потрачены впустую», могут быть трудно интерпретировать для номинальной стоимости. – Mysticial