खोज…


टिप्पणियों

सामूहिक संचालन एक एकल ऑपरेशन में एक संचारक द्वारा बताई गई प्रक्रियाओं को इंगित करने और उनके बीच एक सिंक्रनाइज़ेशन करने के लिए एमपीआई कॉल डिज़ाइन किए गए हैं। इनका उपयोग अक्सर अन्य प्रक्रियाओं द्वारा योगदान किए गए डेटा के आधार पर या अन्य सभी प्रक्रियाओं से डेटा को वितरित करने या एकत्र करने के लिए किया जाता है।

ध्यान दें कि संचारक की सभी प्रक्रियाएँ समान सामूहिक कार्यों को क्रम में करना चाहिए, अन्यथा अनुप्रयोग अवरुद्ध हो जाएगा।

प्रसारण

निम्न कोड MPI_COMM_WORLD संचारक से संबंधित सभी प्रक्रियाओं के बीच buffer में सामग्री को प्रसारित करता है (अर्थात समानांतर में चलने वाली सभी प्रक्रियाएं) MPI_Bcast ऑपरेशन का उपयोग करके।

int rank;
int res;

res = MPI_Comm_rank (MPI_COMM_WORLD, &rank);
if (res != MPI_SUCCESS)
{
    fprintf (stderr, "MPI_Comm_rank failed\n");
    exit (0);
}

int buffer[100];
if (rank == 0)
{
    // Process with rank id 0 should fill the buffer structure
    // with the data it wants to share.
}

res = MPI_Bcast (buffer, 100, MPI_INT, 0, MPI_COMM_WORLD);
if (res != MPI_SUCCESS)
{
    fprintf (stderr, "MPI_Bcast failed\n");
    exit (0);
}

बैरियर

MPI_Barrier ऑपरेशन दिए गए संचारक से संबंधित प्रक्रियाओं के बीच एक सिंक्रनाइज़ेशन करता है। यही है, किसी दिए गए संचारक से सभी प्रक्रियाएं MPI_Barrier भीतर तब तक प्रतीक्षा MPI_Barrier जब तक कि वे सभी अंदर नहीं हो जाती हैं, और उस बिंदु पर, वे ऑपरेशन को छोड़ देंगे।

int res;

res = MPI_Barrier (MPI_COMM_WORLD); /* all processes will wait */
if (res != MPI_SUCCESS)
{
    fprintf (stderr, "MPI_Barrier failed\n");
    exit (0);
}

स्कैटर

मूल प्रक्रिया MPI_Scatter ऑपरेशन का उपयोग करके सभी प्रक्रियाओं को (सभी स्वयं सहित) sendbuf में सामग्री को sendbuf MPI_Scatter है।

int rank;
int size;
int sendcount = 1;
int recvcount = sendcount;
int sendbuf[3];
int recvbuf;
int root = 0;

MPI_Comm_size (MPI_COMM_WORLD, &size);

if (size != 3)
{
    fprintf (stderr, "Number of processes must be 3\n");
    exit (0);
}

MPI_Comm_rank (MPI_COMM_WORLD, &rank);

if (rank == 0)
{
    sendbuf[0] = 3;
    sendbuf[1] = 5;
    sendbuf[2] = 7;
}

MPI_Scatter (sendbuf, sendcount, MPI_INT, &recvbuf, recvcount, MPI_INT, root, MPI_COMM_WORLD);

printf ("rank: %i, value: %i\n", rank, recvbuf);

/* Output:
 * rank: 0, value: 3
 * rank: 1, value: 5
 * rank: 2, value: 7
 */


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow