В области высокопроизводительных вычислений (HPC) разработчики почти фанатично относятся к «переносимости производительности». Это явление возникает из-за необходимости эффективной работы компьютерных программ и приложений на разных платформах. Поскольку технологии продолжают развиваться, а аппаратная архитектура меняется, надежность и актуальность высокопроизводительных вычислительных приложений оказываются под угрозой, что вынуждает разработчиков сосредоточиться на повышении производительности и переносимости. р>
Переносимость производительности относится к способности компьютерных программ и приложений эффективно работать на разных платформах. Когда разработчики разрабатывают приложения с учетом переносимости производительности, они надеются обеспечить поддержку нескольких платформ без снижения производительности и минимизировать объем платформенно-зависимого кода. р>
Поскольку разнообразие оборудования растет, разработка программного обеспечения, способного работать на широком спектре машин, стала необходимостью для поддержания жизнеспособности приложений. По данным Конференции по переносимости производительности Министерства энергетики США (DOE) 2016 года, отрасль в целом согласна с тем, что переносимость производительности можно интерпретировать как «способность запускать одно и то же приложение на нескольких аппаратных платформах и достигать одинаковой производительности на этих платформах». производительности."
Например, Джон Пеникюк из Intel заявил на той же конференции, что «приложение считается производительно переносимым, если оно может достигать одинаковых уровней производительности на разных платформах». Это означает, что так называемая переносимость касается не только самого приложения, но и также о переносимости исходного кода. р>
В настоящее время не существует общепринятого способа измерения переносимости производительности, и отдельные команды могут определять эту концепцию на основе собственных критериев. р>
Точная количественная оценка переносимости производительности — сложная проблема, решение которой в первую очередь зависит от двух факторов. Первый — это переносимость, которую можно измерить, сравнив общее количество строк кода, используемых на нескольких архитектурах, с общим количеством строк кода, написанных специально для одной архитектуры. Вторым показателем является производительность, обычно сравниваемая между оптимизированными версиями для конкретной платформы и портативными версиями. р>
В настоящее время не существует универсального стандарта для того, что считается переносимым кодом или приложениями. Эта неоднозначность определения приводит к разным критериям оценки для разных команд. По словам докладчика на конференции 2016 года, считать проект переносимым или нет — это целиком и полностью дело команды разработчиков. р>
Чтобы помочь программистам добиться переносимости производительности, в настоящее время существует множество приложений и систем программирования, которые позволяют достичь этой цели. Такие фреймворки программирования, как OpenCL, SYCL и Kokkos, утверждают, что поддерживают функциональную переносимость и облегчают параллельное программирование на нескольких платформах. Кроме того, существуют некоторые нефреймворковые решения, такие как технология самонастройки и специализированные языки, которые также могут улучшить производительность и переносимость. р>
Разработчикам необходимо искать способы достижения переносимости производительности в постоянно меняющейся вычислительной архитектуре, что связано не только с текущими потребностями, но и с будущим выживанием. р>
В связи с быстрым развитием вычислительных технологий в будущем могут возникнуть новые проблемы с переносимостью производительности. Эксперты отрасли полагают, что развитие моделей параллельного программирования станет ключевым фактором, влияющим на переносимость производительности. Исследования показывают, что будущие модели параллельного программирования смогут обеспечить более высокую производительность и переносимость, чем сами приложения во многих ситуациях. р>
Это изменение означает, что обязанности, которые должны нести программисты при разработке приложений, постепенно перейдут к реализации модели программирования и лежащего в ее основе компилятора, что существенно изменит технический стиль разработки программ. Эти исследования и обсуждения будут и дальше способствовать прогрессу и развитию высокопроизводительных вычислений. р>
Итак, в этом постоянно меняющемся технологическом контексте, как разработчикам эффективно сбалансировать противоречие между характеристиками платформы и производительностью и переносимостью?