วิทยาศาสตร์การคำนวณ

ถามตอบสำหรับนักวิทยาศาสตร์ที่ใช้คอมพิวเตอร์เพื่อแก้ปัญหาทางวิทยาศาสตร์

7
การวิเคราะห์อัลกอริทึมโดยการนับฟลอพล้าสมัยหรือไม่
ในหลักสูตรการวิเคราะห์เชิงตัวเลขของฉันฉันเรียนรู้ที่จะวิเคราะห์ประสิทธิภาพของอัลกอริทึมโดยการนับจำนวนของการดำเนินการจุดลอยตัว (flops) ที่พวกเขาต้องการเทียบกับขนาดของปัญหา ตัวอย่างเช่นในข้อความของ Trefethen & Bau ใน Numerical Linear Algebra มีแม้กระทั่งรูปภาพที่ดูแบบ 3 มิติของจำนวนฟล็อป ตอนนี้มันเป็นแฟชั่นที่จะกล่าวว่า "flops ฟรี" เพราะเวลาแฝงของหน่วยความจำในการดึงข้อมูลใด ๆ ที่ไม่ได้อยู่ในแคชนั้นยิ่งใหญ่กว่าค่าใช้จ่ายของ flop แต่เรายังสอนนักเรียนให้นับจำนวนอย่างน้อยในหลักสูตรการวิเคราะห์เชิงตัวเลข เราควรสอนพวกเขาให้นับการเข้าถึงหน่วยความจำแทนหรือไม่ เราจำเป็นต้องเขียนตำราใหม่หรือไม่ หรือการเข้าถึงหน่วยความจำเฉพาะเกินไปที่จะใช้เวลากับเครื่อง? แนวโน้มระยะยาวจะเป็นอย่างไรในแง่ของการไม่ว่าจะเป็น flops หรือการเข้าถึงหน่วยความจำเป็นคอขวด? หมายเหตุ: คำตอบบางข้อด้านล่างดูเหมือนจะตอบคำถามต่าง ๆ เช่น "ฉันควรเขียนการใช้งานของฉันใหม่อีกครั้งเพื่อบันทึก flops สองสามครั้งหรือปรับปรุงประสิทธิภาพแคชหรือไม่" แต่สิ่งที่ฉันถามนั้นเป็นไปตามแนวของ " มีประโยชน์มากกว่าหรือไม่ที่จะประเมินความซับซ้อนของอัลกอริทึมในแง่ของการดำเนินการทางคณิตศาสตร์หรือการเข้าถึงหน่วยความจำ ?"

9
การเขียนโปรแกรมเชิงหน้าที่และการคำนวณทางวิทยาศาสตร์
ฉันขอโทษถ้านี่เป็นคำถามที่คลุมเครือ แต่นี่จะไป: ในช่วงไม่กี่ปีที่ผ่านมาการเขียนโปรแกรมเชิงฟังก์ชันได้รับความสนใจอย่างมากในชุมชนวิศวกรรมซอฟต์แวร์ หลายคนเริ่มใช้ภาษาเช่น Scala และ Haskell และอ้างว่าประสบความสำเร็จมากกว่าภาษาโปรแกรมและกระบวนทัศน์อื่น ๆ คำถามของฉันคือ: ในฐานะผู้เชี่ยวชาญการคำนวณประสิทธิภาพสูง / วิทยาศาสตร์การคำนวณเราควรสนใจการเขียนโปรแกรมเชิงฟังก์ชันหรือไม่? เราควรมีส่วนร่วมในการปฏิวัติมินินี้หรือไม่? ข้อดีและข้อเสียของการตั้งโปรแกรมการทำงานในโดเมน SciComp คืออะไร

4
อะไรทำให้ Fortran เร็ว
Fortran มีสถานที่พิเศษในการเขียนโปรแกรมเชิงตัวเลข คุณสามารถสร้างซอฟต์แวร์ที่ดีและรวดเร็วในภาษาอื่น ๆ ได้ แต่ Fortran ยังคงทำงานได้ดีแม้อายุจะมาก ยิ่งไปกว่านั้นการสร้างโปรแกรมที่รวดเร็วใน Fortran ง่ายขึ้น ฉันได้ทำโปรแกรมเร็วใน C ++ แต่คุณต้องระวังให้มากขึ้นเกี่ยวกับสิ่งต่าง ๆ เช่น aliasing ของตัวชี้ ดังนั้นจะต้องมีเหตุผลสำหรับสิ่งนี้และหนึ่งในเทคนิคมาก เป็นเพราะคอมไพเลอร์สามารถเพิ่มประสิทธิภาพมากขึ้น? ฉันอยากรู้รายละเอียดทางเทคนิคจริง ๆ ดังนั้นถ้าฉันใช้ภาษาอื่นฉันสามารถนำสิ่งเหล่านี้มาพิจารณา ตัวอย่างเช่นฉันรู้ - หรือดังนั้นฉันคิดว่า - สิ่งหนึ่งคือมาตรฐานระบุว่าพอยน์เตอร์ติดกันในหน่วยความจำเสมอซึ่งหมายถึงการเข้าถึงหน่วยความจำที่เร็วขึ้น ฉันเชื่อว่าคุณสามารถทำได้ใน C ++ โดยให้ธงกับคอมไพเลอร์ ด้วยวิธีนี้จะช่วยให้ทราบว่า Fortran ทำอะไรได้ดีดังนั้นหากใช้ภาษาอื่นเราสามารถเลียนแบบได้

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

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

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

