คำถามติดแท็ก parallel-computing

การศึกษาการแก้ปัญหาการคำนวณโดยใช้ประโยชน์จากการใช้โปรเซสเซอร์หลายตัวพร้อมกัน

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 …

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

4
คำแนะนำใด ๆ สำหรับกรอบการทดสอบหน่วยเข้ากันได้กับรหัส / ไลบรารีที่ใช้ MPI
โดยปกติฉันเขียนรหัสซีเรียลและเมื่อฉันฉันเขียนการทดสอบหน่วยด้วยกรอบการทดสอบแบบ xUnit (MATLAB xUnit, PyUnit / nose หรือกรอบการทดสอบ C ++ ของ Google) จากการค้นหาโดยคร่าวๆของ Google ฉันไม่เห็นว่าโค้ดทดสอบหน่วยผู้ปฏิบัติงานที่ใช้ MPI มากน้อยเพียงใด มีวิธีปฏิบัติที่ดีที่สุดสำหรับสิ่งนั้นหรือไม่? เปรียบเทียบกับกลยุทธ์สำหรับการทดสอบหน่วยและการพัฒนาที่ขับเคลื่อนด้วยการทดสอบฉันกำลังมองหาคำตอบที่เกี่ยวข้องกับซอฟต์แวร์ที่ฉันควรใช้สำหรับกรอบการทดสอบ (ถ้ามี) คำตอบอาจเป็น "ม้วนรหัสของคุณเอง" ซึ่ง ตัวอย่างกรณีของรหัสการทดสอบที่กำหนดเองจะเป็นประโยชน์) สิ่งที่ฉันกำลังมองหาเพื่อทดสอบส่วนใหญ่คือการประเมินฟังก์ชั่นทางด้านขวาและกิจวัตรประจำวันของ Jacobian matrix สำหรับเวลาที่จะรวม PDEs แบบกึ่งแยกส่วน ฉันจะใช้ PETSc ดังนั้นถ้ามีอะไรเฉพาะ PETSc ที่จะเป็นประโยชน์นอกเหนือไปจากกรอบการทดสอบทั่วไปมากขึ้น ชี้แจงการแก้ไข: ตัวอย่างจะอยู่ใน${PETSC_DIR}/src/ts/examples/tutorials/ex2.cที่ที่ฉันต้องการทดสอบบางสิ่งเช่นRHSFunction(การประเมินฟังก์ชั่นด้านขวา) และRHSJacobian(การประเมินเมทริกซ์จาโคเบียน) ฉันจะทดสอบกับค่าที่ทราบสำหรับด้านขวาที่ประกอบและเมทริกซ์ Jacobian ที่ประกอบขึ้น ฉันสามารถรับค่าเหล่านี้ในเชิงวิเคราะห์สำหรับอินสแตนซ์ปัญหาง่ายๆ ฟังก์ชั่นเหล่านี้เป็นฟังก์ชั่นเฉพาะแอปพลิเคชันที่จะไม่ใช้งานฟังก์ชั่นระดับแอปพลิเคชันอื่น ๆ แต่พวกเขาสามารถเรียก MPI ถ้าการประกอบเวกเตอร์หรือเมทริกซ์จะทำภายในฟังก์ชัน (เช่นในตัวอย่าง PETSc ที่เชื่อมโยงด้านบน) …

