Сложный цикл в программе на C ++, переносимый в OpenMP и MPI? - PullRequest
0 голосов
/ 27 января 2011

У меня есть программа обработки чисел на C ++. Структура:

а) ввод данных, подготовка данных

b) «большой» цикл, использует глобальные и локальные данные (множество разных переменных в обоих случаях)

c) результаты постобработки и запись данных

Самая интенсивная часть - это "b", которая в основном представляет собой цикл. Мне нужно ускорить программу в кластере. 25 лезвий, по 4 ядра. Интересно, смогу ли я использовать здесь OpenMP и MPI или вы можете указать мне учебники, не общие случаи, а сложные и "большие" для циклов.

Спасибо

Ответы [ 2 ]

1 голос
/ 27 января 2011

На самом деле, вы должны использовать оба.

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

0 голосов
/ 27 января 2011

Вы не можете разделить свою задачу между блейдами, используя OpenMP. Попытайтесь разделить ваш цикл на несколько частей и распределить по ним емкость. Например, если вы хотите составить 2 вектора с размером N. N / 2 будет на одном узле, а другая часть на другом.

Но затраты на передачу между лезвиями ощутимы. Таким образом, если ваша задача на самом деле не велика. Может быть, было бы лучше, если бы вы разделили его на 4 ядра.

...