14
ซอฟต์แวร์และเวิร์กโฟลว์ใดที่แนะนำสำหรับการเผยแพร่ข้อมูลทางวิทยาศาสตร์และกราฟ
ซอฟต์แวร์ใดที่ให้ขั้นตอนการทำงานที่ดีตั้งแต่การวางแผนดาต้าพอยน์ง่ายๆไปจนถึงการสร้างกราฟิกระดับสิ่งพิมพ์ที่มีสไตล์โดยละเอียดการเรียงพิมพ์ทางคณิตศาสตร์และ "คุณภาพระดับมืออาชีพ" สิ่งนี้เกี่ยวข้องกับคำถามของเดวิด ( คุณลักษณะใดบ้างที่ทำให้มีคุณภาพระดับมืออาชีพ? ) แต่การโฟกัสไม่ได้อยู่ที่คุณลักษณะ แต่ใช้กับซอฟต์แวร์หรือทั่วไปเวิร์กโฟลว์เพื่อไปที่นั่น ฉันมีประสบการณ์ผิวเผินด้วยหลายโปรแกรม Gnuplot, Origin, Matplotlib, TikZ / PGFplot, Qtiplot แต่การทำการวิเคราะห์ข้อมูลและตัวเลขที่ดีในเวลาเดียวกันนั้นค่อนข้างยากที่จะทำ มีซอฟต์แวร์บางอย่างที่อนุญาตสิ่งนี้หรือฉันควรขุดลึกลงไปในแพ็คเกจใดแพ็คเกจหนึ่งหรือไม่? แก้ไข: เวิร์กโฟลว์ปัจจุบันของฉันคือการผสมผสานขององค์ประกอบที่แตกต่างกันซึ่งทำงานร่วมกันมากหรือน้อย แต่โดยรวมแล้วมันไม่ได้มีประสิทธิภาพจริงๆและฉันคิดว่านี่เป็นเรื่องปกติสำหรับนักวิทยาศาสตร์จำนวนหนึ่งที่ห้องปฏิบัติการของมหาวิทยาลัย โดยทั่วไปแล้วจะเป็นห่วงโซ่ที่เริ่มต้นจากการทดสอบไปยังสิ่งพิมพ์เช่นนี้: รับข้อมูลทดลอง (โดยปกติจะอยู่ในรูปแบบ ASCII แต่มีเค้าโครงที่แตกต่างกันเช่นส่วนหัวความคิดเห็นจำนวนคอลัมน์) พล็อตข้อมูลอย่างรวดเร็วเพื่อตรวจสอบว่าไม่มีอะไรผิดพลาดในโปรแกรม Origin, Gnuplot หรือ arcane plot 20 ปีที่ผ่านมา การวิเคราะห์รายละเอียดเพิ่มเติมของข้อมูล: การลบการสนับสนุนพื้นหลังการวิเคราะห์การพึ่งพาและสหสัมพันธ์การปรับให้เหมาะสมกับแบบจำลองทางทฤษฎี นักวิทยาศาสตร์หลายคนใช้ Origin สำหรับงานนี้มีการใช้ Matlab และ Python / Scipy / Numpy เพิ่มมากขึ้น การสร้างตัวเลขระดับมืออาชีพสิ่งนี้เกี่ยวข้องกับการปรับตามแนวทางของวารสารการเรียงพิมพ์ทางคณิตศาสตร์และการแก้ไขทั่วไป ในขณะนี้ฉันใช้ Origin …

3
สถานะของศิลปะในวิธีการ ODE แบบขนานคืออะไร
ฉันกำลังค้นหาวิธีการแบบขนานสำหรับการรวม ODE มีวรรณกรรมทั้งเก่าและใหม่มากมายที่อธิบายถึงแนวทางที่หลากหลาย แต่ฉันไม่พบบทความสำรวจหรือภาพรวมล่าสุดที่อธิบายหัวข้อโดยทั่วไป มีหนังสือของ Burrage [1] แต่เกือบ 20 ปีแล้วดังนั้นจึงไม่ครอบคลุมความคิดที่ทันสมัยกว่าเช่นอัลกอริทึมการเปรียบเทียบ [1] K. Burrage, วิธีขนานและลำดับสำหรับสมการเชิงอนุพันธ์สามัญ, Clarendon Press, Oxford, 1995

