เทียบความเร็วโปรแกรมตัดคำที่เขียนด้วยภาษาต่าง ๆ

ผมลองตัดคำบนเอกสารภาษาไทยขนาด 20MB บนเครื่องบน Intel® Core™ i3-4030U CPU @ 1.90GHz × 4 ที่ลง Ubuntu 16.04 ใช้ JVM คือ openjdk version “1.8.0_111”

ใช้ data structure แบบเดียวกันหมด algorithm หลัก ๆ ก็คล้าย ๆ กันถ้าผมไม่พลาดอะไรไป

ผลออกมาโปรแกรม chamkho ที่เขียนด้วย Rust มันก็เร็วจริงตามคาด แต่ที่น่าแปลกใจคือ yaito ที่ใช้ Kotlin ผสม Clojure นิด ๆ เร็วกว่าใช้ Go เกือบเท่าตัว

update1: หลังจากที่คุณ @iporsut patch mapkha ไปตอนนี้เวลาดีขึ้นเยอะแล้วจาก 12 วินาที ลดมาเหลือ 9-10 วินาที แต่ว่าอันดับยังไม่เปลี่ยน

update2: หลังจากที่คุณ @iporsut patch ครั้งที่ 2, อันดับก็เปลี่ยนแล้วครับ mapkha ที่ใช้ Go ไวขึ้นแบบเหลือแค่ 5 วินาที ตามหลัง Rust มาติด ๆ

update3: ผมลองแก้ yaito ที่เขียนด้วย Kotlin เป็นหลักตามแบบคุณ @iporsut ที่นี้พบว่าอันดับเปลี่ยนอีกแล้ว yaito ตอนนี้เร็วที่สุด เหลือ 4.311 วินาทีครับ เร็วกว่า chamkho ที่เขียนด้วย Rust อีก แต่ยังไม่ได้ optimize chamkho

update4: หลังจากที่คุณ @iporsut tune การอ่านไฟล์ และผมเพิ่ม test case และแก้ bug ของ mapkha ไปครับ

update5: มีจุดน่าสังเกตอีกอย่างคือ JVM บางทีใช้ CPU มากกว่า 1 core ครับ ผมใช้คำสั่ง time แล้วเอาเวลา real มาเปรียบเทียบ มันจะขนาดมิติว่าถ้ารันหลาย ๆ งานไป

update6: ปรับ chamkho ที่เขียนด้วย Rust ให้ใช้วิธีคล้าย mapkha และ yaito พบว่า chamkho กลับมาเร็วที่สุดอีกครั้ง โดยใช้เวลา 3.284 วินาที

update7: คุณ @iporsut ปรับ mapkha ที่เขียนด้วย Go ให้ไม่ต้องสร้าง EdgeBuilder ใหม่บ่อย ๆ

update8: เพิ่ม Julia

update9: เพิ่ม JS

update10: เพิ่มภาษา Crystal

หากท่านใดต้องปรัปรุงโปรแกรมได้อีก ก็ขอเรียนเชิญ pull request มาได้เลยครับ มี project ทั้งบน gitlab และ github ชื่อเดียวกันครับ

ตารางทดสอบรอบที่ 1

โปรแกรม ภาษาโปรแกรม ครั้ง 1 (วินาที) ครั้ง 2 (วินาที) ครั้ง 3 (วินาที) เฉลี่ย (วินาที)
mapkha golang 1.7.4 12.733 12.651 12.441 12.608
mapkha (patch โดยคุณ @iporsut) golang 1.7.4 9.983 10.007 9.979 9.989
mapkha (patch โดยคุณ @iporsut ครั้งที่ 2) golang 1.7.4 5.062 4.938 5.014 5.005
mapkha (update 4) golang 1.7.4 5.415 5.405 5.416 5.412
mapkha (update 7) golang 1.7.4 5.431 5.449 5.385 5.422
yaito kotlin 1.0.6 มี clojure 1.8.0 นิดหน่อย 6.547 6.743 6.628 6.639
yaito ที่แก้ลอกเลียนคุณ @iporsut kotlin 1.0.6 มี clojure 1.8.0 นิดหน่อย 4.287 4.249 4.399 4.312
chamkho rust nightly 2017-01-08 4.826 4.829 4.85 4.835
chamkho update 6 rust nightly 2017-01-08 3.366 3.247 3.241 3.284
wordcut-clj clojure 1.8.0 มี kotlin 1.0.6 นิดหน่อย 63.502 67.561 67.303 66.122
wordcutpy python 3.5.2 50.624 50.803 50.869 50.765
wordcut.jl (update 8) Julia 0.5.0 38.316 38.112 38.237 38.221
prasae (update 9) node.js v6.5.0 49.349 49.084 49.901 49.445
kachet (update 10) Crystal 0.20.5 5.637 5.679 5.649 5.655

ป.ล. ขอบคุณท่าน @iporsut ที่ refactor Mapkha ให้สวยงามขึ้นครับ

Advertisements
This เรื่อง was posted in ไม่มีหมวดหมู่. Bookmark the permalink.

4 thoughts on “เทียบความเร็วโปรแกรมตัดคำที่เขียนด้วยภาษาต่าง ๆ

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s