การลิงก์แบบคงที่ไดนามิกและเดี่ยวหมายถึงอะไร


9

ฉันใช้ Intel MKL สำหรับ BLAS และใช้Intel MKL Link Line Advisorเพื่อขอความช่วยเหลือเกี่ยวกับตัวเลือกบรรทัดคำสั่ง

ที่ปรึกษามีตัวเลือกสำหรับไลบรารีแบบคงที่ไดนามิกและเดี่ยว คำเหล่านี้มีความหมายว่าอย่างไร?

มีการโพสต์มากมายเกี่ยวกับเรื่องนี้ แต่พวกเขาทั้งหมดได้มุ่งเน้นไปที่การพัฒนาซอฟต์แวร์มากกว่ารหัสทางวิทยาศาสตร์ / คณิตศาสตร์ (อันนี้มีประโยชน์อย่างยิ่ง)

  • ข้อกำหนดเหล่านี้เกี่ยวข้องกับการคำนวณแบบขนานได้อย่างไร
  • หนึ่งคือ "ดีกว่า" อื่น ๆ หรือไม่ (ฉันรู้ว่าจะต้องกำหนดให้ชัดเจนยิ่งขึ้น แต่ฉันไม่รู้จะทำอย่างไรในตอนนี้)
  • สิ่งที่ใช้บ่อยและทำไม
  • โปรแกรมเมอร์ต้องพิจารณาอะไรเมื่อทำการลิงค์?

ถ้าคุณยังไม่ได้เห็นคอมไพเลอร์ใหม่กว่าของ Intel (ฉันคิดว่าเวอร์ชั่น 11 และใหม่กว่า) จะมีการ-mklตั้งค่าสถานะซึ่งควรลบความจำเป็นในการใช้ที่ปรึกษาสายลิงค์ในกรณีส่วนใหญ่
Aesin

@Aesin ฉันสงสัย มันเป็นวิธีที่ดีที่สุดในการเชื่อมโยง?
สอบถาม

ฉันไม่รู้โชคไม่ดี - ฉันไม่ได้ทำการทดสอบใด ๆ จริง ๆ และคู่มือก็ไม่ได้ลงรายละเอียดเกี่ยวกับสิ่งที่กำลังทำหรือวิธีผสมผสานกับตัวเลือกอื่น ๆ มันจะเชื่อมโยง MKL แบบคงที่หากคุณระบุ-staticและเชื่อมโยงแบบไดนามิกหากคุณไม่ทำ แน่นอนว่ามันดีกว่ามากจากมุมมองที่ใช้งานง่ายไม่ว่าในกรณีใด
Aesin

คำตอบ:


14

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

เป็นการยากที่จะสร้างคำสั่งทั่วไปเกี่ยวกับว่าไลบรารีแบบคงที่หรือแบบไดนามิกนั้นดีกว่าในการคำนวณประสิทธิภาพสูง แน่นอนว่าสำหรับแอปพลิเคชั่นประมวลผลความเร็วสูงส่วนใหญ่จะง่ายกว่าและต้องการลิงก์แบบสแตติก ทำไมนี้ ในซูเปอร์คอมพิวเตอร์รุ่นปัจจุบันมักจะมีงานเดียวเท่านั้นที่ทำงานต่อโหนดซึ่งจะช่วยลดผลประโยชน์จากการใช้หน่วยความจำที่ลดลงอย่างมากเนื่องจากไลบรารีที่แบ่งใช้ นอกจากนี้รหัสการคำนวณทางวิทยาศาสตร์มักจะไม่ซับซ้อนมากในแง่ของคุณสมบัติภาษาหรือการออกแบบโปรแกรมและพวกเขาไม่ค่อยใช้คุณลักษณะภาษาที่ต้องการการโหลดแบบไดนามิก (เช่นโมดูลปลั๊กอิน) ไลบรารีแบบไดนามิกมีความยากเพิ่มเติมของการพกพาน้อยกว่ามากในระบบปฏิบัติการมากกว่าไลบรารีแบบคงที่

