मैं का उपयोग कर MPI_Cart_Shift प्रक्रियाओं है कि कगार पर हैं के बीच संदेश भेजने लागू किया, घन टोपोलॉजी के साथ एक संदेश वाहक बनाने और उसके बाद घन के चेहरे चयन करना होगा। उदाहरण के लिए मैं रैंक 0 (आर 0) के साथ प्रक्रिया कर रहा हूं, मेरे पड़ोस आर 2, आर 4, आर 6 (घन के निचले चेहरे) हैं। मुझे आर 2 और आर 4 मिल सकता है, लेकिन मुझे समझ में नहीं आता कि आर 6 कैसे ढूंढें। मेरे कोड:
#include<mpi.h>
#include<stdio.h>
int main(int argc, char *argv[])
{
int rank, k;
int size;
int ndims = 3;
int source, dest;
int up,down,right,left,up3, down3;
int edges[6][4] = {{0,1,5,4},
{4,5,7,6},
{2,3,1,0},
{6,7,3,2},
{1,3,7,5},
{0,2,6,7}};
int t, incep=0;
char processor_name[MPI_MAX_PROCESSOR_NAME];
MPI_Comm comm, comm3d;
int dims[3]={0,0,0}, coords[3]={0,0,0},
periods[3]={1,1,1}, reorder = 0;
MPI_Status status;
int user_edge;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Dims_create(size, ndims, dims);
MPI_Cart_create(MPI_COMM_WORLD, ndims, dims, periods, reorder, &comm);
MPI_Cart_coords(comm, rank, 3, coords);
fflush(stdout);
printf("Rank %d coordinates are %d %d %d\n", rank, coords[0], coords[1], coords[2]);
MPI_Barrier(comm);
int leftrank, rightrank;
int downrank, uprank;
MPI_Comm_rank(comm, &rank);
MPI_Cart_coords(comm, rank, 2, coords);
MPI_Cart_shift(comm, 0, -1, &downrank, &uprank);
MPI_Sendrecv(buffer, 10, MPI_INT, downrank, 123, buffer2, 10, MPI_INT, uprank, 123, comm, &status);
MPI_Cart_shift(comm, 1, -1, &rightrank, &leftrank);
MPI_Sendrecv(buffer, 10, MPI_INT, leftrank, 123, buffer2, 10, MPI_INT, rightrank, 123, comm, &status);
printf("P:%d My neighbors are rightRank: %d downRank:%d leftRank:%d upRank:%d diagonal:%d diagonalX:%d\n", rank,rightrank,downrank,leftrank,uprank,diagonal,diagonalX);
MPI_Finalize();
return 0;
}
मैं इस MPI_Cart_shift की तरह कुछ जोड़ने की कोशिश करेंगे (कॉम, 2, 1, & विकर्ण, & diagonalX); लेकिन आर 0 के लिए यह मुझे आर 1 दिखाता है और मैं समझता हूं .... मैं कोने पड़ोस कैसे प्राप्त कर सकता हूं?
मैं अपनी पोस्ट संपादित करता हूं। – Vdovin
कृपया प्रक्रिया निर्देशांक की जांच करें। वे एमपीआई कार्टेशियन निर्देशांक के अनुसार नहीं हैं। –