4
อัลกอริทึมแบบขนาน (GPU) สำหรับออโตเซลลูมิเนียมแบบอะซิงโครนัส
ฉันมีคอลเลกชันของแบบจำลองการคำนวณที่สามารถอธิบายได้ว่าเป็นออโตมาติกเซลลูลาร์แบบอะซิงโครนัส แบบจำลองเหล่านี้มีลักษณะคล้ายกับรุ่น Ising แต่มีความซับซ้อนกว่าเล็กน้อย ดูเหมือนว่ารุ่นดังกล่าวจะได้ประโยชน์จากการใช้งานบน GPU แทนที่จะเป็นซีพียู น่าเสียดายที่มันไม่ตรงไปตรงมาที่จะขนานโมเดลดังกล่าวและมันก็ไม่ชัดเจนเลยสำหรับฉันเกี่ยวกับมัน ฉันรู้ว่ามีวรรณกรรมเกี่ยวกับเรื่องนี้ แต่ดูเหมือนว่าทั้งหมดจะมุ่งเป้าไปที่นักวิทยาศาสตร์คอมพิวเตอร์ที่ไม่ยอมใครง่ายๆที่สนใจในรายละเอียดของความซับซ้อนของอัลกอริทึมมากกว่าคนอย่างฉันที่ต้องการคำอธิบายสิ่งที่ฉันสามารถนำไปใช้ได้ ดังนั้นฉันพบว่ามันค่อนข้างจะไม่น่าสนใจ เพื่อความชัดเจนฉันไม่ได้มองหาอัลกอริธึมที่เหมาะสมที่สุดเท่าที่ฉันสามารถนำไปใช้ใน CUDA ได้อย่างรวดเร็วซึ่งมีแนวโน้มว่าจะเพิ่มความเร็วในการใช้งาน CPU อย่างมีนัยสำคัญ เวลาโปรแกรมเมอร์เป็นปัจจัย จำกัด มากกว่าเวลาคอมพิวเตอร์ในโครงการนี้ ฉันควรอธิบายด้วยว่าออโตเมติกเซลลูลาร์แบบอะซิงโครนัสค่อนข้างแตกต่างจากซิงโครนัสและเทคนิคในการซิงโครนัส CA แบบขนาน (เช่นชีวิตของคอนเวย์) ไม่สามารถดัดแปลงกับปัญหานี้ได้อย่างง่ายดาย ข้อแตกต่างคือ CA แบบซิงโครนัสจะอัปเดตทุกเซลล์พร้อมกันในทุกขั้นตอนในขณะที่อะซิงโครนัสหนึ่งจะอัปเดตภูมิภาคที่เลือกแบบสุ่มในทุกขั้นตอนตามที่อธิบายไว้ด้านล่าง แบบจำลองที่ฉันต้องการให้ขนานนั้นถูกนำไปใช้กับโครงตาข่าย (โดยปกติจะเป็นรูปหกเหลี่ยม) ประกอบด้วยเซลล์ประมาณ 100000 เซลล์ (แม้ว่าฉันต้องการใช้มากกว่านี้) และอัลกอริทึมที่ไม่ขนานกันสำหรับการใช้งานมันมีลักษณะดังนี้: เลือกคู่ของเซลล์ที่อยู่ใกล้เคียงโดยการสุ่ม คำนวณฟังก์ชัน "พลังงาน"ตามพื้นที่ใกล้เคียงรอบ ๆ เซลล์เหล่านี้Δ EΔE\Delta E ด้วยความน่าจะเป็นที่ขึ้นอยู่กับ (ด้วยพารามิเตอร์ a) ไม่ว่าจะสลับสถานะของเซลล์ทั้งสองหรือไม่ทำอะไรเลย βอี- βΔ Ee−βΔEe^{-\beta \Delta E}ββ\beta …

