เรื่องเล่าจากโค้ดระดับล่าง: เมื่อ FFmpeg เร็วขึ้น 100 เท่าเพราะ “เขียนมือ”
ฟังก์ชันที่ถูกปรับปรุงชื่อว่า rangedetect8_avx512 ซึ่งใช้ในฟิลเตอร์ที่ไม่ค่อยมีคนใช้งาน แต่เมื่อทีม FFmpeg เขียนโค้ด assembly ด้วยมือโดยใช้ SIMD (Single Instruction, Multiple Data) บนชุดคำสั่ง AVX-512 ก็ทำให้ความเร็วพุ่งขึ้นถึง 100 เท่าในบางระบบ
ถ้า CPU ของคุณไม่รองรับ AVX-512 ก็ยังได้ประสิทธิภาพเพิ่มขึ้นถึง 64% ผ่านเวอร์ชัน AVX2 ซึ่งถือว่ายังเร็วมากเมื่อเทียบกับโค้ดเดิมที่ใช้ compiler สร้าง
นักพัฒนายังวิจารณ์ว่า compiler ปัจจุบันยังไม่สามารถจัดการ register allocation ได้ดีพอ ทำให้โค้ดที่สร้างโดยอัตโนมัติยังด้อยกว่าการเขียนด้วยมือในหลายกรณี
FFmpeg ปรับปรุงฟังก์ชัน rangedetect8_avx512 ด้วยการเขียน assembly ด้วยมือ
ทำให้ความเร็วเพิ่มขึ้นถึง 100 เท่าในระบบที่รองรับ AVX-512
ฟังก์ชันนี้เป็นส่วนหนึ่งของฟิลเตอร์ที่ไม่ค่อยมีคนใช้
แต่แสดงให้เห็นว่าการเขียนโค้ดระดับต่ำยังมีคุณค่าในงานเฉพาะ
หากใช้ CPU ที่รองรับ AVX2 ก็ยังได้ความเร็วเพิ่มขึ้น 64%
ทำให้ผู้ใช้ทั่วไปยังได้รับประโยชน์แม้ไม่มีฮาร์ดแวร์ระดับสูง
ใช้เทคนิค SIMD เพื่อประมวลผลแบบขนานในระดับ instruction
เหมาะกับงานที่ต้องจัดการข้อมูลจำนวนมาก เช่นการแปลงวิดีโอ
ทีม FFmpeg เคยปรับปรุงโค้ดแบบนี้มาก่อน เช่นในปี 2024 ที่เพิ่มความเร็ว 94 เท่า
แสดงถึงแนวทางการพัฒนาแบบ “assembly evangelist” ที่ยังมีอยู่
FFmpeg เป็นเบื้องหลังของเครื่องมือยอดนิยม เช่น VLC, libavcodec, libavformat
การปรับปรุงนี้อาจส่งผลต่อซอฟต์แวร์อื่นที่ใช้ library เหล่านี้ด้วย
ความเร็วที่เพิ่มขึ้นเกิดเฉพาะในฟังก์ชันเดียว ไม่ใช่ทั้ง FFmpeg
ผู้ใช้ทั่วไปอาจไม่รู้สึกถึงการเปลี่ยนแปลงหากไม่ได้ใช้ฟิลเตอร์นั้น
การเขียน assembly ด้วยมือต้องใช้ความเชี่ยวชาญสูงและดูแลยาก
อาจทำให้โค้ดเข้าใจยากและเสี่ยงต่อ bug หากไม่มีการทดสอบที่ดี
ฟังก์ชันนี้ใช้ AVX-512 ซึ่งมีเฉพาะใน CPU รุ่นใหม่บางรุ่น
ผู้ใช้ที่ไม่มีฮาร์ดแวร์รองรับจะไม่ได้ประโยชน์เต็มที่จากการปรับปรุงนี้
การพึ่งพาโค้ดที่เขียนด้วยมืออาจทำให้การพัฒนาในอนาคตช้าลง
เพราะต้องใช้เวลามากในการปรับปรุงและตรวจสอบความถูกต้อง
https://www.tomshardware.com/software/the-biggest-speedup-ive-seen-so-far-ffmpeg-devs-boast-of-another-100x-leap-thanks-to-handwritten-assembly-code
ฟังก์ชันที่ถูกปรับปรุงชื่อว่า rangedetect8_avx512 ซึ่งใช้ในฟิลเตอร์ที่ไม่ค่อยมีคนใช้งาน แต่เมื่อทีม FFmpeg เขียนโค้ด assembly ด้วยมือโดยใช้ SIMD (Single Instruction, Multiple Data) บนชุดคำสั่ง AVX-512 ก็ทำให้ความเร็วพุ่งขึ้นถึง 100 เท่าในบางระบบ
ถ้า CPU ของคุณไม่รองรับ AVX-512 ก็ยังได้ประสิทธิภาพเพิ่มขึ้นถึง 64% ผ่านเวอร์ชัน AVX2 ซึ่งถือว่ายังเร็วมากเมื่อเทียบกับโค้ดเดิมที่ใช้ compiler สร้าง
นักพัฒนายังวิจารณ์ว่า compiler ปัจจุบันยังไม่สามารถจัดการ register allocation ได้ดีพอ ทำให้โค้ดที่สร้างโดยอัตโนมัติยังด้อยกว่าการเขียนด้วยมือในหลายกรณี
FFmpeg ปรับปรุงฟังก์ชัน rangedetect8_avx512 ด้วยการเขียน assembly ด้วยมือ
ทำให้ความเร็วเพิ่มขึ้นถึง 100 เท่าในระบบที่รองรับ AVX-512
ฟังก์ชันนี้เป็นส่วนหนึ่งของฟิลเตอร์ที่ไม่ค่อยมีคนใช้
แต่แสดงให้เห็นว่าการเขียนโค้ดระดับต่ำยังมีคุณค่าในงานเฉพาะ
หากใช้ CPU ที่รองรับ AVX2 ก็ยังได้ความเร็วเพิ่มขึ้น 64%
ทำให้ผู้ใช้ทั่วไปยังได้รับประโยชน์แม้ไม่มีฮาร์ดแวร์ระดับสูง
ใช้เทคนิค SIMD เพื่อประมวลผลแบบขนานในระดับ instruction
เหมาะกับงานที่ต้องจัดการข้อมูลจำนวนมาก เช่นการแปลงวิดีโอ
ทีม FFmpeg เคยปรับปรุงโค้ดแบบนี้มาก่อน เช่นในปี 2024 ที่เพิ่มความเร็ว 94 เท่า
แสดงถึงแนวทางการพัฒนาแบบ “assembly evangelist” ที่ยังมีอยู่
FFmpeg เป็นเบื้องหลังของเครื่องมือยอดนิยม เช่น VLC, libavcodec, libavformat
การปรับปรุงนี้อาจส่งผลต่อซอฟต์แวร์อื่นที่ใช้ library เหล่านี้ด้วย
ความเร็วที่เพิ่มขึ้นเกิดเฉพาะในฟังก์ชันเดียว ไม่ใช่ทั้ง FFmpeg
ผู้ใช้ทั่วไปอาจไม่รู้สึกถึงการเปลี่ยนแปลงหากไม่ได้ใช้ฟิลเตอร์นั้น
การเขียน assembly ด้วยมือต้องใช้ความเชี่ยวชาญสูงและดูแลยาก
อาจทำให้โค้ดเข้าใจยากและเสี่ยงต่อ bug หากไม่มีการทดสอบที่ดี
ฟังก์ชันนี้ใช้ AVX-512 ซึ่งมีเฉพาะใน CPU รุ่นใหม่บางรุ่น
ผู้ใช้ที่ไม่มีฮาร์ดแวร์รองรับจะไม่ได้ประโยชน์เต็มที่จากการปรับปรุงนี้
การพึ่งพาโค้ดที่เขียนด้วยมืออาจทำให้การพัฒนาในอนาคตช้าลง
เพราะต้องใช้เวลามากในการปรับปรุงและตรวจสอบความถูกต้อง
https://www.tomshardware.com/software/the-biggest-speedup-ive-seen-so-far-ffmpeg-devs-boast-of-another-100x-leap-thanks-to-handwritten-assembly-code
🎙️ เรื่องเล่าจากโค้ดระดับล่าง: เมื่อ FFmpeg เร็วขึ้น 100 เท่าเพราะ “เขียนมือ”
ฟังก์ชันที่ถูกปรับปรุงชื่อว่า rangedetect8_avx512 ซึ่งใช้ในฟิลเตอร์ที่ไม่ค่อยมีคนใช้งาน แต่เมื่อทีม FFmpeg เขียนโค้ด assembly ด้วยมือโดยใช้ SIMD (Single Instruction, Multiple Data) บนชุดคำสั่ง AVX-512 ก็ทำให้ความเร็วพุ่งขึ้นถึง 100 เท่าในบางระบบ
ถ้า CPU ของคุณไม่รองรับ AVX-512 ก็ยังได้ประสิทธิภาพเพิ่มขึ้นถึง 64% ผ่านเวอร์ชัน AVX2 ซึ่งถือว่ายังเร็วมากเมื่อเทียบกับโค้ดเดิมที่ใช้ compiler สร้าง
นักพัฒนายังวิจารณ์ว่า compiler ปัจจุบันยังไม่สามารถจัดการ register allocation ได้ดีพอ ทำให้โค้ดที่สร้างโดยอัตโนมัติยังด้อยกว่าการเขียนด้วยมือในหลายกรณี
✅ FFmpeg ปรับปรุงฟังก์ชัน rangedetect8_avx512 ด้วยการเขียน assembly ด้วยมือ
➡️ ทำให้ความเร็วเพิ่มขึ้นถึง 100 เท่าในระบบที่รองรับ AVX-512
✅ ฟังก์ชันนี้เป็นส่วนหนึ่งของฟิลเตอร์ที่ไม่ค่อยมีคนใช้
➡️ แต่แสดงให้เห็นว่าการเขียนโค้ดระดับต่ำยังมีคุณค่าในงานเฉพาะ
✅ หากใช้ CPU ที่รองรับ AVX2 ก็ยังได้ความเร็วเพิ่มขึ้น 64%
➡️ ทำให้ผู้ใช้ทั่วไปยังได้รับประโยชน์แม้ไม่มีฮาร์ดแวร์ระดับสูง
✅ ใช้เทคนิค SIMD เพื่อประมวลผลแบบขนานในระดับ instruction
➡️ เหมาะกับงานที่ต้องจัดการข้อมูลจำนวนมาก เช่นการแปลงวิดีโอ
✅ ทีม FFmpeg เคยปรับปรุงโค้ดแบบนี้มาก่อน เช่นในปี 2024 ที่เพิ่มความเร็ว 94 เท่า
➡️ แสดงถึงแนวทางการพัฒนาแบบ “assembly evangelist” ที่ยังมีอยู่
✅ FFmpeg เป็นเบื้องหลังของเครื่องมือยอดนิยม เช่น VLC, libavcodec, libavformat
➡️ การปรับปรุงนี้อาจส่งผลต่อซอฟต์แวร์อื่นที่ใช้ library เหล่านี้ด้วย
‼️ ความเร็วที่เพิ่มขึ้นเกิดเฉพาะในฟังก์ชันเดียว ไม่ใช่ทั้ง FFmpeg
⛔ ผู้ใช้ทั่วไปอาจไม่รู้สึกถึงการเปลี่ยนแปลงหากไม่ได้ใช้ฟิลเตอร์นั้น
‼️ การเขียน assembly ด้วยมือต้องใช้ความเชี่ยวชาญสูงและดูแลยาก
⛔ อาจทำให้โค้ดเข้าใจยากและเสี่ยงต่อ bug หากไม่มีการทดสอบที่ดี
‼️ ฟังก์ชันนี้ใช้ AVX-512 ซึ่งมีเฉพาะใน CPU รุ่นใหม่บางรุ่น
⛔ ผู้ใช้ที่ไม่มีฮาร์ดแวร์รองรับจะไม่ได้ประโยชน์เต็มที่จากการปรับปรุงนี้
‼️ การพึ่งพาโค้ดที่เขียนด้วยมืออาจทำให้การพัฒนาในอนาคตช้าลง
⛔ เพราะต้องใช้เวลามากในการปรับปรุงและตรวจสอบความถูกต้อง
https://www.tomshardware.com/software/the-biggest-speedup-ive-seen-so-far-ffmpeg-devs-boast-of-another-100x-leap-thanks-to-handwritten-assembly-code
0 ความคิดเห็น
0 การแบ่งปัน
32 มุมมอง
0 รีวิว