Tag Archives: DeflOpt

ใช้ Zopfli แบบขนานด้วย Pigz

ต่อจาก Zopfli คราวที่แล้ว มันค่อนข้างจะใช้เวลานานมาก และเมื่อไล่โค้ด deflat.c บรรทัดที่ 688 ดูเหมือนว่ามันเป็น loop ที่ไม่ได้เอาข้อมูลจาก loop รอบที่แล้วมาใช้ จึงน่าจะทำการประมวลผลแบบขนานให้ทำ ZopfliDeflatePart() ของหลายๆ block ไปพร้อมๆ กันได้

แต่ก็ไปอ่านเจอว่า โปรแกรม pigz เวอร์ชันล่าสุด 2.3 ได้ผนวก Zopfli มาให้แล้ว โดย pigz เป็นโปรแกรม gzip แบบที่จะแบ่งงานเป็นส่วนๆ ไปให้ตัวประมวลผลที่มีอยู่หลายคอร์หรือหลายเท็รด ช่วยกันทำงานขนานกัน จะได้เสร็จเร็วๆ เลย yum install ดู พบว่ายังไม่ใช่เวอร์ชัน 2.3 จึงต้องเอา source code มา make เอง ตอนที่ make ต้องใส่ -lm เข้าไปในไฟล์ Makefile ด้วยครับ เพราะมันไม่เห็นฟังก์ชันคณิตศาสตร์ log() เมื่อ make เสร็จก็บีบไฟล์ enwik8 เหมือนเดิม โดยใช้ออฟชัน -11 ให้ pigz ใช้อัลกอริทึมบีบย่อ Zopfli

zopfli-pigz-compressing-enwik8

พบว่า ขนาดไฟล์เล็กกว่า zip แต่ก็ใหญ่กว่า Zopfli แบบที่ลูป -i1000 แต่ก็ใช้เวลาบีบน้อยกว่า ผมไม่แน่ใจว่า pigz มันใช้ Zopfli แบบลูปนานแค่ไหน

แล้วก็มีคนพบว่า Zopfli ยังบีบไม่สุด คือใช้โปรแกรม DeflOpt หรือ Defluff ซึ่งสามารถบีบไฟล์ที่เป็น gzip เพิ่มได้ โดยมันจะคำนวณ huffman code ในไฟล์ใหม่ ให้ได้ไฟล์เล็กสุดๆ มันยังบีบได้อีก เดาว่าเดี๋ยว Zopfli น่าจะมีเวอร์ชั่นใหม่ๆ มาล่ะครับ

Advertisements