Вопрос

Я понимаю различия между многопоточной программой и программой, полагающейся на межмашинную коммуникацию.Моя проблема в том, что у меня есть хорошая многопоточная программа, написанная на "C", которая действительно хорошо работает на 8-ядерном компьютере.Теперь есть возможность перенести эту программу в кластер, чтобы получить доступ к большему количеству ядер.Стоит ли тратить усилия на удаление содержимого pthread и модернизацию MPI (которым я никогда не пользовался), или нам лучше перекодировать все это (или большую его часть) с нуля?Предположим, мы "застряли" на C, поэтому полная смена языка - это не вариант.

Это было полезно?

Решение

В зависимости от того, как написано ваше программное обеспечение, могут быть или не быть преимущества перехода на MPI по сравнению с сохранением вашей реализации pthread.

К сожалению (или к счастью), передача сообщений - это совсем другой процесс, чем pthreading - основное предположение совершенно иное.Я люблю это цитата Джошуа Филлипса из команды Maestro:"Разница между передачей сообщений и общением в общем состоянии эквивалентна разнице между отправкой коллеге электронного письма с просьбой выполнить задание и открытием ее органайзера, чтобы записать задачу непосредственно в ее список дел.Последнее, скорее всего, больше, чем просто грубость, смутит ее – она может стереть это, не заметить или случайно неправильно расставить приоритеты ".

К сожалению, способ обмена данными сильно отличается.Прямого доступа к данным в других потоках нет (поскольку они могут быть на других машинах), поэтому переход с pthreads на MPI может оказаться очень сложной задачей.С другой стороны, если код написан таким образом, что каждый поток изолирован, это может быть простой задачей и, безусловно, стоящей того.

Чтобы определить, насколько это будет полезно, вам нужно понять код и чего вы надеетесь достичь, переключаясь.Это может быть полезно в качестве учебного опыта (вы многое узнаете о синхронизации и потоковой обработке, работая в MPI), но может оказаться непрактичным, если выигрыш будет незначительным.

Другие советы

Ре.ваш комментарий к Reed - это звучит как простое преобразование в MPI с минимальными затратами.Просто будь осторожен:не все MPI API поддерживают динамическое создание процессов, т. е. вы запускаете свою программу с N процессами (указанными при запуске) и зависаете с N процессами на протяжении всего срока службы программы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top