เป็นผลมาจากทั้งหมดนี้ระบบ HPC ส่วนใหญ่ใช้การรวบรวมแบบคงที่เมื่อมี ไลบรารีแบบสแตติกถูกมองว่าติดตั้งและบำรุงรักษาได้เร็วขึ้นง่ายขึ้นและโดยทั่วไปจะแข็งแกร่งกว่า รหัส HPC ที่อ้างอิงจาก Python เป็นหนึ่งในข้อยกเว้นนี้ แต่ก็ยังคงมีปัญหาด้านประสิทธิภาพที่เกี่ยวข้องกับการโหลดแบบไดนามิก (ผู้ใช้หลายคนใน scicomp กำลังทำงานกับปัญหานี้จริง ๆ ตอนนี้!)

เมื่อคุณเลือกการเชื่อมโยงแบบคงที่และแบบไดนามิกคุณต้องพิจารณาว่าจะปรับใช้รหัสของคุณอย่างไรและที่ใดไม่ว่าจะเป็นไลบรารีพื้นฐานที่มีแนวโน้มที่จะเปลี่ยนหรือย้ายและลักษณะการทำงานของระบบไฟล์เครือข่ายของคุณ คุณควรประเมินด้วยว่าคุณต้องการการเชื่อมโยงแบบไดนามิกหรือไม่ผ่านการพึ่งพาไลบรารีหรือการทำงานร่วมกับภาษาสคริปต์แบบไดนามิกเช่น Python

Single Dynamic Library เป็นคำศัพท์เฉพาะของ Intel มันหมายถึงบรรจุภัณฑ์ของไลบรารีแบบไดนามิกของพวกเขาลงในเมตาดาต้าไลบรารีเดียวเพื่อลดความซับซ้อนของกระบวนการเชื่อมโยง หากคุณจะใช้การเชื่อมโยงแบบไดนามิกกับห้องสมุด Intel อาจเป็นที่ต้องการของฟอร์มนี้เว้นแต่ว่าคุณกำลังทำสิ่งที่ซับซ้อน


คำตอบที่ยอดเยี่ยม! อีกสิ่งหนึ่ง: ฉันรู้ว่าการเชื่อมโยงแบบไดนามิกจะไม่จำเป็นและตัวเลือกจะอยู่ระหว่างการคงที่และแบบไดนามิกเดียว คุณบอกว่าฉันควรจะเลือกอย่างหลังถ้าฉันไม่ทำอะไรที่ซับซ้อน (ซึ่งฉันไม่ได้) ดังนั้นฉันควรลิงก์โดยใช้ Single Dynamic หรือไม่ [FWiW ฉันกำลังทำงานเกี่ยวกับวิธีการของ Krylov Subspace]
สอบสวน

ขออภัย! ฉันหมายความว่าคุณควรจะใช้แบบคงที่โดยค่าเริ่มต้น แต่ต้องการแบบไดนามิกเดียวมากกว่าแบบไดนามิก
Aron Ahmadia

ฉันทำการเปรียบเทียบและพบว่า: มี Dynamic : 0:42.92 Static : 0:42.93 Single Dynamic : 0:42.97ค่าเฉลี่ยมากกว่า 1,000 ค่า
สอบถาม

1
เป็นที่น่าสังเกตว่าในบางระบบ HPC คุณต้องเชื่อมโยงแบบคงที่ - บนระบบ BlueGene / L เป็นกรณีนี้ตัวอย่างเช่นเนื่องจาก OS ที่ลดลงในโหนดการคำนวณไม่รองรับการเชื่อมโยงแบบไดนามิก
Aesin

1
ฉันรู้สึกสับสนเล็กน้อยจากคำสั่งของคุณ: "ในยุคปัจจุบันของซูเปอร์คอมพิวเตอร์มักจะมีงานเพียงงานเดียวต่อโหนดซึ่งจะลดผลประโยชน์จากการใช้หน่วยความจำที่ลดลงอย่างมากเนื่องจากไลบรารีที่ใช้ร่วมกัน" คุณหมายถึงว่ามีเพียงกระบวนการเดียวต่อโหนดหรือไม่ ฉันไม่แน่ใจว่างานหนึ่งงานต่อโหนดมีผลต่อสถานการณ์อย่างไร เมื่อการเชื่อมโยงแบบสแตติกแต่ละกระบวนการจะเก็บสำเนาแบบเต็มของไฟล์ปฏิบัติการซึ่งอาจมีความสำคัญเมื่อแกนประมวลผลต่อตัวประมวลผลโตขึ้น การลิงก์แบบไดนามิกจะต้องใช้ไลบรารีแบบไดนามิกหนึ่งสำเนาต่อหนึ่งหน่วยความจำที่แชร์
andybauer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.