Hotspot (программирование)

Материал из Википедии — свободной энциклопедии
(перенаправлено с «Критический участок кода»)
Перейти к: навигация, поиск

«Горячая точка», hotspot[1]  — участок кода в программе, на который приходится бо́льшая часть исполняемых инструкций процессора[2] или на исполнение которого процессор затрачивает очень много времени[3] (одни инструкции исполняются быстрее, а другие — медленнее). «Горячие точки» могут являться «узкими местами» программы, если на них приходится лишняя нагрузка из-за неэффективности кода, — в таком случае они могут быть подвергнуты оптимизации[3].

Излишне ресурсоёмкие участки кода[править | править вики-текст]

Излишне ресурсоёмкие участки кода («узкие места» программы) могут быть следствием выбора более медленного алгоритма решения задачи, не до конца продуманной архитектуры приложения, особенностей работы микропроцессора, следствием ожидания операций ввода-вывода и т.п.

Примером ресурсоёмкого участка кода из-за ошибки в архитектуре приложения может служить использование спинлока в первом потоке для получения результата от второго потока, занимающегося вычислениями, при условии, что первому потоку был назначен максимально высокий приоритет (взаимодействие с пользователем), а второму, — максимально низкий (фоновые вычисления). Т.к. спинлок представляет из себя бесконечный цикл опроса значения переменной, а приоритет процесса высокий, то планировщик будет бо́льшую часть времени выделять на исполнение первого процесса, а второму процессу будет выделяться гораздо меньше процессорного времени. В результате большая часть процессорного времени будет потрачена впустую. Решением проблемы в данном случае служило бы использование блокирующего семафора вместо спинлока, либо смена приоритетов у потоков.

Выявление ресурсоёмких участков[править | править вики-текст]

Выявление и анализ «горячих точек» программы может указать направления для её дальнейшей оптимизации.[2]

Глубокий анализ может быть произведён отдельно для различных архитектур процессора и может включать в себя анализ нагрузки на различные уровни кэша процессора, анализ шаблонов доступа к памяти, изучение счётчика утилизации циклов процессора и т.п.[2]

Для выявления ресурсоёмких участков в программе используются специальные программы, называемые профилировщиками (профайлерами).

Самым известным профайлером в операционных системах семейства Unix является gprof[en]. В Linux дополнительно доступны oprofile и perf. Во многих развитых интегрированных средах разработки имеются встроенные профилировщики, например, в Microsoft Visual Studio, NetBeans и т.п.

См. также[править | править вики-текст]

Примечания[править | править вики-текст]

  1. Evaluate performance for Linux on POWER (англ.). www.ibm.com (12 June 2012). Проверено 23 января 2016.
  2. 1 2 3 Измерение производительности Linux на компьютерах POWER (ru-RU). www.ibm.com (17 января 2013). Проверено 6 января 2016.
  3. 1 2 Планирование параллельной оптимизации | Intel® Developer Zone. software.intel.com. Проверено 6 января 2016.

Ссылки[править | править вики-текст]