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:
Bagaimana saya harus mengubah kode saya? Apakah saya perlu menambahkan panggilan ke fungsi MPI lain seperti
MPI_WIN_ALLOCATE
?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.
mpiexec -n 8 /path/to/application
untuk memalsukan komputer Anda dengan berpikir ia memiliki 8 node yang berbeda.Jawaban:
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.
sumber