คำถามติดแท็ก compiling

3
Intel Fortran Compiler: เคล็ดลับในการเพิ่มประสิทธิภาพที่รวบรวม
ฉันจะเริ่มต้นด้วยประสบการณ์ส่วนตัวในห้องแล็บของเรา ย้อนกลับไปใน ifort 9 และ 10 วันเราเคยก้าวร้าวมากกับการปรับให้เหมาะสมรวบรวมด้วยแฟล็ก -O3 และตัวประมวลผลเฉพาะ (-xW -xSSE4.2 เป็นต้น) แต่เริ่มต้นด้วย ifort 11 เราเริ่มสังเกตเห็น: 1. ความไม่สอดคล้องกันบางอย่างในผลลัพธ์ (เพราะซีแมนทิกส์ไม่ได้รับการเก็บรักษาไว้) 2. กำไรเล็กลงเมื่อเทียบกับ -O2 ดังนั้นในปัจจุบันเรามักจะคอมไพล์ด้วย -O2 และ -xhost คุณมีคำแนะนำที่ดีกว่าสำหรับ ifort 11 หรือไม่ การเปลี่ยนแปลงนี้จะเกิดขึ้นอีกครั้งเมื่อเราเปลี่ยนเป็น ifort 12 หรือไม่ ขอบคุณล่วงหน้า.

1
วิธีเรียกใช้ MPI-3.0 ในโหมดหน่วยความจำที่แชร์เช่น OpenMP
ฉันกำลังโค้ดแบบขนานเพื่อแก้ตัวเลขแบบจำลองสมดุลประชากร 5 มิติ ขณะนี้ฉันมีรหัส MPICH2 ที่ดีมากใน FORTRAN แต่เมื่อเราเพิ่มค่าพารามิเตอร์อาร์เรย์จะใหญ่เกินไปที่จะทำงานในโหมดหน่วยความจำแบบกระจาย ฉันสามารถเข้าถึงคลัสเตอร์ที่มี 15 โหนดโดยที่แต่ละโหนดมี CPU หลัก 8 ตัวและ RAM ขนาด 128GB ฉันต้องการเขียนเรียกใช้โปรแกรมด้วย MPI-3.0 ในโหมดหน่วยความจำที่ใช้ร่วมกันเพื่อให้แต่ละกระบวนการไม่สร้างสำเนาของแต่ละอาร์เรย์ขึ้นมาเอง ก่อนที่ฉันจะรันอะไรก็ได้ในคลัสเตอร์ฉันต้องทดสอบบนเดสก์ท็อปที่ใช้ Ubuntu มันคือเบลดหนึ่งคลัสเตอร์ที่มี CPU 8 คอร์สองตัวและ RAM ขนาด 128 GB ฉันจะเขียนและทดสอบรหัสของฉันบนมันดังนั้นโปรดส่งคำตอบของคุณไปยังโปรแกรมที่ทำงานบนคอมพิวเตอร์ Ubuntu ฉันได้อ่านแล้วว่ามีวิธีเรียกใช้ MPI-3.0 ในโหมดหน่วยความจำที่ใช้ร่วมกันเช่น OpenMP แทนที่จะเป็นโหมดหน่วยความจำเริ่มต้นแบบกระจาย คำถาม: ฉันจะเปลี่ยนรหัสได้อย่างไร ฉันต้องเพิ่มการเรียกไปยังฟังก์ชั่น MPI อื่นMPI_WIN_ALLOCATEหรือไม่? ฉันจะรวบรวมรหัสของฉันเพื่อเรียกใช้ MPI-3.0 ในโหมดหน่วยความจำที่ใช้ร่วมกันได้อย่างไร สิ่งนี้จะแตกต่างกันหรือไม่หากมีหลายโหนด โปรดให้สคริปต์การรวบรวมตัวอย่างถ้าคุณทำได้ ฉันมีคอมไพเลอร์ GNU …

