Google perftools - CPU Profiler
by pittayaลองใช้ google perftools ดู
มันเป็นไลบรารีที่เอาไว้วัดประสิทธิภาพการทำงานของโปรแกรม อันนี้ google เขาแจกให้ใช้ได้ฟรี
เอาโปรแกรมที่เขียนเป็น thesis มาลองวัดประสิทธิภาพดูด้วย CPU Profile เพราะรู้สึกว่ามันช้าจนเกินจะรับได้ไปสักหน่อย จะได้ปรับอัลกอริทึมให้มันดีขึ้น
วิธีใช้งานก็เพิ่ม -lprofiler ลงไปตอน link โปรแกรม
จากนั้นก็สั่ง execute
$ CPUPROFILE=/home/pit/tmp/profile /home/pit/projects/test/program
มันจะไปสร้าง profile ให้ที่ /home/pit/tmp/profile
จากนั้นก็เอา profile ที่ได้มาวิเคราะห์ด้วย tools ที่ชื่อ pprof
$ pprof --gv --lines /home/pit/projects/test/program /home/pit/tmp/profile
จะให้มัน output มาเป็น text ล้วนๆ หรือทำเป็นกราฟ ก็ได้ทั้งแบบ Postscript แล้วก็ Gif
ปรากฎว่าผลที่ได้จากการวัดด้วย tools ตัวนี้คือ ส่วนที่ทำงานช้าที่สุดคือฟังก์ชัน cvDilate(33%), cvQueryFrame(20%) และ cvCopy(17%) ซึ่งเป็นส่วนหนึ่งของไลบรารี OpenCV
ฟังก์ชัน cvDilate และ cvCopy ทำงานได้ไม่เร็วอย่างที่คิดไว้ ทั้งๆ ที่เป็นการทำงานที่ค่อนข้างตรงไปตรงมาเมื่อเทียบกับฟังก์ชันอื่นอย่าง cvAdaptiveThreshold ที่คิดว่าน่าจะเสียเวลาการทำงานมากกว่าเยอะ
นอกจากนี้ยังเห็นได้ว่า cvQueryFrame ซึ่งเป็นฟังก์ชันที่ทำงานกับ I/O ทำงานช้ากว่าที่คิดมาก และอาจจะเป็นคอขวดของระบบได้ เนื่องจากโปรแกรมไม่ได้มีการทำงานแบบเป็น thread ดังนั้นตอนที่ fetch ข้อมูลจาก I/O จะทำให้ process ถูก block
จะว่าไปแล้ว cvDilate กับ cvCopy ถ้าได้ใช้งานความสามารถของ MMX น่าจะทำให้ทำงานได้เร็วขึ้นเป็นเท่าตัว เพราะสามารถทำงานได้พร้อมกันทีละหลายๆ pixel
แนวทางปรับปรุง - เปลี่ยนโปรแกรมเป็นแบบ thread แยกส่วนการ fetch ข้อมูล ออกจากการประมวลผลหลัก, หาทางทำ dilation ให้เร็วๆ กว่านี้
- Published:February 7th, 2006
- Comments:1 Comment
- Category:Computer, Programming



1 Comment
จะลองเอาไปใช้ดูค่ะ