แทนที่การรวม QuasiMonteCarlo ของ Mathematica ใน C ++


12

ฉันมีโปรแกรม Mathematica ซึ่งทำหน้าที่อินทิกรัลบางตัวใน 3 หรือ 4 มิติโดยใช้QuasiMonteCarloวิธีการ ปัญหาคือใช้เวลานานในการรันจนถึงจุดที่การคำนวณบางอย่างไม่สามารถดำเนินการได้ในเวลางานสูงสุดที่มีอยู่ในคลัสเตอร์ HPC ของเรา ดังนั้นฉันกำลังพิจารณาที่จะเขียนโปรแกรมใหม่ใน C ++ ซึ่งฉันสงสัยว่าจะเร่งความเร็วขึ้นด้วยปัจจัยใหญ่

ฉันดูเอกสาร GSL และในขณะที่มีส่วนในลำดับ quasirandomและการรวม MC ปกติฉันไม่เห็นอะไรเลยที่นำมารวมกัน นอกจากนี้การค้นหาของ Google หรือสองรายการก็ไม่ทำให้เกิดสิ่งใด ๆ ที่ดูเหมือนจะเป็นการติดตั้งที่เชื่อถือได้ ตัวเลือกของฉันสำหรับการติดตั้ง QMC ใน C ++ มีการทดสอบอย่างดีมีอะไรบ้าง

เพื่อประโยชน์ของความมั่นคงฉันต้องการใช้บางสิ่งบางอย่างใกล้เคียงกับวิธี Halton-Hammersley-Wozniakowski ที่ Mathematica ดำเนินการหากเป็นตัวเลือก


2
คุณสามารถโพสต์อินทิกรัลบน Stackoverflow และเราสามารถดูว่าเกิดอะไรขึ้น หมายเหตุ Mathematica ใช้ MKL สำหรับความแม่นยำของเครื่องจักรซึ่งค่อนข้างมีประสิทธิภาพ

2
ไม่ใช่คำตอบสำหรับคำถามของคุณ แต่ฉันสงสัยว่าคุณลองCompileอินทิกรัล (ไปยังรหัส C) ก่อนที่จะส่งไปให้NIntegrateหรือไม่นั่นคือมันNIntegrateช้าหรือคำนวณฟังก์ชันหรือไม่ การใช้ฟังก์ชั่นที่คอมไพล์ด้วย C อาจต้องการการทำงานเพิ่มเล็กน้อยในคลัสเตอร์
Szabolcs

1
การรวบรวมเสียงเหมือนความคิดที่ดีมากฉันไม่ได้คิดอย่างนั้น ฉันจะลองดู การคำนวณแต่ละอย่างเหล่านี้ประเมินฟังก์ชั่นประมาณ 5 ล้านครั้งโดยประมาณของฉันและเนื่องจากการคำนวณทั้งหมดใช้เวลาประมาณ 3 ชั่วโมงนั่นคือ 2ms ต่อการประเมินฟังก์ชั่นซึ่งดูเหมือนค่อนข้างช้าสำหรับการคำนวณเชิงตัวเลขบางอย่าง
David Z

@ ruebenko: ฉันจะจำไว้
David Z

2
CUBA Library มีจำนวนอัลกอริทึมสำหรับปัญหามิติต่ำ มันยังมีอินเตอร์เฟส Mathematica feynarts.de/cuba
dls

คำตอบ:


1

เมื่อพิจารณาถึงความขาดแคลนของผู้รวบรวมมอนติคาร์โลเสมือนสำหรับ C ++ (หรือ C) ฉันได้เขียนการใช้งานของฉันเองเพื่อใช้กับ GSL มันไม่ได้ผ่านการทดสอบเป็นอย่างดีและไม่ใช้อัลกอริทึมของ Mathematica แต่ก็ไม่ควรจะดีไปกว่านี้

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