سؤال

أحاول تنفيذ فرز Bitonic باستخدام MPI لمعالجات 2^n.

أرغب في استخدام n-dimensional Hypercube للقيام بذلك للراحة. باستخدام mpi_cart_create يمكنني إنشاء أبعاد تنظيم ذاتي. سيؤدي القيام بذلك إلى زيادة كفاءة عملي إلى الحد الأقصى وأيضًا تقليل عدد LOC الذي يجب أن أبصق عليه لإنجازه ..

غوغلينغ والقمامة دائما تخبر نفس الشيء:

لاحظ أن hypercube n -dimensional هو torus n -dimensional مع 2 عملية لكل اتجاه الإحداثيات. وبالتالي ، فإن الدعم الخاص لهياكل Hypercube ليس ضروريًا.

لم أر أي مثال واحد + n -dimensional torus مع عمليتين لكل اتجاه الإحداثيات لا شيء سوى لغز بالنسبة لي. هل يتعين على أي شخص أن يقترح؟

شكرًا،

هل كانت مفيدة؟

المحلول

حسنًا ، وجدها

بحيث يكون ذلك بالنسبة لفرط فائق 4 د .. النمط مستقيم إلى الأمام. في N-dimensional Hypercube ، كل نقطة لها جار N ويتم تمثيلها في هذا الرمز. لاحظ أن هذا الرمز يجب أن يستخدم بدلاً من قناع بت Xoring لأن MPI يمكنه إعادة ترتيب العمليات لتناسب التخطيط الفعلي لمجموعاتك.

int rank, size; //I am process RANK and we are a total of SIZE
MPI_Init(&argc, &argv); 

MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);

myFairShareOfNumber = totalNumber / size;

MPI_Comm nthCube;
int nDim=4;
int processPerDim [4]= {2,2,2,2};
int period [4]= {1,1,1,1};

MPI_Cart_create(MPI_COMM_WORLD, nDim, processPerDim, period, true, &nthCube);

int rankInDim;
MPI_Comm_rank(nthCube, &rankInDim);

int rank_source, rank_desta, rank_destb, rank_destc, rank_destd;
MPI_Cart_shift(nthCube, 0,1,&rank_source, &rank_desta);
MPI_Cart_shift(nthCube, 1,1,&rank_source, &rank_destb);
MPI_Cart_shift(nthCube, 2,1,&rank_source, &rank_destc);
MPI_Cart_shift(nthCube, 3,1,&rank_source, &rank_destd);
cerr << "I am known in the world as " << rankInDim << " my adjacents are -> " << rank_desta << "-" << rank_destb << "-" << rank_destc << "-" << rank_destd <<"\n";
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top