โครงสร้างพื้นฐานของการทำงานของรหัสทางวิทยาศาสตร์คืออะไร?


11

พิจารณาคอมพิวเตอร์สองเครื่องที่มีการกำหนดค่าฮาร์ดแวร์และซอฟต์แวร์ที่แตกต่างกัน เมื่อเรียกใช้รหัส Navier-Stokes ที่เหมือนกันในแต่ละแพลตฟอร์มจะใช้เวลา x และ y ในการดำเนินการซ้ำหนึ่งครั้งสำหรับคอมพิวเตอร์ 1 และ 2 ตามลำดับ ในกรณีนี้คือความแตกต่างของเวลาการวนซ้ำระหว่างคอมพิวเตอร์ 1 และคอมพิวเตอร์ 2Δ=xy

สิ่งที่อาจส่งผลกระทบต่อขนาดของ ? ผู้สมัครที่ชัดเจนคือ CPU คำถามหลักของฉันคือมีปัจจัยอื่น ๆ ที่อาจส่งผลกระทบในลำดับเดียวกับความแตกต่างของฮาร์ดแวร์ระหว่าง CPU หรือไม่ΔΔ


4
แน่นอนคุณเป็นเพียงตัวอย่างเดียว คุณควรตรวจสอบด้วยว่าΔขึ้นอยู่กับขนาดและโครงสร้างของปัญหาอย่างไร ประการที่สองฉันอยากจะแนะนำให้โพรไฟล์รหัสพยายามแยกxและyในผลรวมของการมีส่วนร่วมที่แตกต่างกันและวิเคราะห์ประสิทธิภาพของส่วนต่าง ๆ ของรหัสที่เกี่ยวกับการกำหนดค่า hw และ sw ΔΔxy
Stefano M

4
CACHE สาย Misses นั่นคือสิ่งแรกที่ต้องพิจารณา หน่วยความจำเป็นปัจจัยคอขวดสำหรับอัลกอริทึมจำนวนมาก
Deer Hunter

คำตอบ:


13

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

ซอฟต์แวร์

  • ประสิทธิภาพห้องสมุดมาตรฐาน
  • หลิน Alg ประสิทธิภาพของไลบรารี (หากซอฟต์แวร์เชื่อมโยงไปยังไลบรารีภายนอก)
  • คอมไพเลอร์ทางเลือก
  • การเพิ่มประสิทธิภาพคอมไพเลอร์
  • ธงคอมไพเลอร์
  • กระบวนการเบื้องหลัง (อาจแตกต่างกันอย่างมีนัยสำคัญหากระบบปฏิบัติการแตกต่างกัน)

ฮาร์ดแวร์

ซีพียู

  • ความเร็วสัญญาณนาฬิกา
  • สถาปัตยกรรม (คำสั่งเดียวกันอาจใช้จำนวนรอบที่แตกต่างกันในสถาปัตยกรรมที่แตกต่างกัน)
  • ขนาดแคช
  • เวลาในการตอบสนองของแคช
  • ความสามารถของ SIMD (คำสั่งเดียว, หลายข้อมูล)

หน่วยความจำ

  • จำนวนช่อง
  • ความเร็ว

HDD

  • ความเร็วในการอ่าน / เขียน (ส่วนใหญ่มีความสำคัญสำหรับการเขียนผลลัพธ์เท่านั้นทั้งนี้ขึ้นอยู่กับความถี่ที่คุณเขียนเอาต์พุตไปยังไฟล์สำหรับตัวแก้ปัญหา NS แต่อาจมีความสำคัญสำหรับโปรแกรมอื่น ๆ ที่ทำสิ่งต่าง ๆ เช่นการประมวลผลภาพ)

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


ฉันจะเพิ่มให้กับ CPU ทั้งจำนวนคอร์และความสามารถของ SIMD
เปโดร

@ เปโดรฉันออกจากแกนเนื่องจากคำถามที่กล่าวว่าแก้แบบอนุกรม แต่ฉันจะเพิ่ม SIMD ขอบคุณ
Godric Seer

1
@GodricSeer ฉันรวบรวมในเครื่องแล้ววิ่งมัน จากนั้นใช้ไฟล์ประมวลผลแบบคอมไพล์เดียวกันฉันก็รันบนเครื่องที่สอง จากคำอธิบายของคุณดูเหมือนว่าจะเป็นการคอมไพล์จากแหล่งที่มาบนคอมพิวเตอร์เครื่องที่สอง เป็นอย่างนั้นเหรอ?
Isopycnal Oscillation

1
@IsopycnalOscillation เมื่อทำการคอมไพล์บน / สำหรับเครื่องเฉพาะคุณสามารถใช้ตัวเลือก gcc / gfortran -march=nativeหรือตัวเลือกicc / ifort -xHOSTซึ่งจะใช้การปรับให้เหมาะสมกับสถาปัตยกรรมพื้นฐาน
เปโดร

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

2

x/Yx-Y

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

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

ลิงก์นี้จะอธิบายรายละเอียดเกี่ยวกับวิธีการนอกรีตที่ฉันใช้

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