หลังจากพัฒนามาเจ็ดเดือน ในที่สุดก็มีการเปิดตัวเฟรมเวิร์กเวอร์ชัน 0.2.0 OpenZLออกแบบมาเพื่อสร้างโปรแกรมบีบอัดข้อมูลแบบไม่สูญเสียคุณภาพ
เฟรมเวิร์กนี้ประกอบด้วยไลบรารีพื้นฐานและเครื่องมือสำหรับสร้างตัวบีบอัดข้อมูลเฉพาะทาง ซึ่งอธิบายไว้ในภาษาดังกล่าว SDDL.
การสร้างคอมเพรสเซอร์เฉพาะทางที่ดีนั้นมีสองขั้นตอน:
- การวิเคราะห์ข้อมูลเพื่อแยกโครงสร้างออกมา
- ใช้คอมเพรสเซอร์แบ็กเอนด์ที่ดีซึ่งใช้ประโยชน์จากโครงสร้างที่ได้มาเพื่อให้ได้การบีบอัดที่ดี
OpenZL มีเครื่องมือสำหรับทั้งสองขั้นตอน
โปรเจ็กต์นี้เขียนด้วยภาษา C และ C++ และเผยแพร่ภายใต้ใบอนุญาต BSD
การเปลี่ยนแปลงที่สำคัญ
เอสดีแอล2
SDDL ได้รับการเขียนใหม่ทั้งหมดตั้งแต่เริ่มต้นเพื่อให้บรรลุเป้าหมายการออกแบบดั้งเดิม ในขณะที่เดโมดั้งเดิมเป็นเพียงสภาพแวดล้อมการทำงานแบบง่ายๆ แต่ SDDL2 เป็นคอมไพเลอร์ที่สมบูรณ์แบบ: ตัวแยกวิเคราะห์จะส่งข้อมูลไปยังตัววิเคราะห์ความหมาย ซึ่งจะส่งโครงสร้างต้นไม้ไวยากรณ์นามธรรม (AST) ที่มีประเภทไปยังตัวเพิ่มประสิทธิภาพ และตัวเพิ่มประสิทธิภาพจะควบคุมตัวสร้างโค้ด ซึ่งจะสร้างไบต์โค้ดของเครื่องเสมือน
ผลลัพธ์ที่สำคัญคือการแยกวิเคราะห์แบบทันที เมื่อสามารถระบุตำแหน่งของระเบียนได้อย่างครบถ้วนโดยใช้เพียงพารามิเตอร์และค่าคงที่เท่านั้น เอ็นจิ้นจะข้ามไปยังฟิลด์ใดก็ได้โดยตรงโดยไม่ต้องสแกนไบต์ก่อนหน้า ทำให้สามารถเข้าถึงข้อมูลได้โดยไม่ต้องคัดลอก และมีอัตราการส่งข้อมูลหลาย GB/วินาที
ตัวภาษาเองก็มีการพัฒนาควบคู่ไปกับชุดเครื่องมือ ปัจจุบันรองรับคำสั่งเงื่อนไข (when clauses) เรคอร์ดที่มีพารามิเตอร์และไม่มีชื่อ การเข้าถึงสมาชิกฟิลด์ของเรคอร์ด และตัวดำเนินการบิตและตรรกะ
ในส่วนของนักพัฒนา การวิเคราะห์ความหมายในขั้นนี้จะระบุการอ้างอิงที่ไม่นิยาม ความไม่ตรงกันของประเภท และข้อผิดพลาดเกี่ยวกับจำนวนพารามิเตอร์ในระหว่างการคอมไพล์ โดยอ้างอิงจากตำแหน่งของซอร์สโค้ด แทนที่จะเป็นในระหว่างการทำงาน และได้มีการปล่อยส่วนขยาย VS Code สำหรับการเน้นไวยากรณ์ของไฟล์ .sddl ออกมาแล้ว
โคเด็ค LZ ในตัวใหม่
ปัจจุบัน OpenZL มีตัวแปลงสัญญาณ LZ ของตัวเอง ซึ่งแสดงเป็น ZL_GRAPH_LZ รวมถึงโปรไฟล์การบีบอัดแบบลำดับในยูทิลิตี้ zli การพัฒนาตัวแปลงสัญญาณยังคงดำเนินต่อไป เพื่อขยายชุดคุณสมบัติและปรับปรุงประสิทธิภาพเมื่อประมวลผลข้อมูลอินพุตขนาดเล็ก ปัจจุบันรองรับฟังก์ชันการทำงานเทียบเท่ากับ zstd ระดับ 1 ด้วยหน้าต่างการบีบอัด 64 KB
OpenZL อนุญาตให้ปรับการออกแบบแต่ละขั้นตอนของไปป์ไลน์ LZ เพื่อเพิ่มความเร็ว สถาปัตยกรรมกราฟของมันยังช่วยให้สามารถรวมขั้นตอนการเข้ารหัสเอนโทรปีเข้าด้วยกัน แทนที่จะใช้ไปป์ไลน์เดียวที่เหมาะสมกับทุกกรณีการใช้งานอย่างเท่าเทียมกัน จากนั้นสามารถรวมหลายขั้นตอนเข้าเป็นการดำเนินการเดียวเพื่อปรับปรุงความเร็วในการประมวลผล ซึ่งทำให้ OpenZL สามารถบีบอัดได้เร็วขึ้น 10% และคลายการบีบอัดได้เร็วขึ้น 70% เมื่อเทียบกับ Zstandard ระดับ 1 บนชุดข้อมูล Silesia การทดสอบของเรา:
| คอมเพรสเซอร์ | อัตราส่วนการบีบอัด | ความเร็วในการบีบอัด | ความเร็วในการลดความดัน |
|---|---|---|---|
| OpenZL LZ ระดับ 1 | 2.74 | ฮิต MB / s | ฮิต MB / s |
| Zstd ระดับ 1 ที่มีขนาดหน้าต่าง 64K | 2.74 | ฮิต MB / s | ฮิต MB / s |
| Zstd ระดับ 1 | 2.89 | ฮิต MB / s | ฮิต MB / s |
รองรับข้อมูลอินพุตขนาดใหญ่มาก
zli ในปัจจุบันรองรับการประมวลผลข้อมูลขนาดใหญ่ (หลายกิกะไบต์) แล้ว ก่อนการบีบอัด ข้อมูลดังกล่าวจะถูกแบ่งออกเป็นส่วนย่อยที่มีขนาดจัดการได้ง่ายโดยอัตโนมัติ (ประมาณ 16 MB โดยค่าเริ่มต้น) ซึ่งช่วยลดการใช้หน่วยความจำ ปรับปรุงการเข้าถึงข้อมูล และช่วยให้สามารถประมวลผลแบบขนานได้ SDDL2 ใช้คุณสมบัติการแบ่งส่วนข้อมูลอัตโนมัติที่คล้ายกันเมื่อทำงานกับสคีมา มีการสร้างหรืออัปเดตตัวแบ่งส่วนใหม่สำหรับข้อมูล CSV, Parquet และข้อมูลตัวเลขมาตรฐาน และตัวแบ่งส่วนทั้งหมดสามารถแปลงเป็นอนุกรมและกำหนดค่าได้ ดังนั้นรูปแบบที่เลือกจึงสามารถบันทึกไว้ในโปรแกรมบีบอัดและนำกลับมาใช้ใหม่ได้ในภายหลัง
กระบวนการนี้จะถูกนำไปใช้โดยอัตโนมัติระหว่างการบีบอัด โปรดทราบว่าขั้นตอนการฝึกฝนนั้นแตกต่างออกไปและไม่ได้รับผลกระทบ ดังนั้นจึงไม่ได้ออกแบบมาเพื่อรองรับข้อมูลขนาดใหญ่มากเป็นวัสดุสำหรับการฝึกฝน
การปรับปรุงโปรแกรมแสดงภาพกราฟออนไลน์ (เพื่อลอง)
ขณะนี้โปรแกรมแสดงผลสามารถจดจำร่องรอยการบีบอัดและการคลายการบีบอัดได้ตั้งแต่ต้นจนจบ
แผงแสดงตัวอย่างสตรีมช่วยให้คุณเห็นไบต์ที่ไหลไปตามแต่ละขอบอย่างแท้จริง และตัวควบคุมการตัดแต่งช่วยให้ทำงานกับสตรีมขนาดใหญ่ได้ง่าย
แผงการตั้งค่ารวบรวมตัวเลือกการแสดงผลทั้งหมดไว้ในที่เดียว และชุดปุ่มลัดครบครัน—การนำทางตามทิศทาง การสำรวจตามลำดับ การขยายและการยุบ และการเลือกโหนด—ช่วยให้คุณใช้งานเครื่องมือได้อย่างสะดวกโดยไม่ต้องใช้เมาส์
ขณะนี้ไฟล์ติดตามการทำงานได้รับการกำหนดเวอร์ชันแล้ว การบีบอัดแบบบล็อกแสดงผลได้อย่างถูกต้อง และในที่สุด zli ก็สามารถสร้างไฟล์ติดตามการทำงานของตัวเองได้โดยใช้แฟล็กใหม่ --trace และ --trace-streams-dir
หนังสือรวบรวมเรื่อง
- มีการเพิ่มโคเดกหลายตัวลงในแคตตาล็อก โคเดก Partition และ bitpack ตอนนี้ใช้ตัวถอดรหัสแบบรวม โคเดก bitsplit สำหรับเลขทศนิยมตอนนี้มีตัวเข้ารหัสและตัวถอดรหัสเฉพาะสำหรับรูปแบบ fp16, fp32, fp64 และ bf16 พร้อมการเร่งความเร็วแบบพิเศษ การแบ่งตามช่วง (split_byrange), ตัวมัลติเพล็กเซอร์ความยาว, โคเดกเซนติเนล, กราฟ lz4 และฟังก์ชันช่วยเหลือย่อย เช่น tryParseInt และ splitByParam ได้ถูกเพิ่มเข้ามาแล้ว
- API ได้รับการปรับปรุงให้ใช้งานง่ายขึ้นแล้ว
- การทดสอบแบบฟัซซ์ที่ได้รับการปรับปรุงแล้ว
- ปรับปรุงกระบวนการสร้างและบรรจุภัณฑ์ให้รองรับแพลตฟอร์มต่างๆ มากขึ้น
ที่มา: linux.org.ru
