Masalah:
Anda mempunyai matriks 2D yang besar yang memerlukan pemprosesan merentas berbilang nod menggunakan MPI. Satu-satunya komunikasi antara nod melibatkan perkongsian nilai tepi selepas setiap langkah masa.
Pendekatan:
Pendekatan cadangan anda, yang digariskan dalam soalan, sesuai untuk masalah ini. Segmen kod berikut menggambarkan pelaksanaan yang dicadangkan:
// (assume A is a 2D array) if (myrank == 0) { for (i = 0; i < x; i++) { for (j = 0; j < y; j++) { // Perform C++ code implementation MPI_Send(&A[i][0], 3, MPI_INT, 1, 0, MPI_COMM_WORLD); MPI_Recv(&B[0][0], 3, MPI_INT, 1, 0, MPI_COMM_WORLD, &status); MPI_Barrier(MPI_COMM_WORLD); } } } if (myrank == 1) { for (i = x; i < xx; i++) { for (j = 0; j < y; j++) { // Perform C++ code implementation MPI_Send(&B[i][0], 3, MPI_INT, 0, 0, MPI_COMM_WORLD); MPI_Recv(&A[0][0], 3, MPI_INT, 0, 0, MPI_COMM_WORLD, &status); MPI_Barrier(MPI_COMM_WORLD); } } }
Fungsi MPI Tambahan:
Pertimbangan:
Atas ialah kandungan terperinci Bagaimana untuk Menghantar dan Menerima Tatasusunan 2D dalam MPI dengan Berkesan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!