วิธีเรียกใช้ MPI-3.0 ในโหมดหน่วยความจำที่แชร์เช่น OpenMP


14

ฉันกำลังโค้ดแบบขนานเพื่อแก้ตัวเลขแบบจำลองสมดุลประชากร 5 มิติ ขณะนี้ฉันมีรหัส MPICH2 ที่ดีมากใน FORTRAN แต่เมื่อเราเพิ่มค่าพารามิเตอร์อาร์เรย์จะใหญ่เกินไปที่จะทำงานในโหมดหน่วยความจำแบบกระจาย

ฉันสามารถเข้าถึงคลัสเตอร์ที่มี 15 โหนดโดยที่แต่ละโหนดมี CPU หลัก 8 ตัวและ RAM ขนาด 128GB ฉันต้องการเขียนเรียกใช้โปรแกรมด้วย MPI-3.0 ในโหมดหน่วยความจำที่ใช้ร่วมกันเพื่อให้แต่ละกระบวนการไม่สร้างสำเนาของแต่ละอาร์เรย์ขึ้นมาเอง

ก่อนที่ฉันจะรันอะไรก็ได้ในคลัสเตอร์ฉันต้องทดสอบบนเดสก์ท็อปที่ใช้ Ubuntu มันคือเบลดหนึ่งคลัสเตอร์ที่มี CPU 8 คอร์สองตัวและ RAM ขนาด 128 GB ฉันจะเขียนและทดสอบรหัสของฉันบนมันดังนั้นโปรดส่งคำตอบของคุณไปยังโปรแกรมที่ทำงานบนคอมพิวเตอร์ Ubuntu

ฉันได้อ่านแล้วว่ามีวิธีเรียกใช้ MPI-3.0 ในโหมดหน่วยความจำที่ใช้ร่วมกันเช่น OpenMP แทนที่จะเป็นโหมดหน่วยความจำเริ่มต้นแบบกระจาย

คำถาม:

  1. ฉันจะเปลี่ยนรหัสได้อย่างไร ฉันต้องเพิ่มการเรียกไปยังฟังก์ชั่น MPI อื่นMPI_WIN_ALLOCATEหรือไม่?

  2. ฉันจะรวบรวมรหัสของฉันเพื่อเรียกใช้ MPI-3.0 ในโหมดหน่วยความจำที่ใช้ร่วมกันได้อย่างไร สิ่งนี้จะแตกต่างกันหรือไม่หากมีหลายโหนด

โปรดให้สคริปต์การรวบรวมตัวอย่างถ้าคุณทำได้ ฉันมีคอมไพเลอร์ GNU เท่านั้น คลัสเตอร์ที่ฉันใช้ไม่รองรับคอมไพเลอร์ของ Intel


1
ใช่คุณควรจะสามารถรัน MPI บนระบบหน่วยความจำที่ใช้ร่วมกันได้ อย่างไรก็ตามวิธีการตั้งโปรแกรมจริงจะเหมือนกัน รหัสของคุณควรเหมือนกันสำหรับระบบหน่วยความจำทั้งแบบแชร์และแบบกระจาย วิธีการรันเป็นความแตกต่างเพียงอย่างเดียว
NoseKnowsAll

นอกจากนี้แม้ว่าฉันจะไม่ได้ทดสอบสิ่งนี้ แต่ฉันเชื่อว่าคุณควรรันโค้ดของคุณโดยใช้คำสั่งmpiexec -n 8 /path/to/applicationเพื่อปลอมคอมพิวเตอร์ของคุณโดยคิดว่ามันมี 8 โหนดที่แตกต่างกัน
NoseKnowsAll

ฉันใช้งานแล้วในระบบหน่วยความจำที่ใช้ร่วมกัน แต่ฉันต้องการให้คอร์การคำนวณใช้ RAM ร่วมกันเช่นใน OpenMP อาร์เรย์บางตัวของฉันมีขนาด 6 GB ดังนั้นฉันจึงต้องการแกนประมวลผลทั้งหมดในแต่ละโหนดเพื่อทำงานในโหมดหน่วยความจำที่ใช้ร่วมกัน
Franklin Betten

2
นี่เป็นโครงการวิจัย ดังนั้นฉันต้องขยายขนาดของปัญหาให้มากขึ้น ฉันมีโค้ดที่ใช้งานได้อยู่แล้วดังนั้นสิ่งเดียวที่ป้องกันการเพิ่มขนาดคือหน่วยความจำที่ต้องการ ฉันเจอเอกสารและ powerpoint จากการประชุม MPI ซึ่งแนะนำว่า MPI-3.0 สามารถแชร์หน่วยความจำด้วย funtions สายใหม่ที่เพิ่มเข้ามาภายใต้หมวดหมู่การสื่อสารด้านเดียว ฟังก์ชั่นเช่น 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

คำตอบ:


0

ฉันพบลิงค์นี้ใน Stack Overflow ด้วย ฉันสาบานว่าฉันค้นหาคำถามเช่นเดียวกับฉันตลอดไป แต่ดูเหมือนว่าวิธีที่ดีที่สุดในการค้นหาคำถามในสแต็คล้นคือการเริ่มต้นสร้างคำถามและจะแนะนำโพสต์ที่คล้ายกัน

อย่างไรก็ตามนี่คือลิงค์ที่ว่ากันว่าคุณสามารถรัน MPI3.0 + ในโหมดหน่วยความจำที่แชร์เช่น openmp มีแหล่งข้อมูลอื่นที่ฉันพบซึ่งแนะนำและบางอย่างที่คุณสามารถทำได้ แต่ไม่ได้อธิบายว่าจะให้ทรัพยากรหรือวิธีการที่จะคิดออก

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

หลังจากทำตามคำแนะนำในลิงค์นี้ฉันพบปัญหาในการใส่ USE 'mpi_f08' ที่ด้านบนของรหัสของฉัน ฉันใช้ gfortran-4.8 ซึ่งเห็นได้ชัดว่าปัจจุบันมี FORTRAN2008 ไม่เพียงพอที่จะรองรับ USE mpi_f08 มีคนในลิงค์นี้อาจใช้คอมไพเลอร์ intel fortran 2008 คุณสามารถใช้ USE mpi ซึ่งครอบคลุมได้ถึง Fortran2003 ค่อนข้างดี อย่างไรก็ตามฉันไม่คิดว่า Fortran 2003 มีฟังก์ชัน Type () ซึ่งจำเป็นสำหรับการใช้งานฟังก์ชั่น Remote Memory Access เช่น MPI_WIN_ALLOCATE_SHARED ดังนั้นคุณจึงไม่สามารถใช้งานโดยไม่มี FORTRAN2008 แต่ฉันไม่มีทรัพยากรเพียงพอที่จะพูดอย่างนั้นจริง ๆ แต่สิ่งที่ฉันได้ค้นพบนั้นแนะนำว่า


1
คุณสามารถใช้ MPI_Win_allocate_shared กับอินเทอร์เฟซ Fortran ทั้งสาม นอกจากนี้คุณสามารถเขียนของคุณเองด้วย Fortran 2003 ISO_C_BINDING และอินเตอร์เฟส C
Jeff

โปรดบอกฉันด้วยว่าเหตุใดจึงต้องใช้ Type () เพื่อใช้ RMA จาก Fortran ฉันรู้ว่าไม่มีข้อ จำกัด ดังกล่าว RMA ใช้กับ F77 มาหลายปีแล้ว
เจฟฟ์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.