Передача сообщений является неотъемлемым элементом всех компьютерных кластеров . Все компьютерные кластеры, от самодельных Beowulf до некоторых из самых быстрых суперкомпьютеров в мире, полагаются на передачу сообщений для координации действий множества узлов, которые они охватывают. [1] [2] Передача сообщений в компьютерных кластерах, построенных с использованием обычных серверов и коммутаторов, используется практически всеми интернет-сервисами. [1]
В последнее время распространяется использование компьютерных кластеров с более чем тысячей узлов. По мере увеличения числа узлов в кластере быстрый рост сложности подсистемы связи делает задержки передачи сообщений по межсоединению серьезной проблемой производительности при выполнении параллельных программ . [3]
Специальные инструменты могут использоваться для моделирования, визуализации и понимания производительности передачи сообщений на компьютерных кластерах. Перед тем, как будет собран большой компьютерный кластер, симулятор на основе трассировки может использовать небольшое количество узлов для прогнозирования производительности передачи сообщений на более крупных конфигурациях. После тестовых запусков на небольшом количестве узлов симулятор считывает файлы журналов выполнения и передачи сообщений и моделирует производительность подсистемы обмена сообщениями, когда происходит обмен гораздо большим количеством сообщений между гораздо большим количеством узлов. [4] [5]
Исторически двумя типичными подходами к коммуникации между узлами кластера были PVM ( параллельная виртуальная машина) и MPI ( интерфейс передачи сообщений) . [6] Однако в настоящее время MPI стал фактическим стандартом для передачи сообщений в компьютерных кластерах. [7]
PVM предшествовала MPI и была разработана в Национальной лаборатории Ок-Ридж около 1989 года. Она предоставляет набор программных библиотек, которые позволяют вычислительному узлу действовать как «параллельная виртуальная машина». Она предоставляет среду выполнения для передачи сообщений, управления задачами и ресурсами, а также уведомления об ошибках и должна быть непосредственно установлена на каждом узле кластера. PVM может использоваться пользовательскими программами, написанными на C , C++ или Fortran и т. д. [6] [8]
В отличие от PVM, которая имеет конкретную реализацию, MPI является спецификацией, а не определенным набором библиотек. Спецификация появилась в начале 1990-х годов в результате обсуждений между 40 организациями, первоначальные усилия были поддержаны ARPA и Национальным научным фондом . Проект MPI опирался на различные функции, доступные в коммерческих системах того времени. Затем спецификации MPI дали начало конкретным реализациям. Реализации MPI обычно используют TCP/IP и сокетные соединения. [6] MPI в настоящее время является широкодоступной моделью связи, которая позволяет писать параллельные программы на таких языках, как C , Fortran, Python и т. д. [8] Спецификация MPI была реализована в таких системах, как MPICH и Open MPI . [8] [9]
Компьютерные кластеры используют ряд стратегий для распределения обработки по нескольким узлам и результирующих накладных расходов на связь. Некоторые компьютерные кластеры, такие как Tianhe-I, используют для передачи сообщений процессоры, отличные от тех, которые используются для выполнения вычислений. Tianhe-I использует более двух тысяч процессоров FeiTeng-1000 для улучшения работы своей фирменной системы передачи сообщений, в то время как вычисления выполняются процессорами Xeon и Nvidia Tesla . [10] [11]
Одним из подходов к снижению накладных расходов на связь является использование локальных соседств (также называемых локалями ) для определенных задач. Здесь вычислительные задачи назначаются определенным «соседствам» в кластере, чтобы повысить эффективность за счет использования процессоров, которые находятся ближе друг к другу. [3] Однако, учитывая, что во многих случаях фактическая топология узлов компьютерного кластера и их взаимосвязи могут быть неизвестны разработчикам приложений, попытка тонкой настройки производительности на уровне прикладной программы является довольно сложной. [3]
Учитывая, что MPI теперь стал фактическим стандартом для компьютерных кластеров, увеличение числа узлов кластера привело к продолжению исследований по улучшению эффективности и масштабируемости библиотек MPI. Эти усилия включали исследования по уменьшению объема памяти, занимаемого библиотеками MPI. [7]
С самых первых дней MPI предоставлял возможности для профилирования производительности через «систему профилирования» PMPI. [12] Использование префикса PMIPI- позволяет наблюдать за точками входа и выхода для сообщений. Однако, учитывая высокоуровневую природу этого профиля, этот тип информации дает лишь мимолетное представление о реальном поведении системы связи. Потребность в дополнительной информации привела к разработке системы MPI-Peruse. Peruse предоставляет более подробный профиль, позволяя приложениям получать доступ к изменениям состояния в библиотеке MPI. Это достигается путем регистрации обратных вызовов в Peruse, а затем их вызова в качестве триггеров при возникновении событий сообщений. [13] Peruse может работать с системой визуализации PARAVER. PARAVER имеет два компонента: компонент трассировки и визуальный компонент для анализа трассировок, статистики, связанной с определенными событиями и т. д. [14] PARAVER может использовать форматы трассировки из других систем или выполнять собственную трассировку. Он работает на уровне задач, уровне потоков и в гибридном формате. Трассы часто включают в себя так много информации, что они часто подавляют. Таким образом, PARAVER суммирует их, чтобы позволить пользователям визуализировать и анализировать их. [13] [14] [15]
Когда разрабатывается крупномасштабная, часто суперкомпьютерного уровня, параллельная система, важно иметь возможность экспериментировать с несколькими конфигурациями и моделировать производительность. Существует ряд подходов к моделированию эффективности передачи сообщений в этом сценарии, от аналитических моделей до моделирования на основе трассировки, а некоторые подходы полагаются на использование тестовых сред, основанных на «искусственных коммуникациях», для выполнения синтетических тестов производительности передачи сообщений. [3] Такие системы, как BIGSIM, предоставляют эти возможности, позволяя моделировать производительность на различных топологиях узлов , стратегиях передачи сообщений и планирования. [4]
На аналитическом уровне необходимо моделировать время связи T в терминах набора подкомпонентов, таких как задержка запуска , асимптотическая пропускная способность и количество процессоров. Хорошо известная модель — это модель Хокни, которая просто полагается на связь точка-точка , используя T = L + (M / R), где M — размер сообщения, L — задержка запуска, а R — асимптотическая пропускная способность в МБ/с. [16]
Сюй и Хванг обобщили модель Хокни, включив в нее количество процессоров, так что и задержка, и асимптотическая пропускная способность являются функциями количества процессоров. [16] [17] Затем Гунаван и Кай обобщили это еще больше, введя размер кэша , и разделили сообщения на основе их размеров, получив две отдельные модели: одну для сообщений ниже размера кэша, и одну для сообщений выше. [16]
Специальные инструменты могут использоваться для моделирования и понимания производительности передачи сообщений на компьютерных кластерах. Например, CLUSTERSIM использует визуальную среду на основе Java для дискретно-событийного моделирования . В этом подходе вычисляемые узлы и топология сети визуально моделируются. Задания, их длительность и сложность представлены с помощью определенных распределений вероятностей, что позволяет предлагать и экспериментировать с различными алгоритмами планирования параллельных заданий . Таким образом, накладные расходы на связь для передачи сообщений MPI могут быть смоделированы и лучше поняты в контексте крупномасштабного выполнения параллельных заданий. [18]
Другие инструменты моделирования включают MPI-sim и BIGSIM. [19] MPI-Sim — это симулятор, управляемый выполнением, для работы которого требуются программы на C или C++. [18] [19] ClusterSim, с другой стороны, использует гибридную систему моделирования более высокого уровня, независимую от языка программирования, используемого для выполнения программы. [18]
В отличие от MPI-Sim, BIGSIM — это система, управляемая трассировкой, которая моделирует на основе журналов выполнения, сохраненных в файлах отдельной программой-эмулятором. [5] [19] BIGSIM включает в себя эмулятор и симулятор. Эмулятор выполняет приложения на небольшом количестве узлов и сохраняет результаты, поэтому симулятор может использовать их и моделировать действия на гораздо большем количестве узлов. [5] Эмулятор хранит информацию о последовательных блоках выполнения (SEB) для нескольких процессоров в файлах журналов, причем каждый SEB записывает отправленные сообщения, их источники и назначения, зависимости, время и т. д. Симулятор считывает файлы журналов и моделирует их, а также может добавлять дополнительные сообщения, которые затем также сохраняются как SEB. [4] [5] Таким образом, симулятор может предоставить представление о производительности очень больших приложений на основе трассировок выполнения, предоставленных эмулятором на гораздо меньшем количестве узлов, до того, как вся машина станет доступной или настроенной. [5]
{{cite web}}
: CS1 maint: архивная копия как заголовок ( ссылка )