2
ทำไมการหารจึงซับซ้อนกว่าการคำนวณทางคณิตศาสตร์อื่น ๆ
ฉันเพิ่งพบกรณีที่ฉันต้องการการดำเนินการหารจำนวนเต็มบนชิปที่ขาดหนึ่ง (ARM Cortex-A8) ในขณะที่พยายามค้นคว้าสาเหตุที่ต้องทำฉันพบว่าในแผนกทั่วไปใช้เวลานานกว่าการบวกลบหรือคูณในสถาปัตยกรรมจำนวนเต็มใด ๆ (หรือจุดคงที่) ค่อนข้างมาก เหตุใดจึงเป็นเช่นนี้ มันไม่สามารถใช้แทนด้วยตรรกะ AND-OR สองชั้นเหมือนทุกสิ่งทุกอย่าง

4
ตัวดำเนินการแบ็กสแลช MATLAB จะแก้ปัญหา
ฉันกำลังเปรียบเทียบรหัสของฉันบางส่วนกับรหัส "หุ้น" MATLAB ฉันประหลาดใจที่ผลลัพธ์ ฉันรันโค้ดตัวอย่าง (Sparse Matrix) n = 5000; a = diag(rand(n,1)); b = rand(n,1); disp('For a\b'); tic;a\b;toc; disp('For LU'); tic;LULU;toc; disp('For Conj Grad'); tic;conjgrad(a,b,1e-8);toc; disp('Inv(A)*B'); tic;inv(a)*b;toc; ผล : For a\b Elapsed time is 0.052838 seconds. For LU Elapsed time is 7.441331 seconds. For Conj Grad Elapsed time is …

5
เป็นไปได้หรือไม่ที่จะมีอาชีพใน SciComp โดยไม่ต้องมีส่วนร่วมในการวิจัยอาวุธ
ฉันอยู่ในการประชุมระดับนานาชาติ (ICIAM2019) เกี่ยวกับวิธีการเชิงตัวเลขและฉันรู้สึกประหลาดใจกับความชุกของการใช้งานที่เกี่ยวข้องโดยตรงกับการวิจัยอาวุธ ตัวอย่าง: ผู้ชนะรางวัลหนึ่งได้พูดคุยเกี่ยวกับปัญหาทางคณิตศาสตร์ของการสร้างเรดาร์ใหม่ / ตรวจจับวัตถุที่เคลื่อนไหวภายในการพูดคุยของเขาเขาอธิบายสถานการณ์ของ "แพลตฟอร์ม" เรดาร์ในความสูง 8 กม. โดยใช้เรดาร์ตรวจจับ "วัตถุเคลื่อนที่" ในระดับพื้นดิน เกี่ยวกับความซับซ้อนของปัญหานี้อย่างไร ผู้คนกำลังนำเสนอวิธีการในการแก้ไขและจำลองคลื่นกระแทกอย่างถูกต้องและการค้นหา google อย่างรวดเร็วแสดงให้เห็นว่าพวกเขากำลังทำงานกับ ฉันนั่งถัดจากผู้คนที่ทำตัวเลขในลอสอาลามอส ฉันกำลังทำปริญญาเอกของฉันในวิชาคณิตศาสตร์ประยุกต์และวิธีการเชิงตัวเลขและด้วยความซื่อสัตย์ฉันไม่ได้คาดหวังว่าผู้คนจะได้รับรางวัลและอยู่ในขั้นตอนขนาดใหญ่กำลังทำการวิจัยอาวุธ ฉันยังสังเกตเห็นว่าผู้ชมซึ่งน่าจะฉลาดกว่าฉันกำลังชื่นชมงานนี้ ฉันสงสัยว่าฉันจะต้องการเป็นส่วนหนึ่งของชุมชนนี้หรือไม่และถ้าเป็นไปได้ที่จะสร้างอาชีพในคณิตศาสตร์ประยุกต์โดยไม่ต้องมีส่วนร่วมในการวิจัยอาวุธโดยตรงหรือโดยอ้อม นี่เป็นสิ่งที่ยักยอกหรือเปล่า ฉันอยู่ในช่วงเริ่มต้นและจะขอบคุณมากสำหรับคำแนะนำจากคนที่มีประสบการณ์มากขึ้น

