Tags:
Node Thumbnail

แนวโน้มฮาร์ดแวร์ที่กำลังต้องการการประมวลผลแบบขนานมากขึ้นเรื่อยๆ ในทุกวันนี้มีปัญหาอย่างหนึ่งคือเครื่องมีที่ใช้พัฒนานั้นยังแย่อยู่มาก และนักพัฒนาเองก็บ่นกันเสมอว่าการพัฒนาซอฟต์แวร์แบบขนานนั้นยากเกินไป ไมโครซอฟท์ก็ปล่อยภาษา Axum ที่ทำงานอยู่บน .NET Framework มาเป็นทางเลือกให้นักพัฒนากัน

ภาษา Axum นั้นโดยสรุปแล้วเป็นภาษาที่ฝังเอาโครงสร้างการส่งข้อมูลระหว่าง Thread ที่ในภาษานี้เรียกว่า Agent เข้าไว้เป็นส่วนหนึ่งของตัวภาษาทำให้การติดต่อระหว่างกันทำได้ค่อนข้างเป็นธรรมชาติกว่าการใช้ไลบรารีเสริมเช่นภาษาอื่นๆ

ภาษานี้ยังอยู่ใน MSDN Development Labs ผมยังไม่แน่ใจนักว่าไมโครซอฟท์เอาจริงกับภาษานี้มากแค่ไหน แต่โดยส่วนตัวแล้วผมมองว่าการขยายภาษาเดิมให้รองรับ Message Queue น่าจะทำได้เหมือนกัน และอาจจะเป็นธรรมชาติกับโปรแกรมเมอร์มากกว่า

ที่มา - Microsoft Axum

Get latest news from Blognone

Comments

By: cloverink
iPhoneAndroidUbuntuWindows
on 12 May 2009 - 17:11 #101124
cloverink's picture

แหล่มเลยย

By: btssky
ContributoriPhoneAndroidRed Hat
on 12 May 2009 - 17:33 #101128

น่าสนใจมากครับ

By: ezy on 12 May 2009 - 17:58 #101140

เดี๋ยวมันคงไปรวมตัวกับ C# กับ VB.net แหละมั้ง?

ezybzy.info blog

By: nuntawat
WriterAndroidWindowsIn Love
on 12 May 2009 - 18:56 #101151 Reply to:101140
nuntawat's picture

ผมว่าไม่ต้องไปรวม ไวยากรณ์และการเขียนก็ดูคล้าย C# มากแล้วครับ หุหุ ... กะว่าถ้างานวิจัยที่ทำเสร็จในระดับหนึ่งจะลองเอา Axum มาใช้ดู เพราะดูจะประยุกต์ได้กับงานที่ผมทำอยู่

By: NgOrXz
iPhoneAndroidWindows
on 12 May 2009 - 18:03 #101142
NgOrXz's picture

น่าสนใจอย่างที่สุด

©NgOrXz™®
แมนเชสเตอร์ยูไนเต็ด เก่งที่สุดในโลก

By: Mayarine on 12 May 2009 - 18:23 #101144

แม้มัลติคอร์วางตลาดมาหลายปีแล้วแต่โปรแกรมส่วนใหญ่ก็ยังใช้singlecore

สงสัยต้องรอCpu6คอร์วางขายในตลาดmainsteamก่อนมั้ง โปรแกรมที่รองรับมัลติคอร์ถึงจะแพร่หลาย

By: m3rlinez on 12 May 2009 - 19:56 #101162

