Q1: คุณใช้เครื่องมือใดในการทำโปรไฟล์รหัส (การทำโปรไฟล์ไม่ใช่การทำเกณฑ์เปรียบเทียบ)?
Q2: คุณให้โค้ดทำงานนานแค่ไหน (สถิติ: ขั้นตอนกี่ครั้ง)
คำถามที่ 3: กรณีมีขนาดใหญ่แค่ไหน (ถ้ากรณีเหมาะสมกับแคชตัวแก้คำสั่งจะมีขนาดเร็วขึ้น แต่แล้วฉันจะพลาดกระบวนการที่เกี่ยวข้องกับหน่วยความจำ)
นี่คือตัวอย่างของวิธีที่ฉันทำ
ฉันแยกการเปรียบเทียบ (ดูว่าใช้เวลานานเท่าใด) จากการทำโปรไฟล์ (ระบุวิธีทำให้เร็วขึ้น) ไม่สำคัญว่า profiler นั้นจะเร็ว มันเป็นสิ่งสำคัญที่จะบอกคุณว่าจะแก้ไข
ฉันไม่ชอบคำว่า "การทำโปรไฟล์" เพราะมันทำให้เกิดภาพบางอย่างเช่นฮิสโตแกรมที่มีราคาบาร์สำหรับแต่ละงานประจำหรือ "คอขวด" เพราะมันหมายถึงว่ามีเพียงเล็กน้อยในรหัสที่จะต้องมี แก้ไขแล้ว. ทั้งสองสิ่งนี้บ่งบอกเวลาและสถิติบางอย่างซึ่งคุณถือว่าความแม่นยำเป็นสิ่งสำคัญ มันไม่คุ้มค่าที่จะให้ข้อมูลเชิงลึกเกี่ยวกับความแม่นยำของเวลา
การใช้วิธีการที่ฉันคือการหยุดชั่วคราวสุ่มและมีเต็มรูปแบบกรณีศึกษาและการแสดงภาพนิ่งที่นี่ ส่วนหนึ่งของมุมมองโลกของผู้สร้างโปรไฟล์คือถ้าคุณไม่พบสิ่งใดก็ไม่พบอะไรเลยและถ้าคุณค้นหาบางอย่างและได้รับความเร็วร้อยละหนึ่งคุณจะประกาศชัยชนะและเลิก แฟน ๆ ของผู้สร้างโปรไฟล์แทบจะไม่เคยพูดว่าพวกเขาได้รับความเร็วเท่าไหร่และโฆษณาจะแสดงเฉพาะปัญหาที่ประดิษฐ์ขึ้นซึ่งออกแบบมาให้หาง่าย การหยุดแบบสุ่มค้นหาปัญหาไม่ว่าจะง่ายหรือยาก จากนั้นการแก้ไขปัญหาหนึ่งจะทำให้เกิดปัญหาอื่น ๆ ดังนั้นกระบวนการสามารถทำซ้ำได้เพื่อให้ได้ความเร็วที่เพิ่มขึ้น
จากประสบการณ์ของฉันจากตัวอย่างมากมายนี่คือวิธี: ฉันสามารถค้นหาปัญหาหนึ่ง (โดยการหยุดชั่วคราวแบบสุ่ม) และแก้ไขได้รับความเร็วร้อยละ 30 พูดหรือ 1.3x จากนั้นฉันก็สามารถทำได้อีกครั้งพบปัญหาอื่นและแก้ไขได้รับความเร็วเพิ่มอีกอาจน้อยกว่า 30% อาจจะมากกว่า จากนั้นฉันสามารถทำมันได้อีกหลายครั้งจนกระทั่งฉันไม่พบสิ่งใดที่จะแก้ไขได้อีก ปัจจัยเร่งความเร็วที่ดีที่สุดคือผลิตภัณฑ์ที่ทำงานของแต่ละปัจจัยและอาจมีขนาดใหญ่อย่างน่าประหลาดใจ - ลำดับความสำคัญในบางกรณี
แทรก: เพียงเพื่อแสดงให้เห็นถึงจุดสุดท้ายนี้ มีตัวอย่างโดยละเอียดที่นี่พร้อมการนำเสนอภาพนิ่งและไฟล์ทั้งหมดซึ่งแสดงให้เห็นว่าการเร่งความเร็ว 730x ทำได้สำเร็จในการลบปัญหา รุ่นแรกใช้เวลา 2700 ไมโครวินาทีต่อหน่วยงาน ปัญหา A ถูกนำออกซึ่งทำให้เวลาลดลงเหลือ 1,800 และขยายเปอร์เซ็นต์ของปัญหาที่เหลืออยู่ 1.5 เท่า (2700/1800) จากนั้น B ก็ถูกลบออก กระบวนการนี้ดำเนินไปเรื่อย ๆ ผ่านการทำซ้ำหกครั้งส่งผลให้มีการเร่งความเร็วของคำสั่งเกือบ 3 ครั้ง แต่เทคนิคการทำโปรไฟล์จะต้องมีประสิทธิภาพจริงๆเพราะถ้าหากปัญหาเหล่านั้นไม่พบเช่นถ้าคุณไปถึงจุดที่คุณคิดว่าไม่ถูกต้องจะไม่สามารถทำได้อีกต่อไป
แทรก: เมื่อต้องการใส่อีกวิธีหนึ่งนี่คือกราฟของปัจจัยเร่งความเร็วโดยรวมเนื่องจากปัญหาจะถูกลบอย่างต่อเนื่อง:
ดังนั้นสำหรับไตรมาสที่ 1 สำหรับการเปรียบเทียบการจับเวลาอย่างง่าย สำหรับ "การทำโปรไฟล์" ฉันใช้การหยุดแบบสุ่ม
Q2: ฉันให้ปริมาณงานเพียงพอ (หรือใส่วนรอบมัน) ดังนั้นมันจึงทำงานได้นานพอที่จะหยุดชั่วคราว
Q3: โดยทั้งหมดให้ภาระงานที่มีขนาดใหญ่แนบเนียนเพื่อให้คุณไม่พลาดปัญหาแคช สิ่งเหล่านั้นจะปรากฏเป็นตัวอย่างในรหัสที่ทำการดึงหน่วยความจำ