3
วิธีการที่ดีที่สุดสำหรับการจัดการตาข่ายในการคำนวณองค์ประกอบ จำกัด แบบขนาน?
ขณะนี้ฉันกำลังพัฒนาวิธีการแยกส่วนโดเมนสำหรับการแก้ปัญหาการกระเจิง โดยทั่วไปฉันกำลังแก้ไขระบบของ Helmholtz BVP ซ้ำ ๆ ฉันยกเลิกสมการโดยใช้วิธีไฟไนต์เอลิเมนต์เหนือตาข่ายสามเหลี่ยมหรือเตตราฮีด ฉันกำลังพัฒนารหัสเพื่อวิทยานิพนธ์ของฉัน ฉันรู้ว่ามีไลต์อิลิเมนต์ไลบรารี่บางตัวที่มีอยู่เช่น deal.ii หรือ DUNE และถึงแม้ว่าฉันคิดว่ามันยอดเยี่ยมด้วยการออกแบบที่สร้างแรงบันดาลใจและ API เพื่อการเรียนรู้ฉันต้องการพัฒนาแอปพลิเคชันเล็ก ๆ ฉันอยู่ในจุดที่ฉันมีรุ่นอนุกรมของฉันทำงานและตอนนี้ฉันต้องการขนานพวกเขา ท้ายที่สุดแล้วมันเป็นหนึ่งในจุดแข็งของกรอบการสลายตัวของโดเมนเพื่อกำหนดอัลกอริทึมที่ง่ายต่อการขนานอย่างน้อยก็ในหลักการ อย่างไรก็ตามในทางปฏิบัติมีรายละเอียดมากมายที่เราต้องพิจารณา การจัดการตาข่ายเป็นหนึ่งในนั้น หากแอพพลิเคชั่นนั้นต้องการความละเอียดสูงในขณะที่ปรับขนาดให้กับซีพียูจำนวนมากการจำลองแบบของ mesh ทั้งหมดใน CPU ทุกตัวนั้นไม่มีประสิทธิภาพ ฉันต้องการถามนักพัฒนาเหล่านั้นที่ทำงานในแอปพลิเคชันที่คล้ายกันในสภาพแวดล้อมการคำนวณประสิทธิภาพสูงว่าพวกเขาจัดการกับปัญหานี้อย่างไร มีไลบรารี p4est สำหรับการจัดการเครือข่ายแบบกระจาย ฉันไม่ต้องการ AMR ​​ดังนั้นอาจเป็น overkill เพราะฉันสนใจที่จะใช้ตาข่ายแบบเดียวและฉันไม่แน่ใจว่ามันสามารถปรับแต่งตาข่ายแบบสามเหลี่ยมได้หรือไม่ ฉันสามารถสร้างตาข่ายแบบเดียวจากนั้นป้อนเข้าไปในหนึ่งในตัวแบ่งพาร์ติชันและทำการประมวลผลบางส่วนของผลลัพธ์ วิธีที่ง่ายที่สุดดูเหมือนว่าจะสร้างไฟล์แยกต่างหากสำหรับแต่ละพาร์ติชันที่มีข้อมูลตาข่ายที่เกี่ยวข้องกับพาร์ติชันนั้นเท่านั้น ไฟล์นี้จะถูกอ่านโดยซีพียูตัวเดียวซึ่งจะต้องรับผิดชอบในการประกอบระบบแยกในส่วนของตาข่ายนั้น แน่นอนว่าข้อมูลการเชื่อมต่อ / พื้นที่ใกล้เคียงพาร์ติชันทั่วโลกบางอย่างอาจจำเป็นต้องเก็บไว้ในไฟล์ที่ซีพียูทั้งหมดอ่านเพื่อการสื่อสารระหว่างกระบวนการ มีวิธีอื่นใดอีกบ้าง? หากคุณบางคนสามารถแบ่งปันวิธีการที่ใช้กันทั่วไปในอุตสาหกรรมหรือสถาบันวิจัยของรัฐบาลที่เกี่ยวข้องกับการจัดการปัญหานี้คืออะไร ฉันค่อนข้างใหม่ในการเขียนโปรแกรมตัวแก้องค์ประกอบ จำกัด แบบขนานและฉันต้องการที่จะรู้สึกว่าฉันกำลังคิดเกี่ยวกับปัญหานี้อย่างถูกต้องหรือไม่และคนอื่นกำลังเข้าใกล้มันอย่างไร คำแนะนำหรือคำแนะนำเกี่ยวกับบทความวิจัยที่เกี่ยวข้องจะได้รับการชื่นชมอย่างมาก! ขอบคุณล่วงหน้า!

3
ฉันกำลังมองหาไลบรารีกราฟแบบไดนามิกแบบขนานใน C ++
สวัสดีชุมชน Scicomp ฉันทำงานในส่วนของอัลกอริธึมกราฟโดยใช้เฟรมเวิร์กเช่นNetworkX (Python), JUNGและYFiles (Java) ตอนนี้ฉันกำลังเข้าสู่การคำนวณแบบขนานและประสิทธิภาพสูง สำหรับโครงการใหม่ฉันกำลังมองหาไลบรารีกราฟ C ++ ที่มีคุณสมบัติดังต่อไปนี้: มีอินเทอร์เฟซที่ใช้งานง่ายที่ช่วยให้การพัฒนาอัลกอริทึม รองรับการทำงานแบบไดนามิก: เช่นการแทรกและการลบโหนด / ขอบโดยพลการ รองรับการขนาน: เช่นป้องกันโปรแกรมเมอร์จากปัญหาที่เกิดขึ้นกับมัลติเธรด มีค่าใช้จ่ายหน่วยความจำต่ำและเหมาะสำหรับการคำนวณประสิทธิภาพสูง โปรดแนะนำห้องสมุดบางแห่งและหารือเกี่ยวกับเกณฑ์เหล่านี้รวมถึงข้อดีข้อเสีย

