Мне нужно написать функцию C, которая вычисляет минимальное значение из n входов и вставляет их в порядке возрастания в массиве. Ничего особенного в отношении входных данных. Все положительные и < 100. Сложная часть состоит в том, что результаты исходят от блокирующего MPI_Recv(), и выход не только должен вычислять текущий минимум с n входов, но также должен отслеживать, какие значения уже были вставлены в массив результатов, чтобы они могли быть соображениями для будущих групп из n входов.вычислить минимальное значение из n целых чисел
Короче говоря, мастер MPI разбивает masterArray (заполненный случайными целыми числами) на subArrays. Рабы сортируют субархивы и возвращают их мастеру. Затем мастер должен сшить обратно отсортированные подархивы в один отсортированный finalArray (если только я не могу повторно использовать masterArray). Мастер получает n subArrays, в зависимости от количества ведомых, нужно выбрать, сказать в первый раз, наименьшее из n значений из n массивов, а затем необходимо продвинуть указатель на массив, который был выбран, поэтому это значение больше не рассматривается. Это нужно делать, пока все значения не будут перенесены в порядке возрастания в finalArray.
То, как я хранил отсортированные подархивы, когда они вошли из реквизитора мастера, был в memcpy() массиве temp каждый элемент chunkSize, где chunkSize = ARRAY_SIZE/(nprocs-1) в 1D массив, который я назвал, semiSortedArrays ,
Во-первых, я не совсем уверен, как вы определяете функцию, которая принимает n значений. У меня возникают проблемы с отслеживанием всех указателей и как передать n параметров вызову функции. Я бы очень признателен за помощь, поскольку я смущен.
Большое спасибо, Скотт
TL; DR, но где ваш код, на который нужно смотреть? – xxbbcc
Errr Почему это связано с сортировкой? MPI имеет метод уменьшения, который может сделать это за один вызов. http://mpitutorial.com/mpi-reduce-and-allreduce/: "* MPI_MIN - возвращает минимальный элемент. *" – luk32
_A функция, которая принимает n values_ int * array; array = malloc (7); void func1 (int * a); и так далее. У вас есть код, который вы пробовали? – ryyker