Cara Menjalankan MPI-3.0 dalam mode memori bersama seperti OpenMP

14

Saya memparalelkan kode untuk memecahkan model keseimbangan populasi 5 dimensi secara numerik. Saat ini saya memiliki kode paralel MPICH2 yang sangat baik di FORTRAN tetapi ketika kami meningkatkan nilai parameter array menjadi terlalu besar untuk dijalankan dalam mode memori terdistribusi.

Saya memiliki akses ke sebuah cluster dengan 15 node, di mana setiap node memiliki dua CPU 8 core dan 128GB RAM. Saya ingin menulis menjalankan program dengan MPI-3.0 dalam mode memori bersama sehingga setiap proses tidak menghasilkan salinan masing-masing array.

Sebelum saya dapat menjalankan apa pun di cluster, saya harus mengujinya di desktop yang menjalankan Ubuntu. Ini pada dasarnya adalah satu blade dari cluster karena memiliki dua CPU 8 inti dan 128 GB RAM. Saya akan menulis dan menguji kode saya di atasnya, jadi tolong siapkan tanggapan Anda terhadap menjalankan program di komputer Ubuntu.

Saya telah membaca bahwa ada cara untuk menjalankan MPI-3.0 dalam mode memori bersama seperti OpenMP alih-alih mode memori terdistribusi default.

Pertanyaan:

  1. Bagaimana saya harus mengubah kode saya? Apakah saya perlu menambahkan panggilan ke fungsi MPI lain seperti MPI_WIN_ALLOCATE?

  2. Bagaimana cara mengkompilasi kode saya untuk menjalankan MPI-3.0 dalam mode memori bersama? Apakah ini akan berbeda jika lebih dari beberapa node?

Tolong beri skrip kompilasi sampel jika Anda bisa. Saya juga hanya memiliki kompiler GNU. Cluster yang saya gunakan tidak mendukung kompiler Intel.

Franklin Betten
sumber
1
Ya, Anda harus dapat menjalankan MPI pada sistem memori bersama. Namun, cara itu sebenarnya diprogram akan identik. Kode Anda harus sama untuk sistem memori yang dibagikan dan didistribusikan. Cara menjalankannya adalah satu-satunya perbedaan.
NoseKnowsAll
Selain itu, meskipun saya belum menguji ini, saya percaya Anda harus dapat menjalankan kode Anda menggunakan perintah mpiexec -n 8 /path/to/applicationuntuk memalsukan komputer Anda dengan berpikir ia memiliki 8 node yang berbeda.
NoseKnowsAll
Saya sudah menjalankannya pada sistem memori bersama tetapi saya ingin core komputasi untuk berbagi RAM, seperti di OpenMP. Beberapa array saya adalah 6 GB jadi saya perlu semua core pada setiap node untuk beroperasi dalam mode memori bersama.
Franklin Betten
2
Nah ini untuk proyek penelitian. Jadi saya perlu memperbesar ukuran masalah. Saya sudah memiliki kode kerja sehingga satu-satunya hal yang mencegah peningkatan adalah memori yang dibutuhkan. Saya telah menemukan beberapa dokumen dan powerpoint dari konferensi MPI yang menyarankan MPI-3.0 dapat berbagi memori dengan fungsi panggilan baru yang telah ditambahkan di bawah kategori komunikasi satu sisi. Fungsinya seperti MPI_WIN_ALLOCATE_SHARE
Franklin Betten
2
www.eurompi2014.org/tutorials/hoefler-advanced-mpi-eurompi14.pdf cs.utexas.edu/users/flame/BLISRetreat2014/slides/…
Franklin Betten

Jawaban:

0

Saya juga menemukan tautan ini di Stack Overflow. Saya bersumpah saya mencari pertanyaan seperti milik saya untuk selamanya tetapi tampaknya cara terbaik untuk mencari pertanyaan tentang stack overflow adalah mulai membuat pertanyaan dan akan menyarankan posting serupa.

Pokoknya di sini adalah tautan yang sebenarnya mengatakan bahwa Anda dapat menjalankan MPI3.0 + dalam mode memori bersama seperti openmp. Ada sumber lain yang saya temukan yang juga menyarankan dan beberapa yang menyatakan Anda bisa tetapi tidak menjelaskan bagaimana atau memberikan sumber daya untuk mengetahuinya.

/programming/24797298/mpi-fortran-code-how-to-share-data-on-node-via-openmp

Setelah mengikuti saran yang diberikan di sini di tautan ini, saya mengalami masalah dengan menempatkan USE 'mpi_f08' di bagian atas kode saya. Saya menggunakan gfortran-4.8 yang saat ini tampaknya tidak memiliki cukup dukungan FORTRAN2008 untuk MENGGUNAKAN mpi_f08. Ada orang di tautan ini yang mungkin menggunakan kompiler intel fortran 2008. Anda dapat menggunakan USE mpi yang mencakup hingga Fortran2003 dengan cukup baik. Namun saya tidak berpikir bahwa Fortran 2003 memiliki fungsi Type () yang diperlukan untuk menggunakan fungsi Remote Memory Access, seperti MPI_WIN_ALLOCATE_SHARED, jadi Anda tidak dapat menggunakannya tanpa FORTRAN2008. Tetapi saya benar-benar tidak memiliki sumber daya yang cukup untuk dengan pasti mengatakan itu untuk suatu fakta tetapi apa yang saya temukan memang menunjukkan hal itu.

Franklin Betten
sumber
1
Anda dapat menggunakan MPI_Win_allocate_share dengan ketiga antarmuka Fortran. Selanjutnya, Anda dapat menulis sendiri dengan Fortran 2003 ISO_C_BINDING dan antarmuka C.
Jeff
Tolong beritahu saya mengapa orang perlu Type () untuk menggunakan RMA dari Fortran? Saya tahu tidak ada batasan seperti itu. RMA telah digunakan dengan F77 selama bertahun-tahun.
Jeff