Category: Embedded

ก้าวแรก HPC #10: ทลายขีดจำกัดด้วย ZeroMQ 0

ก้าวแรก HPC #10: ทลายขีดจำกัดด้วย ZeroMQ

เกริ่นนำ ที่ผ่านมาเราได้เรียนรู้ในการรีดกำลังของ CPU มาใช้ให้เต็มประสิทธิภาพซึ่งก็ผ่านไปด้วยดี ผลลัพธ์เป็นที่น่าพอใจ ในบทนี้เราจะไปกันต่อ เมื่อเราสูบทรัพยากรของเครื่องคอมพิวเตอร์หมดแล้ว เราก็ต้องไปสูบเครื่องอื่นต่อไป ใช่ครับ เรากำลังพูดถึงการทำงานแบบคลัสเตอร์ นั่นก็ไม่ใช่เรื่องใหม่สำหรับเรานัก เพราะได้ผ่านหูผ่านตามาจาก Apache Spark ไปแล้ว ตัวของ Apache Spark นั้นให้เราได้ทุกสิ่ง เหลือเพียงอย่างเดียวที่เรายังไม่ได้ก็คือประสิทธิภาพ ในบทนี้เรามาทวงถามหาประสิทธิภาพกัน เปิดเรื่องด้วย Message Queue บทความนี้เราจะใช้งาน ZeroMQ ซึ่ง MQ ในที่นี้ย่อมาจากคำว่า message queue เราจึงควรทำความเข้าใจเป็นปฐมกันก่อน คำว่า message more »

ก้าวแรก HPC #09: Thread Library เก่าแต่เก๋า 0

ก้าวแรก HPC #09: Thread Library เก่าแต่เก๋า

เกริ่นนำ เราเริ่มแหย่ขาเข้าสู่โลกแห่งการประมวลผลแบบขนาน โดยผ่านเรียนรู้จากการใช้งาน Apache Spark ซึ่งเป็นโมเดลการเขียนโปรแกรมแบบ MapReduce ที่ได้รับความนิยมอย่างสูงในยุคปัจจุบัน แต่โจทย์เราอาจจะไม่เหมาะสมกับเครื่องมือ เลยทำให้ได้รับผลตอบสนองที่สอบตกทุกวิชา มาวันนี้เราจะย้อนกลับไปโมเดลดั่งเดิม โมเดลที่ไม่ค่อยมีใครเขียนกันแล้วเพราะยุ่งยาก ส่วนมากก็ไปใช้ library ที่ขี่บนโมเดลนี้อีกที โมเดลนี้ก็คือ Fork-Join นั่นเอง ผมว่าถ้าเรียนรู้อย่างเป็นระบบแล้ว ก็ไม่ได้ยุ่งยากอะไร เปิดใจให้กว้างแล้วมาเรียนรู้ด้วยกันครับ เรียนรู้ศัพท์การประมวลผลแบบขนานผ่านมุมมองประวัติศาสตร์ ใครเคยเขียนโปรแกรมทำงานบนโมโครคอนโทรลเลอร์ขนาดเล็กจะเข้าใจดีว่า เมื่อเราเขียนโปรแกรมเสร็จ คอมไพล์ แล้วโหลดโปรแกรมจากคอมพิวเตอร์ไปเก็บไว้ใน flash ของไมโครคอนโทรลเลอร์แล้วก็บูทใหม่ เท่านี้โปรแกรมก็จะเริ่มทำงาน ไม่เห็นจำเป็นต้องมี OS แต่อย่างใด  โปรแกรมที่รันนั้นเป็นโปรแกรมเดียว ไม่สามารถทำงานพร้อมกันหลายโปรแกรมได้ more »

ก้าวแรก HPC #07: เตรียมเสบียงเลี้ยงตัว สู่โลกแห่งการประมวลผลแบบขนาน 0

ก้าวแรก HPC #07: เตรียมเสบียงเลี้ยงตัว สู่โลกแห่งการประมวลผลแบบขนาน