4
ระบบเชิงเส้นที่เร็วที่สุดแก้ปัญหาสำหรับเมทริกซ์จตุรัสขนาดเล็ก (10x10)
ฉันสนใจมากในการปรับนรกให้เหมาะสมกับการแก้ไขระบบเชิงเส้นสำหรับเมทริกซ์ขนาดเล็ก (10x10) บางครั้งเรียกว่าเมทริกซ์จิ๋ว มีวิธีแก้ปัญหาพร้อมสำหรับเรื่องนี้หรือไม่? เมทริกซ์สามารถอนุมานได้ว่าไม่มีความหมาย ตัวแก้ปัญหานี้จะต้องดำเนินการเกิน 1,000 000 ครั้งในหน่วยไมโครวินาทีบน Intel CPU ฉันกำลังพูดถึงระดับการเพิ่มประสิทธิภาพที่ใช้ในเกมคอมพิวเตอร์ ไม่ว่าฉันจะเขียนโค้ดในแอสเซมบลีและสถาปัตยกรรมเฉพาะหรือศึกษาความแม่นยำหรือความน่าเชื่อถือในการลดการแลกเปลี่ยนและใช้แฮ็กจุดลอยตัว (ฉันใช้แฟล็ก -ffast-math คอมไพล์ไม่มีปัญหา) การแก้ปัญหาอาจล้มเหลวได้ประมาณ 20% ของเวลา! partialPivLu ของ Eigen นั้นเร็วที่สุดในเบนช์มาร์กปัจจุบันของฉันมีประสิทธิภาพเหนือกว่า LAPACK เมื่อปรับให้เหมาะสมกับ -O3 และคอมไพเลอร์ที่ดี แต่ตอนนี้ฉันอยู่ที่จุดของการแก้ปัญหาเชิงเส้นกำหนดเอง คำแนะนำใด ๆ ที่จะได้รับการชื่นชมอย่างมาก ฉันจะทำให้โซลูชันของฉันเป็นโอเพ่นซอร์สและฉันจะทำมุมมองเชิงลึกที่สำคัญในสิ่งพิมพ์ ฯลฯ ที่เกี่ยวข้อง: ความเร็วในการแก้ระบบเชิงเส้นด้วยเมทริกซ์บล็อกแนวทแยง วิธีที่เร็วที่สุดในการแปลงเมทริกซ์นับล้านคืออะไร? https://stackoverflow.com/q/50909385/1489510

3
ฉันจะรู้ได้อย่างไรว่าโค้ดของฉันถูกแปลงเป็น vectorized โดยคอมไพเลอร์?
ดังที่อธิบายโดย Jed Brown คำตอบของต้นทุนการค้นหาและการคำนวณโดยใช้ vectorized vs non-vectorized floating point จะส่งผลให้เกิดโค้ดที่เร็วขึ้น คอมไพเลอร์สมัยใหม่หลายคนอ้างว่าพวกเขาสามารถทำการ vectorization อัตโนมัติได้ ฉันจะกำหนดส่วนของรหัสของฉันให้สำเร็จได้อย่างไร

1
การลิงก์แบบคงที่ไดนามิกและเดี่ยวหมายถึงอะไร
ฉันใช้ Intel MKL สำหรับ BLAS และใช้Intel MKL Link Line Advisorเพื่อขอความช่วยเหลือเกี่ยวกับตัวเลือกบรรทัดคำสั่ง ที่ปรึกษามีตัวเลือกสำหรับไลบรารีแบบคงที่ไดนามิกและเดี่ยว คำเหล่านี้มีความหมายว่าอย่างไร? มีการโพสต์มากมายเกี่ยวกับเรื่องนี้ แต่พวกเขาทั้งหมดได้มุ่งเน้นไปที่การพัฒนาซอฟต์แวร์มากกว่ารหัสทางวิทยาศาสตร์ / คณิตศาสตร์ (อันนี้มีประโยชน์อย่างยิ่ง) ข้อกำหนดเหล่านี้เกี่ยวข้องกับการคำนวณแบบขนานได้อย่างไร หนึ่งคือ "ดีกว่า" อื่น ๆ หรือไม่ (ฉันรู้ว่าจะต้องกำหนดให้ชัดเจนยิ่งขึ้น แต่ฉันไม่รู้จะทำอย่างไรในตอนนี้) สิ่งที่ใช้บ่อยและทำไม โปรแกรมเมอร์ต้องพิจารณาอะไรเมื่อทำการลิงค์?
9 compiling 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.