สถิติที่ถูกต้องสำหรับการรายงานผลการเร่งความเร็ว


12

สมมติว่าฉันมีโค้ดบางเวอร์ชันที่ช้าและเร็วและต้องการรายงานตัวเลขเร่งความเร็วเปรียบเทียบกับทั้งสอง ผมใช้รุ่นช้าครั้งและรวดเร็วรุ่นครั้งครั้งการผลิต( s 1 , ... , s n )และ( 1 , ... , ) วิธีที่ง่ายที่สุดในการสร้างความเร็วคือการเฉลี่ยค่าเฉลี่ย: ˉ snm(s1,,sn)(f1,,fm) อย่างไรก็ตามสิ่งนี้ไม่ได้คำนึงถึงค่าผิดปกติ

s¯f¯=mi<nsinj<mfj

คำถาม : สถิติที่ดีที่สุดที่จะใช้เมื่อรายงานตัวเลขการเร่งความเร็วคืออะไร


3
ค่าเบี่ยงเบนมาตรฐานมีค่าเท่าใดเมื่อเปรียบเทียบกับค่าเฉลี่ย คุณควรรายงานสิ่งที่คุณทำและอาจใส่แถบข้อผิดพลาดหากมีขนาดใหญ่ หากมีขนาดใหญ่มากคุณควรตรวจสอบแหล่งที่มา รหัสคอมพิวเตอร์ส่วนใหญ่ควรทำงานได้อย่างถูกต้องตามกำหนดเวลายกเว้นในกรณีที่มีส่วนประกอบแบบสุ่มในโปรแกรมหรือคุณกำลังแชร์ทรัพยากรคอมพิวเตอร์กับผู้อื่น (อาจเป็นเครือข่ายหรือดิสก์ไม่ใช่แค่โหนดคลัสเตอร์) หากการแข่งขันสำหรับทรัพยากรดิสก์เป็นปัญหาคุณอาจพิจารณาการรายงานผลการทำงานด้วย I / O ที่ปิดใช้งาน (ค่อนข้างบ่อย) - ให้แน่ใจว่าได้บันทึกไว้
Bill Barth

สำหรับ Edison (Cray supercomputer) ฉันมีความแตกต่าง 2% ระหว่างสองตัวอย่าง บนแล็ปท็อปของฉันฉันเห็นค่าเบี่ยงเบนมาตรฐาน 6-8% ซึ่งวัดจากตัวอย่าง 10 ตัว ทั้งสองนี้ใช้สำหรับการคำนวณเคอร์เนลเท่านั้นไม่มี I / O
Geoffrey Irving

เพื่อชี้แจงว่าทำไมฉันถึงพูดถึงคนผิดถ้าความแปรปรวนอยู่ในระดับต่ำพอสมควร: นี่เป็นปริมาณทางสถิติขั้นพื้นฐานที่เพียงพอที่ฉันต้องการทราบวิธีที่เหมาะในการรายงานแม้ว่าฉันจะไม่ใช่วิธีที่ดี แต่ในกรณีนี้
Geoffrey Irving

2
คำถามคือสิ่งที่คุณพยายามสื่อสารและสูตรจะสื่อสารที่ดีที่สุด ฉันไม่คิดว่าฉันเคยเห็นกระดาษที่รายงานความแปรปรวนแบบรันไทม์ในการเร่งความเร็วเว้นแต่สาเหตุเป็นศูนย์กลางของบทความ เนื่องจากเรามีความสัมพันธ์เชิงเส้นตรงระหว่างเวลาทำงานและจำนวนตัวประมวลผล / งาน / เธรดคุณอาจใช้อัตราส่วนของค่าเฉลี่ยได้ แต่จากนั้นแถบข้อผิดพลาดที่มีอัตราส่วนของ max-to-min และ min-to-max ถ้าคุณคิดว่าการแสดงช่วงนั้นสำคัญ นอกจากนี้คุณอาจดูการปรับขนาดความถี่และตัวเลือกการตรึงงานเพื่อลดความแปรปรวนของคุณ :)
Bill Barth

อาจมีกลอุบายมากมายในการกำจัด IO ระหว่างการปรับแต่งคอมไพเลอร์กับเทคนิค "คัดลอกเมื่อเขียน" อาจมีความสัมพันธ์ที่ไม่ชัดเจนลดลง ฉันมักจะทำตามต้นแบบของ d1 = loadData (); d2 = copy (d1); r1 = อัลโก (D2); r2 = algo (d1) และพิจารณาเฉพาะเวลาที่รันครั้งที่สองเท่านั้น
meawoppl

