Mishaal Rahman นักแกะข้อมูลสาย Android ชื่อดัง รายงานว่ากูเกิลเตรียมใช้ไลบรารีถอดรหัสวิดีโอ AV1 ตัวใหม่ที่มีประสิทธิภาพมากขึ้น ช่วยให้มือถือรุ่นเก่าๆ ที่ไม่มีชิปถอดรหัส AV1 ในตัวสามารถดูวิดีโอ AV1 ด้วยซีพียู แต่ประหยัดแบตเตอรี่กว่าเดิม
เดิมทีนั้น Android ใช้ไลบรารี libgav1 ของกูเกิลเองมาตั้งแต่ Android 10 แต่ไลบรารีถอดรหัสวิดีโอที่นิยมใช้กันในวงการคือ libdav1d ของ VideoLAN ซึ่งมีข้อดีกว่าตรงที่บางส่วนเขียนด้วยภาษาแอสเซมบลี ทำงานกับชิป ARMv8 โดยตรง ช่วยลด overhead ของซีพียูลงได้มาก เหมาะกับการถอดรหัส AV1 บนฮาร์ดแวร์รุ่นเก่าๆ
จากการทดลองของ Rahman เองบนมือถือ Pixel 3 XL รุ่นเก่า การเล่นวิดีโอด้วย libgav1 ได้เฟรมเรตเพียง 10 fps ในขณะที่ libdav1d ได้เฟรมเรตเพิ่มมาเป็น 25-50 fps
สายข่าวของ Rahman บอกว่ากูเกิลตั้งเป้าเปลี่ยนไลบรารี AV1 ผ่าน Google Play System Update ( Project Mainline อัพเดตบางส่วนของ OS ได้ ) ในเดือนมีนาคม 2024 แต่ตอนนี้ยังไม่ชัดว่าต้องเป็น Android เวอร์ชันใดบ้างที่จะได้ไลบรารีตัวใหม่นี้
ที่มา - Android Authority
Comments
overhead => overheat หรือเปล่าครับ
ต้นทางก็เป็น overhead ครับ น่าจะหมายถึงช่วยลดภาระการคำนวณ/ใช้หน่วยความจำ บางส่วนลงได้ครับ
overhead
overhead มันคือการใช้ resource มาก (อาจจะถึงมากกว่าที่ควร) ครับ
ส่วนคำที่เกี่ยวข้องก็คือ headroom ก็คือการมี resource มากเผื่อ overhead
นึกถึงเวลาอยู่บนเครื่องบินก็ได้ครับ overhead คือสิ่งที่อยู่เหนือหัว ส่วน headroom คือพื้นที่ที่อยู่เหนือหัว อะไรงี้ครับ
บางคนที่คิดว่า Assembly มัน overhead น้อยกว่า compile ภาษาอื่นเอานี้เขารู้ว่า compiler มันมี optimization option ให้ด้วยหรือเปล่า?
https://godbolt.org/
เขาเปิด assembly ดูได้เลยครับ (แล้วก็เปิดดุกันจริง ๆ นะ) ดังนั้นก็ไม่ต้องมานั่งมโนว่า compiler มันช่วย opimize ได้แล้วออกมาดีจริง ๆ หรือเปล่า
Optimization ของ compiler มันไม่ได้ฝากความหวังได้ขนาดนั้นครับยังไม่รวมเรื่องหลายๆงาน มีข้อห้ามเรื่องการใช้ compiler optimization (พวกที่ใช้ในรถยนต์ รถไฟเครื่องบิน และอื่นๆที่มี safety standard กำกับอยู่)
อันนี้ประสบการณ์ตรงๆของผมเอง ...เคยมีคนจ้างให้ optimize matrix functions
ต้นฉบับเขียนมาด้วยภาษา C ปัญหาคือพอเอาไปใช้งานบน MCU บางตัวมันเร็วไม่พอ ต่อให้เปิด optimization สุดแล้วก็ยังไม่พอ
แต่พอเอามาเขียนเป็น assembly หลักๆที่ผมทำก็คือใช้ pipelineให้เต็มที่.... ลดเวลาลงไปได้เยอะอยู่ครับ
แต่ในอีกมุมนึง ถ้าเขียน assembly ล้วนแต่อยากให้ทำงานช้าก็ได้นะครับ
ขอบคุณสำหรับความรู้ฮับ
..: เรื่อยไป
พอมี case ที่มันใช้องค์ประกอบ/อุปกรณ์น้อยๆ ให้ลองสักหน่อยไหมครับ มันยังคาใจ
เท่าที่รู้คือ เวลาเรา coding เพื่อให้ compiler มัน optimize ให้เราต้อง express intention/explicit หรือใช้ idiom ไม่งั้นอาจจะ generate code ที่เราไม่ต้องการให้
อย่าง https://godbolt.org/z/sre4x39sa
- ถ้าไม่ใช้ volatile มันจะเปลี่ยนตัวแปรเป็น constant ให้
- idiom สำหรับ change endian จากที่ต้อง bitwise เยอะๆ เป็น bswap คำสั่งเดียว
ฉะนั้นผมโยนงานพวกนี้ให้ compiler ไปเอาเวลาไปคิดอย่างอื่นดีกว่า