2
คำแนะนำเกี่ยวกับ Python สำหรับการเขียนโปรแกรมแบบขนานหน่วยความจำ
ฉันมีประสบการณ์ในการเขียนรหัส OpenMP สำหรับเครื่องหน่วยความจำที่ใช้ร่วมกัน (ทั้งใน C และ FORTRAN) เพื่อทำงานง่ายๆเช่นการเพิ่มเมทริกซ์การคูณและอื่น ๆ (เพื่อดูว่ามันแข่งขันกับ LAPACK อย่างไร) ฉันรู้จัก OpenMP มากพอที่จะทำงานง่ายๆโดยไม่จำเป็นต้องดูเอกสาร เมื่อเร็ว ๆ นี้ฉันเปลี่ยนเป็น Python สำหรับโครงการของฉันและฉันไม่มีประสบการณ์ใด ๆ กับ Python เกินพื้นฐานแน่นอน ฉันมีคำถาม 2 ข้อ: มีคำแนะนำที่ดี (PDF ออนไลน์) สำหรับการอธิบายการคำนวณหน่วยความจำแบบขนานที่ใช้ร่วมกันสำหรับ Python หรือไม่? วิธีที่ดีที่สุดในการบรรลุเป้าหมายคืออะไร? ฉันเคยเห็นมาบ้างctypesแล้วและฉันก็ไม่แน่ใจว่าเป็นวิธีที่ดีที่สุดหรือไม่ (โดยที่ดีที่สุดฉันหมายถึงหนึ่งซึ่งมีการแลกเปลี่ยนที่ดีระหว่างเวลาโปรแกรมเมอร์และเวลาระบบมันไม่ควรน่าเบื่อเกินไปที่จะเขียนโค้ดและไม่ควรทำการประมวลผลที่ช้า)

1
วิธีการหนึ่งที่สามารถทำให้ขนานหลายวิธีสำหรับการแก้ระบบสมการเชิงเส้น?
ตามที่ฉันเข้าใจวิธี multigrid แก้ปัญหาระบบเชิงเส้นโดยการแก้ไขปัญหาแบบเดียวกันของ coarser (โดยการกำจัดข้อผิดพลาดความถี่ต่ำ) จากนั้นฉายกลับไปที่กริดที่ดีเพื่อลดข้อผิดพลาดความถี่สูง สำหรับระบบที่มีขนาดใหญ่ฉันสามารถดูว่าวิธีการวนซ้ำสามารถนำมาใช้ในการขนานในแต่ละระดับ วิธีนี้มีขนาดที่ดีในแบบคู่ขนานหรือไม่? มีแหล่งที่มาของการเกิดขึ้นพร้อมกันในอัลกอริทึมที่หนึ่งสามารถใช้ประโยชน์ในแบบคู่ขนาน?

