แบบขนาน-GPU-ODE-ตัวแก้ปัญหาจำนวนมาก
ตัวรวมตัวเร่งความเร็ว GPU สำหรับระบบสมการเชิงอนุพันธ์สามัญอิสระจำนวนมาก
โมดูล:
ระบบเดี่ยวต่อเธรด v3.1
โดยจะแก้ไขอินสแตนซ์จำนวนมากของระบบ ODE เดียวกันที่มีเงื่อนไขเริ่มต้นและ/หรือชุดพารามิเตอร์ที่แตกต่างกัน
ระบบคู่ต่อบล็อก v1.0
โดยจะแก้ปัญหาอินสแตนซ์จำนวนมากของระบบคู่ (ประกอบด้วยระบบย่อยจำนวนมาก) ที่มีเงื่อนไขเริ่มต้นและ/หรือชุดพารามิเตอร์ที่แตกต่างกัน
บันทึกประจำรุ่น:
18 สิงหาคม 2020.
ระบบเดี่ยวต่อเธรด v3.1:
- รองรับความแม่นยำทั้งแบบเดี่ยวและคู่
- คู่มือที่ได้รับการปรับปรุง/ปรับปรุงใหม่ เช่น คู่มือการติดตั้งโดยละเอียดเพิ่มเติมสำหรับผู้ใช้ Windows
- รวมแบตช์ไฟล์ make.bat เพื่อทำให้กระบวนการคอมไพล์บน Windows ง่ายขึ้น
- มีการเพิ่มบทช่วยสอนใหม่ (บทช่วยสอน 5) เพื่อทดสอบตัวอย่างที่มีอินสแตนซ์ที่มีความแตกต่างของมาตราส่วนเวลาขนาดใหญ่มาก เส้นโค้งประสิทธิภาพของ MPGOS ถูกเปรียบเทียบกับแพ็คเกจโปรแกรม odeint (C++) และ DifferentialEquations.jl (Julia) MPGOS เหนือกว่าแพ็คเกจเหล่านี้
- บทช่วยสอน 6 (ไดนามิกของผลกระทบ) ยังถูกขยายด้วยเส้นโค้งประสิทธิภาพ ดูจุดก่อนหน้า ในกรณีนี้ MPGOS เป็นแพ็คเกจโปรแกรมเดียวที่สามารถจัดการระบบที่มีไดนามิกของผลกระทบ (บน GPU) ดังนั้น จึงมีการเปรียบเทียบประสิทธิภาพกับ odeint และ DifferentialEquations.jl เวอร์ชัน CPU เท่านั้น
- การเปลี่ยนแปลงเล็กน้อย: แยกตัวแปร TimeDomain และ ActualState อย่างชัดเจน
ระบบคู่ต่อบล็อก v1.0:
- โมดูล MPGOS แรกนี้พร้อมแล้ว โค้ดได้รับการออกแบบมาเพื่อแก้ไขอินสแตนซ์จำนวนมากของระบบคู่ (ประกอบด้วยระบบย่อยจำนวนมากที่เรียกว่าหน่วย) ที่มีเงื่อนไขเริ่มต้นและ/หรือชุดพารามิเตอร์ที่แตกต่างกัน
- โมดูลได้รับการสืบทอดคุณสมบัติเกือบทั้งหมดของโมดูล Single System Per-Thread v3.1 มีความเชี่ยวชาญพิเศษบางประการ เช่น การจัดการเหตุการณ์สามารถทำได้ในระดับหน่วยเท่านั้น การมีเพศสัมพันธ์ที่ชัดเจนเท่านั้นที่สามารถปฏิบัติได้ในรูปแบบเมทริกซ์ สำหรับรายละเอียดผู้อ่านที่สนใจจะอ้างอิงตามคู่มือ
- มีตัวอย่างการสอนสองตัวอย่าง
14 กุมภาพันธ์ 2563.
ระบบเดี่ยวต่อเธรด v3.0:
- การปรับปรุงประสิทธิภาพครั้งใหญ่ เทคนิคการเขียนโปรแกรมเมตาเทมเพลตที่แนะนำช่วยให้เราสามารถสร้างโค้ดที่ได้รับการปรับปรุงให้เหมาะสมที่สุด การซึมโดยเฉลี่ยคือ 3 เท่า ในขณะที่สำหรับระบบมิติต่ำ อาจมีลำดับความสำคัญก็ได้
10 ตุลาคม 2019.
ระบบเดี่ยวต่อเธรด v2.1:
- ด้วยการเขียนโปรแกรมเมตาเทมเพลต โค้ดจะถูกสร้างเทมเพลตอย่างสมบูรณ์เพื่อสร้างโค้ดตัวแก้ปัญหาที่มีความเชี่ยวชาญสูงในช่วงเวลาคอมไพล์ (ตามฟังก์ชันของอัลกอริทึมและความจำเป็นในการจัดการเหตุการณ์และเอาต์พุตที่หนาแน่น) ดังนั้นระบบไฟล์จึงได้รับการปรับปรุงใหม่
- ส่วนขยายขนาดเล็ก: ความเป็นไปได้ที่จะใช้พารามิเตอร์ที่ใช้ร่วมกันของจำนวนเต็มและอุปกรณ์เสริมจำนวนเต็มเพื่อให้สามารถบรรลุเทคนิคการจัดทำดัชนีที่ซับซ้อนได้อย่างมีประสิทธิภาพสำหรับระบบที่ซับซ้อน
13 สิงหาคม 2019.
ระบบเดี่ยวต่อเธรด v2.0:
- ขณะนี้รองรับเอาต์พุตแบบหนาแน่นโดยมีข้อจำกัดบางประการ โปรดดูคู่มือ นี่เป็นข้อกำหนดเบื้องต้น เช่น สำหรับการแก้สมการเชิงอนุพันธ์ความล่าช้า
- รหัสและอินเทอร์เฟซนั้นเรียบง่ายและชัดเจนอย่างมาก ตัวอย่างเช่น พูลปัญหาถูกละเว้นจากโค้ดโดยสิ้นเชิง (ถูกเก็บไว้ด้วยเหตุผลทางประวัติศาสตร์) และตัวเลือกที่เป็นไปได้มากมายในขณะนี้ถูกผูกไว้กับออบเจ็กต์ Solver ที่สามารถตั้งค่าทั้งหมดด้วยฟังก์ชันสมาชิกเดียว
- คู่มือยังได้รับการปรับโครงสร้างใหม่และทำให้ง่ายขึ้นตามผลตอบรับ
9 เมษายน 2019.
ระบบเดี่ยวต่อเธรด v1.1:
- อุปกรณ์ (GPU) สามารถเชื่อมโยงกับแต่ละ Solver Object ได้ ดังนั้นการเลือกอุปกรณ์จะได้รับการจัดการโดยอัตโนมัติ
- สตรีม CUDA จะถูกสร้างขึ้นโดยอัตโนมัติสำหรับแต่ละ Solver Object
- ชุดฟังก์ชันสมาชิกใหม่เพื่อซ้อนทับการคำนวณ CPU-GPU และเพื่อกระจายภาระงานไปยัง GPU ที่แตกต่างกันในโหนดเดียวได้อย่างง่ายดาย ซึ่งรวมถึงการทำงานของหน่วยความจำแบบอะซิงโครนัสและเคอร์เนล และความเป็นไปได้ในการซิงโครไนซ์ระหว่างเธรด CPU และสตรีม GPU
- สามารถระบุจำนวนตัวแปรเธรดที่ใช้งานอยู่ในแต่ละเฟสการรวมเพื่อจัดการกับเอฟเฟกต์ส่วนท้ายได้อย่างสะดวกสบาย
- มีการเพิ่มตัวอย่างบทช่วยสอนใหม่สองตัวอย่าง: ก) การคำนวณ CPU และ GPU ที่ทับซ้อนกันโดยใช้ Solver Object หลายตัว b) การใช้ GPU หลายตัวที่มีอยู่ในเครื่อง/โหนดเดียว
14 กุมภาพันธ์ 2019.
ระบบเดี่ยวต่อเธรด v1.0:
- โมดูล MPGOS แรกนี้พร้อมแล้ว โค้ดได้รับการออกแบบมาเพื่อแก้ปัญหาระบบ ODE บน GPU ที่เป็นอิสระแต่เหมือนกันจำนวนมาก (ชุดพารามิเตอร์และเงื่อนไขเริ่มต้นอาจแตกต่างกัน)
- ใช้งานง่าย แม้แต่ผู้ที่ยังใหม่กับการเขียนโปรแกรม C++ แค่หลักสูตรระยะสั้นก็เพียงพอแล้วสำหรับการใช้แพ็คเกจโปรแกรม
- มีคู่มือโดยละเอียดพร้อมตัวอย่างการสอน ดังนั้นผู้ใช้จึงสามารถสร้างโปรเจ็กต์ของตัวเองได้อย่างง่ายดายโดยการบล็อกโค้ดคัดลอกและวาง
- การจัดการเหตุการณ์ที่มีประสิทธิภาพและแข็งแกร่ง
- การดำเนินการที่ผู้ใช้กำหนดหลังจากทุกขั้นตอนเพื่อความยืดหยุ่น
- "การโต้ตอบ" ที่ผู้ใช้กำหนดหลังจากทุกขั้นตอนเวลาที่ประสบความสำเร็จหรือการจัดการเหตุการณ์ (มีประโยชน์มาก เช่น สำหรับการเปลี่ยนแปลงผลกระทบ ดูตัวอย่างการสอนในคู่มือ)
- ความเป็นไปได้ที่จะใช้ลำดับชั้นหน่วยความจำของ GPU โดยไม่ต้องมีความรู้ที่ชัดเจนในรายละเอียด
- พารามิเตอร์ที่ผู้ใช้ตั้งโปรแกรมได้สำหรับการใช้งานที่ยืดหยุ่นและการจัดเก็บคุณสมบัติพิเศษของวิถี
- เฉพาะตัวแก้ปัญหาที่ชัดเจนเท่านั้น: ลำดับที่ 4 Runge-Kutta พร้อมขั้นตอนเวลาคงที่ และลำดับที่ 4 วิธี Runge-Kutta-Cash-Karp พร้อมการประมาณค่าข้อผิดพลาดแบบฝังลำดับที่ 5 (เนื่องจากโฟลว์การควบคุมที่ซับซ้อนของตัวแก้ปัญหาโดยนัย บางครั้งตัวแก้ปัญหาที่ชัดเจนจึงทำงานได้ดีกว่าตัวแก้ปัญหาโดยนัย แม้ว่าจะเป็นปัญหาที่แข็งก็ตาม)
- รองรับการดำเนินการทางคณิตศาสตร์ที่มีความแม่นยำสองเท่าเท่านั้น
- การจัดเก็บเฉพาะจุดสิ้นสุดของแต่ละเฟสการรวม (เพื่อปรับปรุงความเร็ว) อย่างไรก็ตาม นี่ไม่ค่อยเป็นปัญหา เนื่องจากพารามิเตอร์ที่ผู้ใช้ตั้งโปรแกรมได้และการโต้ตอบที่ผู้ใช้กำหนดข้างต้นช่วยให้สามารถจัดเก็บคุณสมบัติที่ซับซ้อนที่สุดของวิถีได้ โปรดดูเอกสารประกอบ