เมื่อเร็ว ๆ นี้ฉันเริ่มสนใจปัญหาทั่วไปของการเพิ่มประสิทธิภาพการใช้หน่วยความจำในสถานการณ์ที่มีหน่วยความจำมากกว่าหนึ่งประเภทและมีการแลกเปลี่ยนระหว่างความจุของเซ็กเมนต์หน่วยความจำที่กำหนดและความเร็วในการเข้าถึง
ตัวอย่างที่คุ้นเคยคือโปรแกรมที่ตัดสินใจเมื่อจะอ่าน / เขียนไปยังแคชตัวประมวลผล RAM และฮาร์ดไดรฟ์ (ผ่านหน่วยความจำเสมือน)
ฉันสนใจเป็นพิเศษในกรณีพิเศษที่ปริมาณข้อมูล (รวมถึงตัวโปรแกรมเอง) ที่จำเป็นต้องโหลดเกินความจุของพื้นที่เก็บข้อมูลที่เร็วที่สุดที่มีอยู่อย่างมีนัยสำคัญ (เช่นโซลูชันเล็กน้อยของ
ฉันพบว่าหน้าวิกิพีเดียอธิบายอัลกอริทึมแคชทั่วไปซึ่งเกือบจะเป็นสิ่งที่ฉันต้องการ น่าเสียดายที่สิ่งเหล่านี้ค่อนข้างต่ำ:
- หลายอย่างเช่น LRU หรือ MRU จะใช้งานได้ก็ต่อเมื่อคุณมีรูทีนย่อยที่เข้าถึงหลายครั้ง หากฉันมีโปรแกรมที่มีรูทีนย่อยจำนวนมากบางโปรแกรมไม่เคยเข้าถึงในการทำงานที่กำหนดและบางโปรแกรมสามารถเข้าถึงได้หนึ่งหรือสองครั้งกลยุทธ์นี้จะไม่ทำงานเพราะมันไม่สามารถสร้างข้อมูลที่เพียงพอ ที่ใช้กันทั่วไปและสิ่งที่ไม่
- คนอื่น ๆ เช่น CLOCK ดูเหมือนจะจัดการกับลักษณะเฉพาะของการนำไปปฏิบัติแทนที่จะโจมตีรากของปัญหา
- ฉันรู้ว่ามีกลยุทธ์ที่หนึ่งโปรไฟล์แรกโปรแกรมในระหว่างการทดสอบการทำงานแล้วให้โปรไฟล์สำหรับระบบปฏิบัติการเพื่อเพิ่มประสิทธิภาพตาม อย่างไรก็ตามเรายังต้องแก้ปัญหาในการให้ตัวแทน "การใช้งานตัวอย่าง" อย่างแท้จริงในขณะที่สร้างโปรไฟล์
สิ่งที่ฉันต้องการเรียนรู้เกี่ยวกับเรื่องนี้คือ: เมื่อเราสรุปความรู้ทางเทคนิคทั้งหมดของฮาร์ดแวร์และซอฟต์แวร์และพูดในบริบททางทฤษฎีล้วนๆเป็นไปได้ที่จะวิเคราะห์โครงสร้างของอัลกอริทึมเพื่อหากลยุทธ์แคชที่มีประสิทธิภาพสำหรับ มันขึ้นอยู่กับความเข้าใจในระดับสูงว่าอัลกอริทึมกำลังทำอะไรอยู่?