7
ฉันควรลงทุนในกระบวนทัศน์การเขียนโปรแกรมใดหากฉันต้องการให้โค้ดของฉันทำงานบนเครื่อง petascale ในอนาคต
มันสวยชัดเจนจากการสำรวจความคิดเห็นของ top500 ที่อุตสาหกรรมมีแนวโน้มต่อเพิ่มขึ้นชี้แจงในแกนประมวลผล ซูเปอร์คอมพิวเตอร์ที่ใหญ่ที่สุดทั้งหมดใช้ MPI สำหรับการสื่อสารระหว่างโหนดแม้ว่าจะไม่มีแนวโน้มที่ชัดเจนสำหรับการขนานบนโหนดด้วยวิธีที่ง่ายที่สุด (แต่ไม่จำเป็นต้องมีประสิทธิภาพมากที่สุด) ในการทำแผนที่กระบวนการ MPI เดียวกับแต่ละแกนโดยอัตโนมัติ การขนานจากคอมไพเลอร์, OpenMP, pthreads, CUDA, Cilk และ OpenCL ฉันเป็นหนึ่งในกลุ่มนักวิทยาศาสตร์ที่ดูแลและพัฒนารหัสที่มีศักยภาพที่จะใช้กับซุปเปอร์คอมพิวเตอร์ที่ใหญ่ที่สุดในโลก สมมติว่านักพัฒนามีเวลา จำกัด ฉันจะพิสูจน์ตัวเองในอนาคตเพื่อให้ฉันสามารถใช้ประโยชน์จากประสิทธิภาพของเครื่องจักรที่ทรงพลังที่สุดในโลกได้อย่างไร ฉันควรทำสมมติฐานเกี่ยวกับสถาปัตยกรรมที่เชื่อมต่อระหว่างกระบวนการอย่างไร กระบวนทัศน์อะไรที่จะต้องทนทุกข์ทรมานเมื่อเราเข้าสู่ยุคที่มีหลายคน พาร์ทิชันภาษาสากลที่อยู่ในพื้นที่ว่างจะพร้อมใช้งาน "ในการผลิต" บนเครื่อง petascale หรือไม่?

7
เป็นความคิดที่ดีหรือไม่ที่จะใช้ vector <vector <double>> เพื่อสร้างคลาสเมทริกซ์สำหรับรหัสการคำนวณทางวิทยาศาสตร์ที่มีประสิทธิภาพสูง?
มันเป็นความคิดที่ดีที่จะใช้vector&lt;vector&lt;double&gt;&gt;(ใช้ std) เพื่อสร้างคลาสเมทริกซ์สำหรับรหัสการคำนวณทางวิทยาศาสตร์ที่มีประสิทธิภาพสูงหรือไม่? ถ้าคำตอบคือไม่ ทำไม? ขอบคุณ
36 hpc  c++ 

6
แพคเกจซอฟต์แวร์สัญลักษณ์สำหรับการแสดงออกของเมทริกซ์?
เรารู้ว่านั้นสมมาตรและเป็นบวกแน่นอน เรารู้ว่าเป็นมุมฉาก:BAA\mathbf ABB\mathbf B คำถาม:สมมาตรและเป็นบวกแน่นอน? คำตอบ: ใช่B⋅A⋅B⊤B⋅A⋅B⊤\mathbf B \cdot\mathbf A \cdot\mathbf B^\top คำถาม: คอมพิวเตอร์บอกเราได้ไหม คำตอบ: อาจเป็นไปได้ มีระบบพีชคณิตเชิงสัญลักษณ์ (เช่น Mathematica) ที่จัดการและเผยแพร่ข้อเท็จจริงเกี่ยวกับเมทริกซ์หรือไม่? แก้ไข: เพื่อความชัดเจนฉันถามคำถามนี้เกี่ยวกับเมทริกซ์ที่นิยามไว้อย่างเป็นนามธรรม คือฉันไม่มีรายการที่ชัดเจนสำหรับและฉันเพิ่งรู้ว่าพวกเขาทั้งเมทริกซ์และมี attribues เฉพาะเช่น symetric บวกแน่นอน ฯลฯ ...BAAABBB

7
Parallelizing for-loop ใน Python
มีเครื่องมือใดใน Python ที่เหมือนกับ parlab ของ Matlab หรือไม่? ฉันพบกระทู้นี้แต่อายุสี่ขวบ ฉันคิดว่าบางทีคนที่นี่อาจมีประสบการณ์มากกว่านี้ นี่คือตัวอย่างของประเภทของสิ่งที่ฉันต้องการขนาน: X = np.random.normal(size=(10, 3)) F = np.zeros((10, )) for i in range(10): F[i] = my_function(X[i,:]) ที่my_functionจะใช้เวลาndarrayที่มีขนาด(1,3)และผลตอบแทนเกลา อย่างน้อยที่สุดฉันต้องการใช้หลายคอร์พร้อมกัน --- เหมือน parfor กล่าวอีกนัยหนึ่งคือสมมติว่าระบบหน่วยความจำที่ใช้ร่วมกันมี 8 ถึง 16 คอร์

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