คำตอบ:


9

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


น่าเสียดายที่หลักการนี้ไม่ได้ช่วยรายงานการเร่งความเร็วระหว่างอัลกอริธึมสองตัว
Geoffrey Irving

3
@ GeoffreyIrving ทำไมไม่? อัลกอริทึมทั้งสองมีความคาดหวังประสิทธิภาพทางทฤษฎีเทียบกับขนาดของปัญหา (หรือจำนวนตัวประมวลผลหรือพารามิเตอร์อื่น ๆ ที่ไม่ใช่เชิงสถิติ) โดยไม่สนใจคำสั่งต่ำและพารามิเตอร์อิสระ การใช้เวลาที่เร็วที่สุด (และการสังเกตข้อเท็จจริงนี้) เป็นเพียงการช่วยให้คุณเพิกเฉยต่อข้อกำหนดเพิ่มเติมเหล่านี้ ซึ่งดูเหมือนว่าเป็นกลยุทธ์ที่ดี เว้นแต่คุณจะบอกเราแตกต่างกันดูเหมือนว่าคุณกำลังพยายามหาวิธีการสื่อสารความแตกต่างระหว่างกับอัลกอริธึมที่มีประสิทธิภาพมากที่สุดและข้อเสนอแนะของ Wolfgang นั้นเป็นไปตามแบบแผนและคาดหวัง
Bill Barth

1
โอ๊ะโอใช่คุณพูดถูก ฉันถอนคำสั่งของฉันอย่างมีความสุข
Geoffrey Irving

(+1) คำถามด้านข้าง: ฉันเห็นจุดของคุณเกี่ยวกับการกระจายเสียงที่ไม่สมมาตรและอื่น ๆ สมมติว่าแม้ว่าฉันจะทำให้การใช้งาน A และการใช้งาน B และฉันเป็นมาตรฐานพวกเขาและหลังจากการวิ่งในปริมาณที่สมเหตุสมผลควอนไทล์ที่ 25 และค่ามัธยฐานและค่าเฉลี่ยอยู่ที่ 4.5x เร็วกว่าใน A กว่า B ในขณะที่ควอไทล์ 0% นั้นเป็น 3x เมื่อเปรียบเทียบการนำไปใช้งาน A กับ B แม้ว่าข้อเท็จจริงที่ว่า: yes A is theoretically only ~3x faster, ~ ความเร็วในการเป็นตัวแทนของการเพิ่มความเร็วขึ้น ~ 3x อาจไม่ได้คาดหวังเมื่อใช้งาน A แทน B ใช่หรือไม่ (นี่คือตัวอย่างในชีวิตจริงตามทาง)
usεr11852

1
@ usεr11852: ทุกอย่างขึ้นอยู่กับระบบที่คุณใช้ หากค่ามัธยฐานหรือควอไทล์ที่ 25 ของคุณอยู่ห่างไกลกันเพื่อบิดเบือนสถิติในแบบที่คุณตั้งสมมติฐานไว้ที่นี่แสดงว่าคุณมีแนวโน้มที่จะใช้ระบบที่มีเสียงดังมาก ตัวอย่างเช่นมันอาจถูกใช้โดยผู้อื่นในเวลาเดียวกันเป็นต้นซึ่งอาจไม่ได้เป็นตัวแทนของระบบที่คนอื่นมีสำหรับการทดสอบซ้ำ ๆ ดังนั้นฉันยังแนะนำให้รายงานการวิ่งที่ดีที่สุด คุณควรรายงานในสิ่งที่คุณใช้สถิติ
Wolfgang Bangerth

1

ฉันแนะนำให้คุณใช้ค่ามัธยฐานเพื่อให้การประมาณทางสถิติ ซึ่งแตกต่างจากค่าเฉลี่ยค่ามัธยฐานจะไม่เสียหายโดยค่าผิดปกติ


1
สำหรับข้อมูลที่เสียงรบกวนทั้งหมดเป็นค่าบวก (เช่นมีการกระจายเสียงที่ไม่สมมาตร) ค่ามัธยฐานจะไม่ดีเท่ากับสถิติอื่น ๆ สำหรับเวลาทำงานนี่เป็นกรณีนี้ดูคำตอบของฉันด้านบน
Wolfgang Bangerth

0

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

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