จริงๆแล้วตอนนี้ก็มีความพยายามทำ Microsoft Parallel Extensions to .NET Framework 3.5 นะครับ ลองดูโค้ดตัวอย่างง่ายๆ (ใน C#)

System.Threading.Parallel.For(0, maxNum + 1, x => IsPrime(x))

เป็นการกระจายการหา prime ในช่วง 0 ถึง maxNum

ผมว่าแค่นี้น่าจะเพียงพอกับความต้องการ Dev ทั่วไป o__o' เพราะเท่าที่ลองพยายามไปดู Parallel Algorithm มารู้สึกว่าเข้าใจยากไปหน่อย แล้วไม่รู้จะเอามาใช้กับปัญหาทั่วๆไปที่ไม่ใช่ scientific ตอนไหน (http://www.cs.cmu.edu/~scandal/nesl/algorithms.html)

By: kittipat
ContributorAndroidUbuntu
on 13 May 2009 - 05:05 #101204 Reply to:101162

เอ่อ แบบนั้นนี่ OpenMP ง่ายกว่าเยอะนะเนี่ย

Parallel algorithm จริงๆมันก็คือ divide and conquer นะ แล้วก็จริงๆแล้วอะไรก็ตามที่มันต้องวนซ้ำก็ทำ parallel ได้แทบทั้งหมดนะ จะได้มากน้อยแค่ไหนก็อีกเรื่อง อย่างตรวจคำผิดนี่ก็ทำ parallel ได้

By: m3rlinez on 14 May 2009 - 02:52 #101779 Reply to:101204

จริงๆแล้วมีปัญหาวนซ้ำ "จำนวนมาก" ที่ทำ parallel ไม่ได้ครับ โดยเฉพาะพวกการวนซ้ำที่ต้องอาศัยผลลัพธ์จากสเตปก่อนหน้า เช่นพวกการคำนวณซ้ำๆเพื่อหาค่าของ Pi

ส่วน OpenMP ไม่เคยลอง ถ้าเป็นไปได้อยากให้ลองเอาโค้ดส่วนที่เป็นการแยกงาน maxNum งานออกไปทำให้ดูหน่อย ผมรู้สึกว่าไอ่ Parallel Extension ข้างบนทำได้ง่ายมากแล้ว ถ้ามีง่ายกว่านี้อีกคงน่าตื่นเต้นน่าดู o__o''

By: kittipat
ContributorAndroidUbuntu
on 14 May 2009 - 06:29 #101796 Reply to:101779

จริงอยู่ว่าปัญหาจำนวนมากทำ parallel (ยัง)ไม่ได้ ดูแล้วมืดมนหนทางไม่มี แต่ก็อาจจะมีอัจฉริยะซักคนในอนาคตแก้ได้ (เหมือนปัญหา P=NP หรือเปล่า)

โปรแกรมข้างบนแบบ OpenMP น่าจะประมาณนี้ ถ้าตีความ code ไม่ผิด และ IsPrime เป็น function ธรรมดา (ออกตัวก่อนว่าไม่เคยเขียนเอง เคยเห็นแต่คนเอา source มา compile กันให้ดูจะๆ)

pragma omp parallel for

for (x = 0; x < N; x++)
isPrime(x);

จริงๆก็ไม่ต่างกับข้างบนเท่าไหร่ ดูจะยาวกว่าด้วยซ้ำ แต่ว่าใช้ construction ที่คุ้นเคย ไม่ต้องมานั่งแปลง code แค่แปะ #pragma ไปก็เรียบร้อย

แต่เวลา run OpenMP นี่ถ้าจำไม่ผิดต้องใส่ parameter เอง ลำบากก็ตรงนั้นแหละ

อันนี้ของแถม PRIMES is in P ไปเจอมาระหว่างหาข้อมูลมาตอบ (ยังไม่ได้อ่าน แต่น่าสนใจดี)

ป.ล. เคยทำโปรแกรม parallel เกือบปีเลยรู้อะไรมาบ้างนิดหน่อย (senior project, CP31 :)

By: m3rlinez on 14 May 2009 - 13:42 #101910 Reply to:101796

ชัดเจนครับ ขอบคุณครับ :)

By: wiennat
Writer
on 13 May 2009 - 22:46 #101585 Reply to:101162

เคสทั่วไปก็อย่างเช่น Rip หนังจาก DVD แล้วแปลงเป็น avi นี่มันเป็น scientific รึเปล่าอะ

onedd.net


onedd.net

By: m3rlinez on 14 May 2009 - 03:20 #101782 Reply to:101585

ไม่รู้ว่างาน Encoding จริงๆแล้วกลไกมันทำยังไง แต่ถ้ามันแบ่งส่วนได้ชัดเจน เช่น ให้ core นึง encode ครึ่งเรื่องแรก อีก core ทำครึ่งหลัง มันก็เป็นงานง่ายๆที่ การแตก Thread ออกมาแยกกันทำ หรือการใช้ extension ง่ายๆอย่าง Parallel.for ก็ทำให้เร็วขึ้น(มาก)ได้แล้ว ถ้าเป็นตามนี้ผมก็มองว่ามัน - ไม่เป็น scientific

ส่วนปัญหาที่มันหั่นไปทำไม่ได้ง่ายๆแบบข้างบน (หรือที่ผมเรียกว่า scientific) - ผมก็พยายามทำความเข้าใจอยู่ว่าจะเอา parallel algorithm มาทำให้เร็วขึ้นได้อย่างไร? ซึ่งจากการเข้าไปดู library แห่งหนึ่ง (ตามลิงค์ด้านบน) ก็พบว่าล้วนแล้วแต่เป็นปัญหา "แปลกๆ" ทั้งสิ้น

