Как ограничить анализ Vtune определенной функцией

У меня есть программа, основная структура которой следующая:

<c language headers>
main() {
    some malloc() allocations and file reads into these buffers
    call to an assembly language routine that needs to be optimized to the maximum
    write back the output of to files and do free()
exit()
}

Программа на языке ассемблера по существу вычисляет контрольную сумму данных в буфере, и я намерен оптимизировать ее до абсолютного максимума. Он не выполняет никаких системных вызовов или вызовов библиотечных функций.

Я только что установил пакет Intel vTune Amplifier XE в VS 2015.

Как указать vtune, чтобы он сосредоточился строго на рутинной части языка ассемблера и пропустил весь анализ подготовительных частей языка «C». Кажется, я получаю все накопленные данные, такие как INSTRUCTION COUNT или CPI и т. Д. Возможно ли получить данные только для циклов и ветвей в подпрограмме языка ассемблера. Если да, то подскажите, как мне это сделать.

Спасибо


person quasar66    schedule 19.04.2016    source источник
comment
Я думаю, маловероятно, что vtune вообще попытается что-то сделать с написанной вручную сборкой, которую вы внедрили в свой код C. В конце концов, причина, по которой вы встраиваете ассемблер в код C, заключается в том, что вы хотите собрать его самостоятельно без помощи компилятора или модификаций.   -  person David Hoelzer    schedule 20.04.2016
comment
VTune соберет всю информацию обо всех выполненных функциях. Можно выполнять фильтрацию только на основе имен процессов/модулей/функций. Я думаю, это поможет вам.   -  person Elalfer    schedule 21.04.2016


Ответы (1)


Вы можете инструментировать свой код с помощью предоставленного VTune API для анализа определенных областей вашей рабочей нагрузки. Используйте Task API для отслеживания действий конкретных потоков или Frame API для анализа глобальных этапов рабочей нагрузки.

Настроив тип анализа, выберите опцию «Анализ пользовательских задач» для обработки инструментированных задач. По завершении сбора выберите группы, начинающиеся с «Задача» или «Кадр», чтобы просмотреть данные о производительности, агрегированные по вашим инструментальным интервалам. Вы также увидите свои задачи/кадры на временной шкале.

В качестве примера вы можете изменить свой код следующим образом:

<c language headers>
#include "ittnotify.h"

main() {

  __itt_domain* domain = __itt_domain_create("MyDomain");
  __itt_string_handle* task = __itt_string_handle_create("MyTask");

  some malloc() allocations and file reads into these buffers

  __itt_task_begin(domain, __itt_null, __itt_null, task);

  call to an assembly language routine that needs to be optimized to the maximum

  __itt_task_end(domain);

  write back the output of to files and do free()
  exit()
}

Не забудьте выполнить базовую конфигурацию для компиляции этого кода.

person Vital    schedule 21.04.2016