Author: Supoj Choachaicharoenkul

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

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

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

ก้าวแรก HPC #08: Apache Spark กับงาน Big Compute 0

ก้าวแรก HPC #08: Apache Spark กับงาน Big Compute

เกริ่นนำ เราเดินทางตามสายธารของเวลา จากก้าวแรก มาถึงบทความนี้เป็นก้าวทีแปดแล้ว ผมวางพื้นทฤษฎี เครื่องไม้เครื่องมือ ตลอดจนโจทย์ทดสอบที่ใช้งานมาตามลำดับเป็นที่เรียบร้อย มาบทความนี้เราจะมาเรียนรู้การประมวลผลแบบขนานกัน มารีดกำลังของเครื่องคอมพิวเตอร์ของเราให้เต็มที่ เรื่องการประมวลผลแบบขนานนั้นมีรายละเอียดค่อนข้างมาก ในบทนี้ผมจึงขอแตะแค่ชั้นผิวของมันโดยเสพอาหารกล่องสำเร็จรูป เพียงอุ่นเล็กน้อยก็ทานได้เลย ยี่ห้อ Apache Spark ภาคประวัติ Search Engine ของ Google นั้นนับได้ว่าเป็น Search Engine ที่ดีที่สุดในโลก (ก็ว่าได้) Google Search สามารถค้นหาเอกสารที่มีอยู่มหาศาลใน Internet ได้อย่างรวดเร็ว Google ทำได้อย่างไร ทำไมถึงเก่งกาจขนาดนั้น ความลับนี้ถูกเปิดเผยในงานประชุมวิชาการว่าด้วยเรื่องการออกแบบและสร้างระบบปฏิบัติการ more »

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

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

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

ก้าวแรก HPC #06: อัลกอริทึมประสิทธิภาพสูงและการปรับปรุงประสิทธิภาพ 0

ก้าวแรก HPC #06: อัลกอริทึมประสิทธิภาพสูงและการปรับปรุงประสิทธิภาพ

เกริ่นนำ ในบทความที่แล้วผมนำเสนออัลกอริทึมอย่างง่ายเพื่อใช้หาค่า Bernoulli Number มาบทนี้เราจะไปกันต่อครับ เราจะไปเรียนรู้ถึงอัลกอริทึมที่มีประสิทธิภาพสูง สูงจริงครับ เป็นแชมป์ในตอนนี้ และเช่นเคยครับ เราจะมาเรียนรู้การปรับปรุงประสิทธิภาพของอัลกอริทึม ตลอดจนเฉลยการบ้านที่ค้างคามาจากบทความก่อนหน้า การแข่งขันเพื่อหาค่า Bernoulli Number ในบทความที่ผ่านมา ผมใช้อัลกอริทึมอย่างง่าย นั่นคือ Recursive เป็นหาค่า Bernoulli Number ไปจนถึง B(1000) ท่านสงสัยไหมครับว่าค่า Bernoulli Number ที่สูงที่สุดเท่าที่มนุษย์หาได้คือ B ลำดับที่เท่าไร ผมมีคำตอบครับ ลองดูที่ตารางนี้ดูครับ   ข้อมูลจาก http://en.wikipedia.org/wiki/Bernoulli_number อย่างที่เราทราบกับว่า more »

ก้าวแรก HPC #05: อัลกอริทึมอย่างง่ายและการปรับปรุงประสิทธิภาพ 0

ก้าวแรก HPC #05: อัลกอริทึมอย่างง่ายและการปรับปรุงประสิทธิภาพ

เกริ่นนำ บทความนี้เป็นบทความแรกตั้งแต่เริ่มทำเว็ปนี้ที่เขียนเป็นโปรแกรมจริงๆ  โปรแกรมที่เราจะเขียนกันนั้นก็มาจากทฤษฎีบทก่อนหน้าเรื่องการหาค่า Bernoulli Number นั่นเอง ซึ่งเป็นแบบง่ายที่สุด เป้าหมายที่แท้จริงของบทความนี้คงไม่ใช่อยู่ตัวอัลกอริทึมแต่อย่างใด เพราะไม่มีอะไรซับซ้อนมากมายตรงไปตรงมา แต่หากอยู่ที่อยู่มุมมองเรื่องของประสิทธิภาพ การเขียนโปรแกรมให้ทำงานได้ถูกต้องนั้นเป็นแค่เพียงขั้นแรกเท่านั้น ขั้นต่อไปเราต้องปรับปรุงประสิทธิภาพให้ดีด้วย ในบทความนี้จะใช้ Python เป็นตัวทำ Prototype เมื่อเรียบร้อยแล้วจึงไปใช้ C++ ในกระบวนการสุดท้าย ท่านจะได้เห็น workflow การทำงานจริง เชิญสดับ อัลกอริทึมในการหา Bernoulli Number อย่างง่าย Bernoulli Number ก็เฉกเช่นเดียวกับคณิตศาสตร์ทั่วไปคือมีวิธีหาค่าได้หลายวิธีที่อาจแตกต่างกันโดยสิ้นเชิง ท่านอาจนึกไม่ถึงว่าบางวิธีที่แปลกๆ จะสามารถหาค่าคำตอบถูกต้องได้ แต่ละวิธีนั้นก็มีข้อดีข้อเสียแตกต่างกันไป วิธีเหล่านั้นเราเรียกว่าอัลกอริทึม more »

ก้าวแรก HPC #04 : ตำนาน Note G 0

ก้าวแรก HPC #04 : ตำนาน Note G

