วันศุกร์ที่ 22 กุมภาพันธ์ พ.ศ. 2562

การทดสอบประสิทธิภาพการทำงานของ Serial, Threading และ Multiprocessing

การทดสอบในครั้งนี้จะมีลักษณะคือ การเรียกใช้ฟังค์ชันแบบ Serial, Thread และ Multiprocessing ตั้งแต่ 1 ครั้ง, 4 ครั้ง และ 8 ครั้ง และในแต่ละครั้งจะแบ่งเป็น การเรียกใช้ฟังค์ชันเพียงครั้งเดียว และ การเรียกใช้ฟังค์ชันที่ภายในมี loop การทำงานมากๆ โดยฟังค์ชันที่ใช้จะเป็นฟังค์ชัน Image Processing ต่างๆเพื่อทดสอบการทำงานของโปรแกรมหลักไปในตัว



ตัวอย่างการทำงานจากการใช้ Thread

โดยมีผลลัพธ์ที่ได้คือ การเรียกใช้แบบ Serial จะใช้ CPU Core 1 ตัวเป็นหลักเสมอ อาจมีการสับเปลี่ยน Core เพื่อลดภาระการทำงานของ Core ตัวก่อนหน้าโดย OS บ้าง แต่จะมีเพียง 1 Core ที่ทำงานสูงสุดเสมอ ไม่ว่าจะเรียกฟังค์ชันกี่ครั้งก็ตาม


ผลลัพธ์ของ Threading และ Multiprocessing การทำงานของ CPU Core จะมีลักษณะคล้ายๆกันคือ Core ที่ทำงานนั้นจะขึ้นอยู่กับจำนวนของ Thread หรือ Process ที่ถูกสร้างเพื่อเรียกใช้ฟังค์ชัน



4 Threads



4 Processes


8 Threads


8 Processes

ซึ่งเวลาในการทำงานของแต่ละวิธีนั้นจะแสดงดังตารางด้านล่าง




จากตารางจะพบว่าหากการทำงานเป็นแบบเรียกใช้เพียงครั้งเดียว การทำงานแบบ Serial จะมีประสิทธิภาพมากกว่า ในอีกด้านนั้น ยิ่งจำนวน Loop ในฟังค์ชันนั้นมากขึ้น การทำงานแบบ Multiprocessing นั้นจะให้ประสิทธิภาพการทำงานที่สูงกว่าการทำงานแบบ Serial และ Thread เนื่องจาก Thread ใน Python ไม่ใช่การทำงานแบบขนาน แต่เป็นการสลับการทำงานระหว่าง Thread แทน

และเนื่องจากในการทำงานจริงนั้นจะใช้งานบนบอร์ด Raspberry Pi 3 Model B+ จึงได้นำโค้ดทดลองไปทดสอบบนบอร์ด โดยเรียกใช้ฟังค์ชันการทำงานสูงสุดตามจำนวน Core สูงสุดของบอร์ดคือ 4 Cores
( Notebook ที่ใช้ทดสอบผลด้านบนคือ Lenovo Z580 8 Cores )



ซึ่งผลลัพธ์ที่ได้นั้นก็ยังคงสอดคล้องกับผลที่ทดลองบน Lenovo อยู่

ผลสรุปคร่าวๆจากการทดลองทั้งหมดคือ

  • ในกรณีที่เรียกใช้ฟังค์ชันที่มีการทำงานเพียงครั้งเดียวนั้น การเรียกใช้แบบปกติหรือแบบ Serial นั้น ใช้เวลาน้อยกว่าทั้ง 2 กรณี
  • ในกรณีที่ฟังค์ชันนั้นมี loop หรือการทำซ้ำอยู่ภายในเป็นจำนวนมากๆ เวลาในการทำงานนั้นจะขึ้นอยู่กับ จำนวนของการเรียกใช้ฟังค์ชัน 
  • หากมีการเรียกใช้น้อย เวลาการทำงานของทั้ง 3 วิธีจะไล่เลี่ยกัน 
  • หากมีการเรียกใช้มากๆ เวลาการทำงานของ Multiprocessing จะเร็วกว่า ตามมาด้วย Serial และ Thread ตามลำดับ



จากรูปภาพด้านบนจะสังเกตได้ว่าในระหว่างการทดสอบนั้นทำให้อุณหภูมิของ CPU สูงขึ้นด้วย ต้องใช้งานอย่างระมัดระวัง

ไม่มีความคิดเห็น:

แสดงความคิดเห็น