ผมจึงคิดว่า ภาษาใหม่ที่จัดการกับกลุ่มปัญหาดังกล่าวได้ มันไม่น่าจะมีผลอะไรกับ Dev(ส่วนใหญ่) เท่าไหร่ extension ของภาษาเหมือนที่คุณ lew บอกน่าจะอนาคตสดใสกว่า

ปล. ใครตอบคนสุดท้ายชนะนะครับพี่วีน :P

By: wiennat
Writer
on 14 May 2009 - 11:52 #101870 Reply to:101782

มันทำไม่ง่ายขนาดนั้นอะ เพราะว่ารอยต่อระหว่างครึ่งแรกกับครึ่งหลังมันก็มีผลถูกมั้ยล่ะ

สรุปว่ายังงอยู่ว่า scientific กับทั่วๆไปในทีนี้มีนิยามหรือมีข้อแตกต่างกันอย่างไร

onedd.net


onedd.net

By: m3rlinez on 14 May 2009 - 13:29 #101906 Reply to:101870

ผมคิดว่ามันคงแยกได้ไม่เด็ดขาดหรอกครับ เหมือนกับ "งานวิจัย" กับ "โปรแกรมประยุกต์" ของที่อยู่ตรงขอบก็มีเยอะ :)

เรื่อง scientific ผมก็ีิคิดว่าขอบมันไ่ม่ชัด แต่มันมักจะ
1. เกี่ยวข้องกับปัญหาวิจัยที่ยัง active อยู่ (ยังแก้ไม่ได้)
2. มีการนำไปใช้งานน้อย

By: wiennat
Writer
on 14 May 2009 - 15:13 #101930 Reply to:101906

ลองนึกถึงว่าทำ sort แบบขนานดูสิ มันจะเร็วขึ้นมั้ยอะ merge sort ก็ได้ คิดง่ายดี

onedd.net


onedd.net

By: m3rlinez on 14 May 2009 - 18:56 #101980 Reply to:101930

มันก็คงเร็วขึ้นครับ จริงๆแล้วมีอัลกอริทึมที่ออกแบบมาเพื่อทำ sort แบบขนานโดยเฉพาะด้วย แต่ผมคิดว่าเรื่องดังกล่าวมันเป็นเรื่อง scientific เวลาเราทำ Array.Sort กันปกติก็ไม่ได้สนใจว่ากลไกข้างล่างมันเป็นยังไง รู้แค่ logic สำหรับการ compare แล้วก็ complexity ของ sort ที่ framework มัน implement มาแล้วก็พอ

By: wiennat
Writer
on 16 May 2009 - 00:13 #102398 Reply to:101980

สงสัย Scientific เราจะไม่เท่ากัน ฮะๆๆๆ

onedd.net


onedd.net

By: paepod on 12 May 2009 - 20:23 #101168

คิดตลกๆ ขอแบบว่าแบบปกติ(ปัจจุบัน)แต่ว่า .NET Framwork ทำเป็น Parallel ให้อัตโนมัติ Microsoft จัดมา (ขำๆ)

By: b98se
AndroidWindowsIn Love
on 12 May 2009 - 22:57 #101178 Reply to:101168
b98se's picture

ทำตัวเป็น Framwork ทั้งที ความจริงเรื่องพันนี้น่าจะช่วยเราจัดการด้วยน่ะ หรือว่ามันลึกซึ้งกว่านั้น

b98se.in.th : โค้ดมันส์ สคริปมึน โปรแกรมมั่ว

By: kittipat
ContributorAndroidUbuntu
on 13 May 2009 - 05:16 #101205

ดูก็น่าจะง่ายกว่า MPI นะครับ แต่ว่าขอแบบ OpenMP ก่อนน่าจะดีกว่านะ ถึง OpenMP มันจะไม่ได้รองรับการ parallel แบบพิสดารมาก แต่งานบางอย่างแค่เอา OpenMP ยัดเข้าไปก็เร็วขึ้นผิดหูผิดตาแล้ว

By: teedech
WriterWindows
on 14 May 2009 - 17:02 #101944
teedech's picture

ผมเคยเห็นมีคนพยายามพัฒนา library บน .NET ที่มีความสามารถด้าน Concurrency สูงๆ ชื่อ Retlang ซึ่งได้แนวคิดมาจากภาษา Erlang (ที่เคยเป็นหัวข้อในงานสัมมนาของ Blognone มาแล้ว)----------------------------
VB.NET Programming