Что легче изучать и отлаживать OpenMP или MPI? - PullRequest
5 голосов
/ 30 октября 2010

У меня есть хрустящее приложение C / C ++. Это в основном основной цикл для разных наборов данных. Мы получили доступ к кластеру из 100 узлов с доступными openmp и mpi. Я хотел бы ускорить приложение, но я абсолютный новичок для MPI и OpenMP. Мне просто интересно, что проще всего изучить и отладить, даже если производительность не самая лучшая.

Мне также интересно, что является наиболее подходящим для моего приложения основного цикла.

Спасибо

Ответы [ 2 ]

3 голосов
/ 30 октября 2010

Если ваша программа представляет собой один большой цикл, использование OpenMP может быть так же просто, как запись:

#pragma omp parallel for

OpenMP полезен только для программирования с общей памятью, которое, если в вашем кластере не выполняется что-то вроде kerrighed означает, что параллельная версия, использующая OpenMP, будет одновременно работать не более чем на одном узле.

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

Учитывая, что вы сказали "для разных наборов данных", похоже, что ваша проблема может фактически попасть вкатегория «смущающая параллель», где при условии, что у вас есть более 100 наборов данных, вы можете просто настроить планировщик так, чтобы он запускал один набор данных на узел, пока все они не будут завершены, без необходимости изменять ваш код и почти в 100 раз быстреепросто используя один узел.

Например, если ваш кластер использует condor в качестве планировщика, вы можете отправить 1 задание на элемент данных в юниверс "vanilla", варьируя только строку "Arguments ="описание работы.(Есть другие способы сделать это для Кондора, которые могут быть более разумными, и есть также похожие вещи для крутящего момента, sge и т. Д.)

1 голос
/ 30 октября 2010

OpenMP в основном для компьютеров SMP, поэтому если вы хотите масштабировать до сотен узлов, вам все равно понадобится MPI. Однако вы можете использовать оба. MPI для распределения работы между узлами и OpenMP для обработки параллелизма между ядрами или несколькими процессорами на узел. Я бы сказал, что OpenMP намного проще, чем возиться с pthreads. Но, если учесть, что скорость, которую вы получите от OpenMP, обычно будет ниже, чем у ручной оптимизации pthreads.

...