Articles of mpi

Как передать 2D-массив в MPI и создать динамическое значение тега с использованием языка C?

Я новичок в программировании MPI. У меня есть массив размером 8 на 10, который мне нужно использовать, чтобы найти суммирование каждой строки параллельно. В ранге 0 (процесс 0) он будет генерировать матрицу 8 на 10, используя 2-мерный массив. Тогда я бы использовал номер tag как первое значение индекса (номер строки) массива. Таким образом, я могу […]

Написание распределенных массивов с использованием MPI-IO и декартовой топологии

У меня есть код MPI, который реализует разложение домена 2D для вычисления числовых решений для PDE. В настоящее время я пишу некоторые 2D распределенные массивы для каждого процесса (например, array_x -> proc000x.bin). Я хочу уменьшить это до одного двоичного файла. array_0, array_1, array_2, array_3, Предположим, что приведенное выше иллюстрирует декартову топологию с 4 процессами (2×2). […]

Как получить доступ и распечатать полный вектор, распределенный между работниками MPI?

Как получить доступ к глобальному вектору из отдельного streamа в MPI? Я использую библиотеку – в частности, библиотеку решений ODE – CVODE (часть SUNDIALS ). Библиотека работает с MPI, так что несколько streamов работают параллельно. Все они работают по одному и тому же коду. Каждый stream посылает stream «рядом» с ним частью данных. Но я […]

Преобразовать backtrace libc в номер строки источника

У меня есть приложение MPI, в котором сочетаются как источники C, так и Fortran. Иногда он падает из-за ошибки памяти, но мне трудно найти ошибку (она находится где-то в чьем-то коде, который в настоящий момент я не очень хорошо разбираюсь). Мне еще не удалось поймать его с помощью gdb, но иногда выводится glibc backtrace, как […]

Как MPI_IN_PLACE работает с MPI_Scatter?

Что именно делает MPI_IN_PLACE , когда задано в качестве аргумента MPI_Scatter и как его использовать? Я не могу понять man MPI_Scatter : Когда коммуникатор является внутренним коммуникатором, вы можете выполнить операцию сбора на месте (в качестве входного буфера используется выходной буфер). Используйте переменную MPI_IN_PLACE как значение корневого процесса recvbuf. В этом случае recvcount и recvtype […]

Структуры MPI и C

Должен признаться, я был очень шокирован, чтобы узнать, сколько строк кода требуется для переноса одной C-структуры с MPI. При каких обстоятельствах он будет работать, чтобы просто передать структуру с использованием предопределенного типа данных MPI_CHAR ? Рассмотрим следующий пример: struct particle { double x; double y; long i; }; struct particle p; MPI_Isend(&p, sizeof(particle), MPI_CHAR, tag, […]

Второй MPI_Send висит, если размер буфера превышает 256

int n, j, i, i2, i3, rank, size, rowChunk, **cells, **cellChunk; MPI_Status status; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); if(!rank){ printf(“\nEnter board size:\n”); fflush(stdout); scanf(“%d”, &n); printf(“\nEnter the total iterations to play:\n”); fflush(stdout); scanf(“%d”, &j); srand(3); rowChunk = n/size; //how many rows each process will get for(i=1; i<size; i++){ MPI_Send(&n,1, MPI_INT, i, 0, MPI_COMM_WORLD); MPI_Send(&j,1, […]

Как отправить 2D-массив в MPI с изменением для каждого процессора

Я пытаюсь взять произвольно сгенерированный массив на корень 0, изменить его слегка и случайным образом и отправить каждый вариант другому процессору. Вот мой код: #include “stdio.h” #include “stdlib.h” #include “mpi.h” #include “math.h” int main(int argc, char **argv) { int N = 32; int dim = 3; float a = 10.0; int size, rank, i, j, […]

MPI Неожиданный результат

Я читал и практиковал программы MPI из учебника. Там я увидел пример поиска ранга процесса. Но тот же пример дает разные результаты на моей машине (Ubuntu 10.04). Вот программа #include #include main(int argc, char **argv) { int ierr, num_procs, my_id; ierr = MPI_Init(&argc, &argv); /* find out MY process ID, and how many processes were […]

Релаксация Якоби в MPI

Я задал вопрос 1 час назад, но он не был хорошо спрошен, поэтому я воссоздал один. У меня есть код, который является релаксацией Якоби в C: while ( error > tol && iter < iter_max ) { error = 0.0; for( int j = 1; j < n-1; j++) { for( int i = 1; […]