ฉันสมมติว่าคำถามของคุณมาจากการสังเกตว่า I / O ทำให้เกิดค่าใช้จ่ายที่สำคัญในการวิเคราะห์ทั้งหมดของคุณ ในกรณีนี้คุณสามารถลองซ้อน I / O ด้วยการคำนวณ
วิธีการที่ประสบความสำเร็จขึ้นอยู่กับวิธีที่คุณเข้าถึงข้อมูลและการคำนวณที่คุณดำเนินการกับข้อมูลนั้น หากคุณสามารถระบุรูปแบบหรือการเข้าถึงภูมิภาคต่าง ๆ ของข้อมูลเป็นที่ทราบล่วงหน้าคุณสามารถลองดึง "ชิ้นถัดไป" ของข้อมูลในพื้นหลังในขณะที่ประมวลผล "ชิ้นปัจจุบัน"
ตัวอย่างง่ายๆหากคุณสำรวจไฟล์เพียงครั้งเดียวและประมวลผลแต่ละบรรทัดหรือชุดของบรรทัดคุณสามารถแบ่งสตรีมในหน่วยของบรรทัด (หรือ MB) จากนั้นในการวนซ้ำแต่ละครั้งคุณสามารถโหลด chunk i + 1 ขณะประมวลผล chunk i
สถานการณ์ของคุณอาจซับซ้อนมากขึ้นและต้องการวิธีแก้ปัญหาที่เกี่ยวข้องมากกว่า ไม่ว่าในกรณีใดแนวคิดก็คือดำเนินการ I / O ในพื้นหลังในขณะที่หน่วยประมวลผลมีข้อมูลบางส่วนที่จะทำงาน หากคุณให้รายละเอียดเพิ่มเติมเกี่ยวกับปัญหาเฉพาะของคุณเราอาจจะมองลึกลงไป;)
---- เวอร์ชันขยายหลังจากให้รายละเอียดเพิ่มเติม ----
ฉันไม่แน่ใจว่าฉันเข้าใจสัญกรณ์ แต่อย่างที่คุณพูดความคิดนั้นเป็นการโต้ตอบทั้งหมด คุณยังพูดถึงว่าข้อมูลอาจพอดีกับ RAM จากนั้นฉันจะเริ่มต้นด้วยการวัดเวลาในการโหลดข้อมูลทั้งหมดและเวลาในการคำนวณ ตอนนี้
ถ้าเปอร์เซ็นต์ของ I / O ต่ำ (ต่ำเหมือนคุณไม่สนใจค่าใช้จ่ายไม่ว่าจะเป็น: 0.5%, 2%, 5%, ... ) จากนั้นใช้วิธีการง่ายๆ: โหลดข้อมูล ในครั้งเดียวและคำนวณ คุณจะประหยัดเวลาสำหรับแง่มุมที่น่าสนใจของการวิจัยของคุณ
หากคุณไม่สามารถจ่ายค่าโสหุ้ยคุณอาจต้องการตรวจสอบสิ่งที่ Pedro แนะนำ จำสิ่งที่ Aron Ahmadia พูดถึงและทดสอบก่อนที่จะนำไปใช้อย่างสมบูรณ์
n2n
load chunk1 และ chunk2
สำหรับชิ้น i = 1 ถึง n
โหลดก้อนแบบอะซิงโครนัส i + 1
สำหรับชิ้นใน j = i + 1 ถึง n
โหลดก้อนแบบอะซิงโครนัส j + 1
คำนวณด้วยชิ้น i, j (* สำหรับการคำนวณซ้ำครั้งแรกนี่คือชิ้นส่วนที่โหลดล่วงหน้า 1 และ 2 *)
หมายเหตุ: นี่เป็นรหัสปลอมที่รวดเร็วและสกปรกใครจะต้องปรับดัชนี
ในการดำเนินการนี้มันเป็นเรื่องธรรมดาที่จะใช้สิ่งที่เรียกว่าบัฟเฟอร์คู่ การพูดโดยประมาณ: แบ่งหน่วยความจำในสองพื้นที่ทำงาน; ในขณะที่ข้อมูลกำลังถูกโหลดในพื้นหลังในเวิร์กสเปซ 1 ตัวประมวลผลกำลังประมวลผลด้วยข้อมูลในเวิร์กสเปซ 2 ในแต่ละการวนซ้ำให้แลกเปลี่ยนบทบาท
ฉันขอโทษฉันไม่สามารถอ้างอิงที่ดีได้ในขณะนี้
[1] อัลกอริธึม out-of-core รวมเอากลไกบางอย่างในการจัดการข้อมูลที่อยู่บนดิสก์ พวกเขาถูกเรียกว่า out-of-core ซึ่งต่างจาก in-core ("in-RAM")
mmap
โค้ดหลักของคุณ ระบบปฏิบัติการสมัยใหม่หลายแห่งให้ประสิทธิภาพที่คล้ายคลึงกันระหว่างปกติและread
มีความซับซ้อนน้อยกว่า (นอกจากนี้ใช่ mmap ใน Python ยังมีอินเตอร์เฟสแบบพกพาสำหรับแมปหน่วยความจำ Windows และ UNIX)