เกริ่นนำ ในบทความชุดนี้ ผมจะนำเสนอแนวคิดพื้นฐานในการประยุกค์ HPC กับงาน Big Compute ที่ผ่านมา ผมแนะนำภาษารวมทั้ง Hardware ที่ใช้ มาถึงบทนี้เป็นเรื่องของโจทย์ทดลอง วันนี้เราจะมาคุยเรื่องนี้กัน อาศัยมันเป็นแกนกลาง เพื่อวิ่งเข้าหาเครื่องมือต่างๆ เชื่อว่าวิธีนี้จะเห็นภาพรวมได้ดีกว่า  ถ้าพร้อมแล้ว เรามาเข้าเรื่องกันเลย จากหัวเรื่องบทความนี้ Note G … Note G  มันคืออะไรกัน ใช่ tablet รุ่นใหม่รึเปล่า หรือจะเป็นเรื่องของดาวตลกในตำนานของไทย ไม่ใช่ทั้งนั้นครับ ผมขอทิ้งเป็นปริศนาไว้ก่อน อ่านไปเรื่อยๆ จะทราบเองครับ ในตอนนี้ขอตั้งคำถามก่อน more »

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

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

ก้าวแรก HPC #02 : C++ 0

ก้าวแรก HPC #02 : C++

เกริ่นนำ หนึ่งในภาษาที่นิยมใช้งานทางด้าน HPC นั่นคือ C++ แต่ก็ไม่ใช่ว่าเขาใช้กันเราก็เอาบ้าง มีบ่อยครั้งที่เขาใช้กันผมก็ไม่เอาด้วย ผมก็เลยมาขอแจงรายละเอียดให้ท่านอ่านกัน ถ้าท่านจริตเดียวกับผมก็มาใช้กันครับ แต่ถ้าคิดว่าไม่ใช่ อย่าฝืนนะครับตัวเลือกยังมีอีกมาก หน้าประวัติศาสตร์ภาษา C++ เป็นธรรมเนียมของผมก่อนจะคุยเรื่องอะไรต้องมีการการเท้าความไล่ประวัติกันก่อน อยากรู้ที่ไปก็ต้องรู้ที่มา จะได้เห็นภาพรวมของทั้งหมด C++ นั้นเกิดหลังจาก C มาประมาณ 10 ปี โดยผู้คิดค้นคือ Bjarne Stroustrup เป็นวิทยานิพนธ์ระดับปริญญาเอก โดยผสม C เข้ากับ Simula กลายเป็น “C with Classes” more »

ก้าวแรก HPC #01 : Python 2

ก้าวแรก HPC #01 : Python

เกริ่นนำ ก็อย่างที่กล่าวเอาไว้ในบทความก่อนหน้าว่าเราเน้นกันที่การเขียนโปรแกรม จะเขียนโปรแกรมก็ต้องเลือกภาษา ภาษาก็มีมากมายนับพันภาษา เป็นที่หนักใจสำหรับผมไม่น้อยที่จะคัดออกมาสองสามภาษาเพื่อเอามาใช้งาน ผมนั่งคิดนอนคิดอยู่นานทั้งวิเคราะห์และวิจัย เลยได้ข้อสรุปส่วนตัวมาว่า ภาษาแรกที่เหมาะกับงานทางวิทยาศาสตร์ ซึ่งเป็นแกนหลักของเว็ปนี้คือ Python ถ้าท่านไม่เคยใช้งาน Python ผมว่าคุ้มนะครับที่จะหยิบ Python ใส่ไว้ในกระเป๋าแห่งความรู้ของท่าน แต่ถ้าท่านยังลังเล ลองอ่านบทความนี้ดูก่อน แล้วค่อยสรุปอีกทีว่าดีพอหรือไม่ Python : ที่มาที่ไป ภาษา Python จัดอยู่ในหมวดภาษาทั่วไป ใช้ได้หลายวัตถุประสงค์ รองรับการเขียนโปรแกรมแบบ Imperative, Functional และ Object-Oriented ภาษานี้เกิดขึ้นมานานมากแล้วครับ ตั้งแต่ปี 1991  โดย Guido more »

ล้อมวงกันเข้ามา จะเทศนาเรื่อง High Performance Computing 2

ล้อมวงกันเข้ามา จะเทศนาเรื่อง High Performance Computing

กำหนดแนวทาง ที่ผ่านมาผมนำเสนอเรื่องราวเกี่ยวกับพื้นฐานของ Functional Programming ซึ่งเป็นฐานสำหรับเรื่องต่อๆ ไปที่ผมจะทยอยนำเสนอ แต่นี้เป็นต้นไปจะเริ่ม “เข้าเรื่อง” ในสิ่งที่ผมอยากจะนำเสนอ บทความนี้เป็นบทความเริ่มต้นของชุดบทความชุดใหม่ ผมคิดว่าเราน่าจะต้องมาคุยเรื่องทิศทางกันว่าผมจะนำเสนออะไรกันแน่ ท่านกับผมจะได้เข้าใจตรงกัน ผมขอเริ่มที่จุดนี้ก่อนครับ เว็ปนี้เป็นเว็ปการเขียนโปรแกรม เน้นการเขียนโปรแกรมเป็นแกนหลัก แต่ลำพังการเขียนโปรแกรมอย่างเดียวนั้นอาจจะไม่เพียงพอ อาจจะมีเรื่องเกี่ยวกับ Hardware ต่างๆ มาเกี่ยวข้องด้วย และทฤษฏีต่างๆ เท่าที่จำเป็น โปรแกรมที่เขียนในเว็ปนี้เอาให้ชัดเจนครับ ไม่ได้เน้นเรื่องการเขียนโปรแกรมทางธุรกิจ ไม่ได้เขียน Web Application ไม่ได้เน้น SQL ไม่ได้เขียนเกมส์ และคงไม่ได้พรรณนาถึงแนวคิด Object Oriented (อย่างที่เคยเคยเขียนไปเมื่อ more »