В сегодняшнюю эпоху взаимосвязанных цифровых технологий переносимость производительности стала важной проблемой при разработке программного обеспечения. Переносимость производительности означает способность приложения эффективно работать на различных аппаратных платформах. Когда разработчики разрабатывают портативные приложения с высокой производительностью, им необходимо поддерживать несколько платформ без ущерба для производительности, в идеале — при минимизации кода, специфичного для платформы.
Переносимость производительности считается очень востребованной функцией в сообществе высокопроизводительных вычислений (HPC), но в настоящее время не существует универсального или последовательного стандарта измерения.
Производительность измеряется двумя способами: первый — путем сравнения производительности оптимизированной версии приложения с его портативной версией; другой — на основе количества выполненных операций с плавающей запятой (FLOP), которые перемещаются из основной памяти во время выполнения; Данные о частоте процессора для сравнения теоретической пиковой производительности приложения. По мере увеличения разнообразия аппаратного обеспечения становится все более важной разработка программного обеспечения, которое может работать на широком спектре машин, что влияет на долгосрочное использование приложения и возможность его обновления.
Переносимость производительности широко упоминается в отрасли и обычно означает: во-первых, возможность запуска одного и того же приложения на нескольких аппаратных платформах, во-вторых, достижение определенных целевых показателей производительности на этих платформах; На конференции по переносимости производительности, проведенной Министерством энергетики США (DOE) в 2016 году, эксперт заявил, что «приложение можно считать приложением, если оно может достичь стабильного уровня производительности на каждой платформе по сравнению с наиболее известной реализацией». Для эффективности и портативности».
Джефф Ларкин (NVIDIA) прямо отметил, что переносимость производительности заключается в том, что «один и тот же исходный код может продуктивно работать на нескольких разных архитектурах».
Поэтому переносимость производительности стала важной темой обсуждения в сообществе высокопроизводительных вычислений. Партнеры из промышленности, научных кругов и национальных лабораторий Министерства энергетики с 2016 года регулярно проводят «Форум по производительности, портативности и производительности высокоэффективных вычислений» для содействия исследованиям и разработкам в области переносимости производительности.
Поскольку вычислительная архитектура продолжает развиваться, переносимость производительности остается важной. Разработчики предполагают, что их единая база кода обеспечит приемлемую производительность на новых архитектурах, а также на различных современных архитектурах, которые еще не были протестированы. По мере увеличения разнообразия аппаратного обеспечения возникнет необходимость в разработке программного обеспечения, которое может работать на нескольких платформах. Это связано с жизнеспособностью и сохраняющейся актуальностью приложений.
Проект экзафлопсных вычислений (ECP) Министерства энергетики США подчеркивает, что переносимость производительности является постоянной проблемой, особенно в многоплатформенной среде.
С 2016 года Министерство энергетики провело несколько семинаров, на которых обсуждалась растущая важность переносимости производительности. В конференции 2017 года приняли участие многие известные учреждения, в том числе Национальный научно-вычислительный центр энергетических исследований (NERSC) и Национальная лаборатория Лос-Аламоса (LANL).
Чтобы количественно оценить, когда программа достигла переносимости производительности, необходимо учитывать два фактора. Во-первых, переносимость производительности можно измерить путем сравнения количества строк кода, используемого в разных архитектурах, с количеством строк кода, используемых только для одной архитектуры. Во-вторых, производительность можно измерить разными способами. Например, чтобы сравнить производительность версии приложения, оптимизированной для платформы, с портативной версией, эффективным методом измерения является использование модели производительности крыши, которая может получить теоретическую пиковую производительность приложения.
На конференции 2016 года участник упомянул: «Когда команда приложения заявляет, что его производительность переносима, этот код считается переносимым по производительности».
Исследования последних лет показали, что переносимый код, написанный для различных архитектур параллельных вычислений, должен соответствовать моделям программирования открытых стандартов, а также код должен разрабатываться и улучшаться на нескольких платформах одновременно. Эти стратегии могут помочь разработчикам найти параметры, подходящие для разных платформ.
На рынке представлено множество программных приложений и систем, призванных помочь разработчикам добиться переносимости производительности. Некоторые распространенные платформы включают OpenCL, SYCL, Kokkos, RAJA и т. д. Эти программные интерфейсы поддерживают многоплатформенное многопроцессное программирование. Некоторые неплатформенные решения включают самонастраивающиеся и предметно-ориентированные языки.
По мере развития технологий готовы ли мы к новой эре программирования, которая поднимет возможности переносимости производительности на новую высоту?