5
มันจะดีกว่าที่จะมีสมาธิในการศึกษาคณิตศาสตร์หรือการคำนวณ?
พร้อมกันกับการวิจัยของฉันเกี่ยวกับวิธี Subspace ของ Krylov ฉันมีตัวเลือกในการสำรวจคณิตศาสตร์เบื้องหลัง HPC ล่วงหน้าหรือทฤษฎีการคำนวณ (ฮาร์ดแวร์, OS, คอมไพเลอร์ ฯลฯ ) ขณะนี้ฉันรู้ว่าทั้งสองพอที่จะเพียงแค่ได้รับโดย ตัวอย่างเช่นฉันรู้วิธีหาสมการสำหรับ CG และพื้นฐานของวิธีการวนซ้ำ แต่ฉันไม่รู้เรื่องรายละเอียดและสิ่งที่ซับซ้อนกว่าเช่น Preconditioners และ Convergence ในทำนองเดียวกันฉันรู้พื้นฐานของวิธีไฟไนต์เอลิเมนต์ (รูปแบบที่อ่อนแอรูปแบบที่ไม่อ่อนแอสิ่งต่าง ๆ เช่นโคโดเมนและ Galerkin และอื่น ๆ ) แต่จะไม่ทราบความลึกของมัน ในส่วนของการคำนวณฉันรู้วิธีการเขียนโค้ดอย่างจริงจังในภาษาที่เป็นไปได้ทั้งหมดและสามารถใช้ OpenMP และ MPI ได้ดีพอสมควร ฉันไม่เข้าใจฮาร์ดแวร์และแคชทั้งหมดได้ดี คำถามของฉันคือสิ่งที่เราควรมุ่งเน้น: คณิตศาสตร์หรือการคำนวณ? พวกเขาแยกกันไม่ออกใน HPC หรือไม่ มันแนะนำให้หนึ่งเรียนรู้เกี่ยวกับหนึ่งและไม่อื่น ๆ แก้ไข: ฉันกำลังเรียนวิชาเอกวิศวกรรมเครื่องกล (ซึ่งฉันเสียใจ) และมีหลักสูตรด้านวิศวกรรมและการคำนวณมากมาย (ของเหลวการถ่ายเทความร้อนและอื่น ๆ ) ฉันจะเข้าร่วมบัณฑิตวิทยาลัยสำหรับ …

1
อะไรคือความแตกต่างระหว่าง Parareal, PITA และ PFASST
อัลกอริทึม Parareal, PITA และ PFASST นั้นเป็นเทคนิคข้ามโดเมนสำหรับการแก้ปัญหาแบบพึ่งพาเวลาในแบบคู่ขนาน หลักการชี้นำที่อยู่เบื้องหลังวิธีการเหล่านี้คืออะไร? อะไรคือความแตกต่างที่สำคัญระหว่างพวกเขา ฉันสามารถพูดได้หรือไม่ว่าอันนั้นอิงจากอีกอันหนึ่ง? อย่างไร? แล้วแอพพลิเคชั่นของพวกเขาคืออะไร? ฉันรู้ว่าจะไม่มีคำตอบสำหรับคำถาม "ซึ่งดีกว่า?" แต่ความเข้าใจที่ดีของพื้นที่การสมัครและเงื่อนไขการตรวจสอบของพวกเขาเป็นประโยชน์กับฉัน

1
cuda และวิธีการเชิงตัวเลขที่มีการลดทอนเวลาโดยนัย
ฉันกำลังมองหาที่จะพอร์ตรหัสบางอย่างที่แก้ไขชุดของสมการเชิงอนุพันธ์บางส่วน (PDE) โดยวิธีปริมาณ จำกัด ในรูปแบบ IMPLICIT (สำหรับการแยกส่วนเวลา) ด้วยเหตุนี้จึงมีระบบสมการสามมิติในทิศทาง x, y, z ซึ่งจัดการโดยโครงการ ADI / TDMA ฉันไม่สามารถหาอะไรเกี่ยวกับการแก้ปัญหาโดยนัยของ PDEs ด้วย CUDA สามารถใช้ ADI / TDMA ใน CUDA ได้หรือไม่? มีตัวอย่างเช่นสมการการกระจายความร้อนแบบ 2D ที่มีอยู่ที่ไหนสักแห่ง? ทั้งหมดที่ฉันสามารถหาได้คือโค้ดตัวอย่าง CUDA สำหรับสมการการกระจายความร้อนแบบ 2D ในความแตกต่างอัน จำกัด แต่ในรูปแบบ EXPLICIT (University of Cambridge) คำใบ้ / การอ้างอิงใด ๆ จะได้รับการชื่นชมอย่างมาก

