Я пытаюсь сделать мой цикл for
параллельным в c ++.Итерации полностью независимы.Ниже приведена аналогичная программа, которая фиксирует идею задачи.
class A{
// create experiment
// perform experiment
// append results to file
// reset the experiment
};
main {
// open a file
// instance class
A a;
int N = 10000;
for ( int i = 0; i <= N; i++ ){
a.do_something()
}
// close file
// return
}
Каждая итерация будет просто печатать свои данные в выходной файл, порядок этого также не важен.Поскольку a.do_something()
является длинным, я бы хотел сделать его параллельным.Я установил MPI
и теперь немного знаком с его основным использованием.
Моя логика заключается в разделении диапазона N
на разделы в зависимости от количества доступных процессоров.Я ищу некоторую помощь в том, как перенести мою серийную версию в параллель с MPI.Моя попытка:
class A{
// create experiment
// perform experiment
// append results to file
// reset the experiment
};
main {
// open a file
// instance class
A a;
// initialise the MPI
int ierr = MPI_Init(&argc, &argv);
int procid, numprocs;
ierr = MPI_Comm_rank(MPI_COMM_WORLD, &procid);
ierr = MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
// partition = (job size) over (processors).
unsigned int partition = N / numprocs;
int N = 10000;
for ( int i = 0; i <= N; i++ ){
a.do_something()
}
ierr = MPI_Finalize();
// close file
// return
}
Но я действительно изо всех сил пытаюсь разбить цикл for и не знаю, как продолжить.
Это просто дважды запустит последовательный код (на моем 2машина).Я хочу разделить цикл for на N/2
фрагментов и сделать так, чтобы каждый поток занимался разными фрагментами.
Нужно ли мне сохранять ядро для передачи заданий другим ядрам?Могу ли я перебрать разделы?У меня есть поиск в Интернете, и мне не повезло.Какие-либо предложения?