คำถามติดแท็ก memory-bandwidth

13
การเพิ่มประสิทธิภาพใด ๆ สำหรับการเข้าถึงแบบสุ่มในอาร์เรย์ขนาดใหญ่มากเมื่อค่าใน 95% ของเคสเป็น 0 หรือ 1?
มีการเพิ่มประสิทธิภาพที่เป็นไปได้สำหรับการเข้าถึงแบบสุ่มในอาร์เรย์ขนาดใหญ่มากหรือไม่ (ปัจจุบันฉันใช้uint8_tและกำลังถามว่ามีอะไรดีกว่า) uint8_t MyArray[10000000]; เมื่อค่าที่ตำแหน่งใด ๆ ในอาร์เรย์คือ 0หรือ1สำหรับ95%ของทุกกรณี 2ใน4%ของกรณี ระหว่าง3ถึง255ในอีก1%ของกรณี? มีอะไรดีไปกว่าuint8_tอาร์เรย์ที่จะใช้สำหรับสิ่งนี้หรือไม่? ควรเร็วที่สุดเท่าที่จะเป็นไปได้ในการวนซ้ำอาร์เรย์ทั้งหมดตามลำดับแบบสุ่มและนี่หนักมากกับแบนด์วิดท์ RAM ดังนั้นเมื่อมีเธรดมากกว่าสองสามเธรดที่ทำเช่นนั้นในเวลาเดียวกันสำหรับอาร์เรย์ที่แตกต่างกันปัจจุบันแบนด์วิดท์ RAM ทั้งหมด อิ่มตัวอย่างรวดเร็ว ฉันถามเนื่องจากรู้สึกว่าไม่มีประสิทธิภาพมากที่จะมีอาร์เรย์ขนาดใหญ่ (10 MB) เมื่อทราบว่าค่าเกือบทั้งหมดนอกเหนือจาก 5% จะเป็น 0 หรือ 1 ดังนั้นเมื่อ 95% ของค่าทั้งหมดในอาร์เรย์ ต้องการเพียง 1 บิตแทนที่จะเป็น 8 บิตซึ่งจะลดการใช้หน่วยความจำลงเกือบจะเป็นลำดับความสำคัญ รู้สึกว่าจะต้องมีโซลูชันที่มีประสิทธิภาพหน่วยความจำมากกว่าซึ่งจะช่วยลดแบนด์วิดท์ RAM ที่จำเป็นสำหรับสิ่งนี้ได้อย่างมากและเป็นผลให้การเข้าถึงแบบสุ่มเร็วขึ้นอย่างมาก
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.