5
ตัวเลือกที่ดีที่สุดของตัวแก้ปัญหาสำหรับระบบสมมาตรแบบเบาบางขนาดใหญ่ (แต่ไม่ใช่ค่าบวกแน่นอน)
ขณะนี้ฉันกำลังทำงานเพื่อแก้ไขระบบสมมาตรขนาดใหญ่มาก (แต่ไม่แน่นอนแน่นอน) ที่สร้างขึ้นโดยอัลกอริทึมบางอย่าง เมทริกซ์เหล่านี้มีบล็อกความแจ่มใสที่ดีซึ่งสามารถใช้สำหรับการแก้แบบขนาน แต่ฉันไม่สามารถตัดสินใจได้ว่าฉันควรใช้วิธีการโดยตรง (เช่น Multi-frontal) หรือวนซ้ำ (GMRES หรือ MINRES ที่กำหนดเงื่อนไขไว้ล่วงหน้า) การศึกษาทั้งหมดของฉันแสดงให้เห็นว่าตัวแก้ซ้ำ (แม้จะมีการบรรจบกันอย่างรวดเร็วของการวนซ้ำภายใน 7 ครั้ง) ล้มเหลวในการเอาชนะผู้ปฏิบัติงานโดยตรงใน MATLAB แต่ในทางทฤษฎีแล้ววิธีการโดยตรงควรจะมีราคาสูงกว่า สิ่งนี้เกิดขึ้นได้อย่างไร? มีเอกสารหรือกระดาษที่ทันสมัยสำหรับกรณีดังกล่าวหรือไม่? ฉันสามารถใช้ sparsity แบบบล็อกในระบบคู่ขนานโดยใช้วิธีโดยตรงเช่นเดียวกับตัวแก้ซ้ำแบบยืดหยุ่นอย่าง GMRES

2
ไลบรารีแบบขนานหน่วยความจำที่แบ่งใช้ตามภารกิจใน Scientific Computing
ในช่วงไม่กี่ปีที่ผ่านมาห้องสมุด / โครงการซอฟต์แวร์หลายแห่งปรากฏว่ามีรูปแบบหรือรูปแบบอื่น ๆ ของการใช้งานร่วมกันของหน่วยความจำที่ใช้ข้อมูลร่วมกันแบบขนาน แนวคิดหลักคือแทนที่จะเขียนโค้ดแบบเธรดอย่างชัดเจนโปรแกรมเมอร์ใช้อัลกอริธึมของพวกเขาเป็นงานที่ต้องพึ่งพาระหว่างกันซึ่งจะถูกกำหนดเวลาแบบไดนามิกโดยมิดเดิลแวร์จุดประสงค์ทั่วไปบนเครื่องหน่วยความจำที่ใช้ร่วมกัน ตัวอย่างของห้องสมุดดังกล่าวคือ: QUARK : เริ่มแรกออกแบบมาสำหรับไลบรารีพีชคณิตเชิงเส้นแบบขนานของMAGMAดูเหมือนว่าจะถูกใช้สำหรับวิธีการ Multipole แบบขนานแบบขนานเช่นกัน Cilkเดิมโครงการ MIT-based สนับสนุนในขณะนี้โดย Intel นำมาใช้เป็นภาษา / นามสกุลคอมไพเลอร์ที่ C ใช้ในCilkchessซอฟต์แวร์คอมพิวเตอร์หมากรุกและทดลองใน FFTW SMP superscalar : พัฒนาที่ Barcelona Supercomputing Center ซึ่งคล้ายกับ Cilk ในหลาย ๆ ด้านตาม#pragmaส่วนขยาย StarPU : "codelets" ซึ่งคล้ายกับห้องสมุดซึ่งสามารถรวบรวมและกำหนดเวลาสำหรับสถาปัตยกรรมที่แตกต่างกันหลายแห่งรวมถึง GPU งาน OpenMP: ตั้งแต่เวอร์ชัน 3.0, OpenMP แนะนำ "งาน" ที่สามารถกำหนดเวลาแบบอะซิงโครนัส (ดูส่วนที่ 2.7 ของข้อกำหนด) …

