Menghantar dan Menerima Tatasusunan 2D Melalui MPI
Pengenalan:
Untuk mengoptimumkan kecekapan pengiraan kod bersiri C yang melibatkan matriks 2D yang besar, pengkomputeran teragih dengan MPI sering digunakan. Pendekatan ini melibatkan pembahagian matriks antara berbilang nod, melaksanakan operasi setempat dan bertukar-tukar data pada sempadan tertentu.
Pendekatan dan Kebimbangan:
Pendekatan yang dicadangkan melibatkan pembahagian 2D matriks kepada segmen, dengan setiap nod mengendalikan sebahagian. Pada penghujung setiap langkah masa, nilai tepi ditukar antara nod jiran untuk memastikan kesinambungan merentas sempadan. Pelan pelaksanaan menggariskan dua pemproses, dengan satu mengendalikan baris 0 hingga x dan satu lagi mengendalikan x 1 hingga xx matriks.
Cadangan Pelaksanaan dan Soalan:
The pelaksanaan menggunakan gabungan fungsi MPI_SEND dan MPI_RECEIVE untuk menukar nilai kelebihan antara pemproses. Walau bagaimanapun, persoalan timbul sama ada pendekatan ini adalah optimum dan jika sebarang fungsi MPI tambahan perlu dipertimbangkan.
Respon dan Syor:
Untuk menambah baik pelaksanaan, ia disyorkan untuk memperuntukkan tatasusunan bersebelahan untuk pengendalian yang lebih cekap dalam MPI. Ini boleh dicapai menggunakan fungsi peruntukan memori seperti alloc_2d_init. Selain itu, menggantikan MPI_SEND dan MPI_RECEIVE dengan corak komunikasi kolektif menggunakan MPI_Sendrecv atau komunikasi tidak menyekat boleh meningkatkan prestasi.
Contoh:
Coretan kod yang disemak berikut memberikan contoh komunikasi yang lebih baik menggunakan MPI_Sendrecv:
int sendptr, recvptr; int neigh = MPI_PROC_NULL; if (myrank == 0) { sendptr = addr(A[0][0]); recvptr = addr(B[0][0]); neigh = 1; } else { sendptr = addr(B[0][0]); recvptr = addr(A[0][0]); neigh = 0; } MPI_Sendrecv(sendptr, N*M, MPI_INT, neigh, tagA, recvptr, N*M, MPI_INT, neigh, tagB, MPI_COMM_WORLD, &status);
Pengoptimuman:
Menggunakan MPI_Sendrecv membolehkan penghantaran dan penerimaan data serentak, menghapuskan keperluan untuk halangan. Pendekatan yang dioptimumkan ini meningkatkan kecekapan komunikasi dan mengurangkan kesesakan.
Atas ialah kandungan terperinci Adakah MPI_Sendrecv Pendekatan Optimum untuk Pertukaran Data dalam Matriks 2D Teragih?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!