อีกไม่นาน CPU ที่มีเพียง core เดียวก็จะหยุดวางจำหน่าย -- Multi-core CPU กำลังจะยึดครองโลก! -- เหตุผลแค่นี้ก็เพียงพอแล้วที่จะทำให้โปรแกรมเมอร์ต้องหันมาเขียนโปรแกรมเชิงขนานกันอย่างจริงจัง
เมื่อวันพฤหัส-ศุกร์ที่ผ่านมา (19-20 มีนาคม) มีโอกาสได้เข้าร่วม โครงการฝึกอบรมการใช้เทคโนโลยีมัลติคอร์ (Intel Multi-core Programming Workshop) จัดโดย คณะวิทยาศาสตร์และเทคโนโลยี มหาวิทยาลัยธรรมศาสตร์ และอินเทล เนื้อหาอบรมเน้นสอนการเขียนโปรแกรมเชิงขนานเบื้องต้น หลักการเปลี่ยนโปรแกรมเก่าให้ทำงานแบบเชิงขนาน ไปจนถึงการวิเคราะห์และปรับปรุงประสิทธิภาพการทำงานของโปรแกรม
อ.ดร.วรวรรณ มะเริงสิทธิ์ ขณะบรรยายเรื่อง Windows Thread
การอบรมเป็นไปแบบสบายๆ ใช้ความรู้พื้นฐานด้าน Computer Architecture และ Operating Systems แบบไม่ลงลึกมาก; ใช้ภาษา C++ โปรแกรมหลักที่ใช้เขียนคือ Microsoft Visual Studio 2008 และได้ทดลองใช้อะไรใหม่ๆ (สำหรับคนเขียนนะคะ - -") หลายอย่าง
API ที่ช่วยให้การเขียนโปรแกรมเชิงขนานเป็นเรื่องง่ายพอๆ กับปอกกล้วยเข้าปาก, ขณะนี้รองรับภาษา C/C++, Fortran และทำงานได้ในหลาย platform
ตัวจริงของ OpenMP เป็นคำสั่งในรูปแบบ compiler directive ที่ใช้ร่วมกับ environment variables ตัวอย่างเช่น
(ยกตัวอย่างของภาษา C/C++ ซึ่งจะขึ้นต้น directive ด้วย #pragma omp)
#pragma omp parallel
{
printf("Hello, Blognone!\n");
printf("Hello again!\n");
}
parallel contruct นั้นเอาไว้ระบุส่วนของโค้ดที่จะให้แต่ละ thread ที่เปิดทำเหมือนๆ กัน
ตอน compile, compiler จะอ่านค่าจาก environment variables ชื่อ OMP_NUM_THREADS ว่าต้องการให้เปิดกี่ thread และคลี่โค้ดให้กลายเป็นแต่ละ thread ทำโค้ดในบล็อก parallel เช่น OMP_NUM_THREADS=2 จะได้ 2 thread ที่ทำคำสั่งตั้งแต่บรรทัดที่ 3-4
#pragma omp parallel for
for(i=0;i<10;i++)
printf("Hello, Blognone! #%d\n", i);
for construct เอาไว้กระจายงานใน for ให้แต่ละ thread ทำเท่าๆ กัน สมมติเช่น OMP_NUM_THREADS=2
จะได้ว่า thread แรกทำรอบที่ i=0-4, อีก thread ทำรอบที่ i=5-9 เป็นต้น
อยากลองใช้แล้ว? เชิญเข้าไปที่
ชุดพัฒนาโปรแกรมเชิงขนานของอินเทล มีสำหรับหลาย platform ทั้ง Windows, MacOS, Linux -- ได้ยินว่าเวอร์ชันสำหรับ Linux นั้นฟรี (แต่ใช้ยากมากกก); แน่นอนว่าเวอร์ชันที่ได้ลองใช้คือเวอร์ชันสำหรับ Windows, เวอร์ชันนี้ฝังตัวกับ VS 2008 ได้แนบเนียนมาก (ราวกับเป็น Add-on) <-- จริงๆ ก็เว่อร์ไปนิดค่ะ ที่เนียนๆ เห็นจะมีแต่ตัว Intel C++ Compiler แหะๆ
สำหรับการอบรมนี้ได้ใช้แค่ 4 ตัว
โดยส่วนตัวรู้สึกว่าเนื้อหาส่วนนี้น่าสนใจที่สุดค่ะ ^^ (แอบรู้สึกเหมือนได้เปิดหูเปิดตา)
นอกจาก tools ชุดนี้ อินเทลกำลังจะออก Intel Parallel Studio ที่เน้นสำหรับช่วยมือใหม่ให้เขียนโปรแกรมเชิงขนานได้ง่ายๆ (เข้าใจว่าเป็น Wizard กดๆ เอา) มี beta version ให้โหลดมาลองใช้ที่ http://software.intel.com/en-us/intel-sdp-home/
อันนี้คงไม่พูดยาว เป็น API สำหรับเขียน multi-thread บน Windows, การใช้ก็คล้ายๆ กับ pthread มาก
เขียนล่อให้เข้ามาอ่านเฉยๆ ค่ะ ความจริงหัวข้อนี้ไม่ได้อบรม 555 (เพราะผลโหวตแพ้ Win32 API ..ฮือๆ)
โครงการ Accelerate Global Champion ให้ส่ง project ที่พัฒนาโปรแกรมแบบเชิงขนานประกวดจากทั่วโลก ชิงเงินสนับสนุนทำ project ถึง $5000 และมีรางวัลรายเดือนเป็นเน็ตบุ๊ค สนใจอ่านรายละเอียดเพิ่มเติมได้ที่ http://intel-accelerate.com/eng/
คุณจิรวิทย์ แม้ประสาท ผู้จัดการฝ่ายกลยุทธ์ บริษัทอินเทล ขณะแจ้งข่าวดี
Comments
ชอบ OMP ครับ ง่ายและเร็ว หุหุ
ใช้vtuneวัดแล้วเห็นความแตกต่างชัดเจน
โอ้ นานๆ ทีจะมีรายงานจากสุภาพสตรี ;)
_________________pawinpawin | blog
พอดีใช้โปรแกรม เบิร์นเครื่องที่ซื้อมาใหม่ มันทำงานคอร์เดียวซะงั้น - -"
ก็คิดอยู่ น่าจะมีโปรแกรม ทำงาน หลายๆคอร์มาให้แน่ๆ
อิอิ
TAXZe.com|[T]echnology [A]dvise [X]-Ray [Z]ero [E]ffect
กำลังรออยู่เลยครับ ต่อไป ผมจาได้เอามาใช้ใน project ผมให้มันคำนวนได้เร็วขึ้น
กำลังสนใจอยากศึกษาอยู่ คิดว่ามันเริ่มจะจำเป็นแล้ว
นามสกุลคุณจิรวิทย์ผิดหรือเปล่าครับ? น่าจะเป็น "จิรวิทย์ แม้นประสาท"
ไม่แน่ใจเหมือนกันค่ะ ในประกาศนียบัตรเห็นนามสกุลภาษาอังกฤษสะกดเป็น MAE เลยเขียนเป็น "แม้ประสาท"
..รอ @lewcpe มาตอบค่ะ ^^"
ยังไม่ค่อยเข้าใจตรงนี้เท่าไหร่ครับ
Oakyman.com
ก็คือ ทุก thread ที่เปิดขึ้นมา จะทำโค้ดชุดที่อยู่ต่อจากบรรทัด parallel เหมือนกันหมดน่ะค่ะ :)
ส่วนคำว่า construct นั้นหมายถึง คำว่า parallel เป็น keyword ชนิด construct เฉยๆ (for ก็ด้วย)
ถ้าทุก Thread ทำโค้ดตรงนั้นเหมือนกันหมด
มันจะมีประโยชน์อะไรเหรอครับ?
Oakyman.com
เผอิญตัวอย่างตรงนั้นคงต้องการแสดงแบบ simple สุดๆกระมังครับ
ประโยชน์ของมันอย่างเช่น thread ที่โค้ดเดียวกัน แต่ parameter ต่างกันครับ ประมาณ single code แต่ multiple data เช่น 2 thread เรนเดอร์ animation ความยาว 100 เฟรม ก็แบ่งกันคนละ 50 เฟรม โดยโค้ดเรนเดอร์เหมือนกันทุกประการ ตามอุดมคติ (ไม่มี overhead/bottleneck/latency) ก็ควรจะเร็วขึ้น 2 เท่า
My Blog / hi5 / Facebook / Follow me
My Blog
ใช่เลยค่ะ ตามที่คุณ @javaboom อธิบายทุกประการ ^^"
ขออภัยที่ยกตัวอย่างสิ้นคิดไปหน่อย dTvTb
พอดีว่าถ้ายกตัวอย่างที่ในแต่ละ thread มีตัวแปร local จะต้องพูดเรื่อง private clause
หรือถ้าให้แต่ละ thread ต่างก็บวกลบเลขกับตัวแปรชุดเดียวกัน (shared variable) ก็จะต้องขยายความเรื่อง lock ..เดี๋ยวจะยาวอะค่ะ
อุ้ย! ขอประทานโทษอย่างสูงครับ ผมไม่ได้จะว่าอย่างนั้นนะครับคุณ KaewGB ไม่ใช่ตัวอย่างสิ้นคิดเลยครับ ถ้าผมเป็นวิทยากรผมก็คงโชว์ตัวอย่างนี้เป็นตัวอย่างแรกครับ ผมแค่หมายถึงตัวอย่างง่ายสุดๆจะได้อธิบาย concept ง่ายๆ แต่ถ้าจะเอาไปใช้งานจริงๆคงต้องไปศึกษาเองตามรายบุคคลครับ
ใช่ครับ synchronization เป็นเรื่องยาว(และน่าปวดหัว) ผมรอผลงานคุณ KaewGB เขียนเรื่อง synchronization กับ OpenMP อยู่นะครับ :)
My Blog / hi5 / Facebook / Follow me
My Blog
ง่า.. เปล่าน้อยใจนะคะ ที่ว่าตัวอย่างสิ้นคิดไปหน่อยนี่คือความเห็นตัวเองอ่ะค่ะ 555
ตอนพิมพ์ก็ไม่รู้สึก พอมีคนมาทักแล้วเพิ่งรู้สึกว่าไม่ค่อยสื่อเท่าไหร่ (เป็นโรคเออออตามคนอื่นง่าย)
ถ้าสนใจเรื่อง sync. กันใน OpenMP เดี๋ยวไว้อีกสักพักจะมาขยายต่อค่ะ แต่ก็รู้ไม่มากเท่าไหร่นะคะ ตอนอบรมไม่ได้ลงลึก (เรียนแค่ atomic, critical section)
คุ้นๆนะ เหมือนจะเคยเรียน
NERD GOD
คือ งงอะ ครับ
-"แน่นอนว่าเวอร์ชันที่ได้ลองใช้คือเวอร์ชันสำหรับ Windows, เวอร์ชันนี้ฝังตัวกับ VS 2008 ได้แนบเนียนมาก (ราวกับเป็น Add-on)
"
-"Intel C++ Compiler - ใช้ compile โค้ดที่เรียกใช้ OpenMP เนื่องจาก compiler ของ VS 2008 นั้นยังไม่รองรับ (ใช้ flag /Qopenmp) "
สรุปเป็น add-on ที่เนียนมากจนยังไม่รองรับเหรอคับ
หมายถึง compiler ของ VS 2008 ยังไม่สามารถ compile OpenMP ได้น่ะค่ะ ^^"
คือเขียน OpenMP ใน VS 2008 แต่เลือกใช้ Intel C++ Compiler แทน compiler ของ VS 2008 อะค่ะ
//แก้เป็น "ยังไม่รองรับ OpenMP" แล้วค่ะ เพื่อความเคลียร์
จริงๆ vs2008 รองรับนะครับ ^^
openmp 2.0 ผ่าน flag /openmp แต่ต้องเป็นเวอร์ชัน professional ขึ้นไป
เอ.. มันจะเหมือนกับ System.Threading ของ .NET รึเปล่าครับ
ผมเขียนด้วย C# อาจจะไม่เข้าใจคนใช้ C++ เท่าไหร่นัก - -"
OpenMP มันจะง่ายไปมั้ยเนี่ย... :P
โห น่าเรียนมากๆ
OpenMP ดูง่ายดีแฮะ แทรกไปบรรทัดเดียวจบละ
จะได้ฤกษ์ดังซักทีหรือยังน้อ OpenMP เห็นทั้งผลักทั้งดันทั้งเข็นกันหลายเจ้าเหลือเกิน คงเป็นเพราะหาอะไรดีกว่านี้ไม่ได้จริงๆ
จริงๆ อยากขยายความเรื่อง Intel (R) Software Development Products อีกหน่อยอะค่ะ เพราะน่าสนใจดี เป็นแนวๆ วิเคราะห์จากกราฟ ติดตรงที่ screenshot ที่ capture ไว้ตอนอบรมหายเกลี้ยงเนื่องจากก๊อบไฟล์ผิดพลาด เสียดายจัง (ตอนนี้เพิ่งมานึกได้ว่าเอารูปจากสไลด์ก็ได้ แต่ก็ไม่ว่างเขียนซะแล้ว)
ทำให้ผมนึกไปถึงความเป็นรากฐานที่แน่นและมั่นคงของ C/C++
มันก็ยังดีอยู่วันยังค่ำ แฮะๆๆ
ชื่อจริงๆคือ Intel® VTune™ Amplifier ไม่ใช่เหรอครับ ไม่ใช่ Analyzer
ตามเวป http://software.intel.com/en-us/articles/intel-vtune-amplifier-xe/