3
แรงขับสำหรับการเขียนโปรแกรม GPU
ฉันมากใหม่ในการเขียนโปรแกรม GPGPU ดังนั้นโปรดยกโทษให้ฉันถ้าคำถามไม่เหมาะสมโดยเฉพาะอย่างยิ่ง จากสิ่งที่ฉันเข้าใจการเขียนโปรแกรม GPU เป็นงานวิศวกรรมที่ซับซ้อนมากเมื่อเทียบกับการเขียนโปรแกรม CPU ปกติ สิ่งหนึ่งที่จะต้องระมัดระวังอย่างมากเกี่ยวกับปัญหาความแตกต่างการปูกระเบื้องการจัดสรรหน่วยความจำที่ตรึงไว้และการคำนวณอุปกรณ์สื่อสาร / อุปกรณ์โฮสต์ซ้อนทับกัน หลังจากทำวิจัยเล็กน้อยฉันพบห้องสมุดแรงผลักดันซึ่งดูเหมือนว่าพยายามเลียนแบบ C ++ STL มันค่อนข้างดี อย่างไรก็ตามจากประสบการณ์ที่ จำกัด มากของฉันและการได้เห็นการจัดการไมโครที่จำเป็นทั้งหมดเพื่อให้ได้ประสิทธิภาพที่ดีฉันค่อนข้างสงสัยเกี่ยวกับประสิทธิภาพ แรงขับสามารถจัดการกับส่วนการเขียนโปรแกรมที่ซับซ้อนทั้งหมดได้อย่างมีประสิทธิภาพภายในหรือไม่? ห้องสมุดที่รู้จักกันดีบางแห่งเช่น PETSc ดูเหมือนจะใช้แพ็คเกจนี้ซึ่งทำให้ฉันเชื่อว่ามันควรจะเป็นอย่างใด ฉันสงสัยว่าคนที่มีประสบการณ์เกี่ยวกับ CUDA และแรงผลักดันอาจพูดคำหนึ่งหรือสองเกี่ยวกับประสิทธิภาพของแพ็คเกจเมื่อเทียบกับการเขียนโปรแกรม CUDA ระดับต่ำ ฉันสามารถใช้แรงขับได้เมื่อใดและฉันควรเปลี่ยนกลับเป็น CUDA เมื่อใด

2
เส้นทแยงมุมของเมทริกซ์ปรับสภาพที่ป่วยหนัก
ฉันกำลังพยายามที่จะทำให้เมทริกซ์ที่มีความหนาแน่นและไม่มีเงื่อนไขอยู่ในแนวทแยง ในความแม่นยำของเครื่องผลลัพธ์จะไม่ถูกต้อง (คืนค่าลักษณะลบที่เป็นลบ eigenvector ไม่มีความสมมาตรที่คาดหวัง) ฉันเปลี่ยนไปใช้ฟังก์ชัน Eigensystem [] ของ Mathematica เพื่อใช้ประโยชน์จากความแม่นยำโดยพลการ แต่การคำนวณช้ามาก ฉันเปิดให้โซลูชั่นจำนวนมาก มีแพ็คเกจ / อัลกอริทึมที่เหมาะสมกับปัญหาที่ไม่ดีหรือไม่? ฉันไม่ใช่ผู้เชี่ยวชาญเรื่องการปรับสภาพล่วงหน้าดังนั้นฉันจึงไม่แน่ใจว่าจะสามารถช่วยได้มากแค่ไหน ไม่อย่างนั้นทั้งหมดที่ฉันสามารถนึกได้ก็คือตัวแก้ค่าแบบเฉพาะเจาะจงที่มีความแม่นยำแบบขนาน เพื่อให้พื้นหลังเกี่ยวกับปัญหาเมทริกซ์มีขนาดใหญ่ แต่ไม่ใหญ่มาก (4096x4096 ถึง 32768x32768 มากที่สุด) พวกเขาเป็นจริงสมมาตรและค่าลักษณะเฉพาะถูกล้อมรอบระหว่าง 0 และ 1 (พิเศษ) โดยที่ค่าลักษณะเฉพาะจำนวนมากอยู่ใกล้กับ 0 และไม่มีใครใกล้กับ 1 เมทริกซ์เป็นตัวดำเนินการสังวัตนา ฉันไม่ต้องการทำให้เมทริกซ์ของฉันเป็นเส้นทแยงมุม แต่ยิ่งฉันไปได้มากเท่าไหร่ ฉันสามารถเข้าถึงกลุ่มคอมพิวเตอร์ที่มีโปรเซสเซอร์จำนวนมากและความสามารถในการคำนวณแบบกระจาย ขอบคุณ

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