เกริ่นนำ ผมเริ่มเขียนบทความเรื่อง Apache Spark ปรากฏว่ามันเริ่มบวมใหญ่ เลยตัดสินใจแยกเนื้อหาที่ไม่เข้าพวกที่ต้องเกริ่นนำเป็นพื้นฐานออกมาเป็นบทความอีกบทความหนึ่ง กลายเป็นสะพานเชื่อมจากโลกการประมวลผลแบบเดี่ยวมาสู่การประมวลผลแบบขนานได้ ระหว่างการเขียนบทความนี้ก็บวมใหญ่อีก ผมเลยตัดเนื้อหาในส่วนที่ซับซ้อนไปไว้ในบทความชุดใหม่ “ก้าวสอง” ทั้งนี้เพื่อให้บทความชุดก้าวแรกนี้ยังคงง่ายสบายๆ นั่นเอง ดังนั้นบทความนี้จึงเหลือเท่าที่เห็น ไม่ง่ายและไม่ยากจนเกินไปนัก ในบทความนี้ผมขอเน้นการวิเคราะห์โปรแกรมที่เราเขียนกันผ่านมา พิจารณาดูว่าโปรแกรมส่วนไหนควรปรับให้เป็นการประมวลผลแบบขนานและมีข้อควรระวังอะไรบ้าง เรามาเริ่มกันเลยครับ **หมายเหตุ ในบทความนี้ผมใช้คำว่า “ตัวประมวลผล” แทนคำว่าคอร์ เพราะความหมายมันกว้างกว่า แต่ถ้าท่านคุ้นเคยกับกับว่าคอร์ก็ให้ทราบว่าเป็นเรื่องเดียวกัน Dr. Gene Amdahl ผู้นิยามขอบเขตการประมวลผลแบบขนาน ธรรมชาติการประมวลผลแบบขนานนั้น ในชั่วอายุของการทำงานของโปรแกรมนั้นไม่ใช่ว่าจะสามารถประมวลผลแบบขนานได้ตลอดเวลา บางเวลาโดยเฉพาะอย่างยิ่งตอนเริ่มและการสิ้นสุดการทำงานนั้นจะเป็นการประมวลผลแบบเดี่ยว เพื่อให้เห็นภาพผมเลยวาดให้ดูดังนี้ จากภาพจะเห็นได้ชัดเจนครับ การเริ่มทำงานนั้น จะเริ่มที่ตัวประมวลผลเดี่ยว more »

ก้าวแรก HPC #03: การสร้าง Cluster ส่วนตัวราคาถูกและดี

เกริ่นนำ ในบทความก่อนหน้า ผมคุยถึงเรื่องภาษาที่เลือกใช้ไปแล้วได้แก่ภาษา Python และ C++ ตอนแรกคิดว่าบทความนี้จะเข้าเรื่องโจทย์ตัวอย่างเลย แต่มาคิดอีกทียังขาดพื้นฐานที่สำคัญอีกเรื่องหนึ่ง ผมว่าเราควรมาคุยกันก่อนเพื่อจะได้ไม่เสียเวลาย้อนมาคุยกันอีก เรื่องที่ผมจะคุยในบทนี้ก็คือเรื่องเครื่องคอมพิวเตอร์ที่ผมใช้ครับ เนื่องจากเนื้อหาในเว็ปนี้เป็นการประมวลผลแบบขนาน ซึ่งไม่ได้จำกัดว่าจะขนานกับบนเครื่องคอมพิวเตอร์เพียงเครื่องเดียว ผมมีคอมพิวเตอร์หลายเครื่องครับ แต่การเปิดเครื่องคอมพิวเตอร์หลายเครื่องทำงานพร้อมๆ กัน ทั้งกินพื้นที่และกินไฟ ดูยุ่งยากครับ ผมก็เลยจะใช้วิธีเอาเครื่องคอมพิวเตอร์ถูกๆ ถูกจริงๆ ครับ กินพื้นที่น้อยมาก จอภาพแต่ละเครื่องก็ไม่ต้องใช้ ผมใช้ notebook ตัวเดียวเพื่อเข้าไปควบคุมทั้งหมด เป็น Single-board Computer หน้าตาจะเป็นอย่างไร เราไปดูรายละเอียดกันครับ ประวัติ Single-board Computer คอมพิวเตอร์ราคาถูกที่ผมจะใช้นั้น more »