मैं एमपीआई में एक नौसिखिया हूं और सॉर्ट कोड (बबलसॉर्ट) लिखने की कोशिश कर रहा हूं, कोड काम करता है, लेकिन ऐसा लगता है कि मुझे कुछ याद आ रहा है

कोड यहाँ है:--->

#define N 10`
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>
#include <stddef.h>
#include "mpi.h"
using namespace std;


int main(int argc, char* argv[])
{
    int i, j, k, rank, size;
    int a[N] = { 10,9,8,7,6,5,4,3,2,1 };
    int c[N];
    int aa[N], cc[N];

    MPI_Init(&argc, &argv);
    MPI_Comm_size(MPI_COMM_WORLD, &size);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);

    MPI_Scatter(a, N/size, MPI_INT, aa, N/size , MPI_INT, 0, MPI_COMM_WORLD);

    MPI_Barrier(MPI_COMM_WORLD);

    int n = N/size;
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            if (aa[j] > aa[j + 1]) {
                int temp = aa[j];
                aa[j] = aa[j + 1];
                aa[j + 1] = temp;
            }
        }
    }
    for (int i = 0; i < n; i++) {
        cc[i] = aa[i];
    };

    MPI_Barrier(MPI_COMM_WORLD);
    MPI_Gather(cc, N/size , MPI_INT, c, N/size, MPI_INT, 0, MPI_COMM_WORLD);

    MPI_Barrier(MPI_COMM_WORLD);
    MPI_Finalize();
    cout << cc[9];
    if (rank == 0) {
        cout << "C is look like : " << endl;
        for (int i = 0; i < N; i++) {
            cout << c[i] << "   ";

        }
    }
}

प्रोग्राम का आउटपुट:--> अंत में हमें त्रुटियां मिलती हैं सामान्य तौर पर, मेरा एमपीआई 4 प्रोसेसर के रूप में कॉन्फ़िगर किया गया है

-858993460 C is look like :
-858993460
-858993460
-858993460
9   10   7   8   5   6   3   4   -858993460   -858993460
-2
Sultan 18 अप्रैल 2020, 14:49

1 उत्तर

सबसे बढ़िया उत्तर

आपके कार्यक्रम में कई मुद्दे हैं:

  • cc[9] का उपयोग अप्रारंभीकृत किया जाता है
  • आप केवल (N/size)*size) तत्वों पर काम करते हैं, और आपके मामले में N=10, size=4, इसका मतलब है कि आप केवल 8 तत्वों पर काम करते हैं। इसका इलाज MPI_Scatterv() और MPI_Gatherv() का उपयोग करना है
  • यह मानते हुए कि आपका बबल प्रकार सही है (मैंने उस हिस्से की जांच नहीं की है), आपका प्रोग्राम क्रमबद्ध (उप) सरणियों को इकट्ठा करता है, और आप भोलेपन से यह उम्मीद नहीं कर सकते कि परिणाम एक (पूर्ण आकार) क्रमबद्ध सरणी है।
1
Gilles Gouaillardet 18 अप्रैल 2020, 12:48