Tags:

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

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

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

ที่มา - Microsoft Axum

Comments

By: cloverink
iPhoneAndroidUbuntu
cloverink's blog
on 12/05/09 16:11 #101124 toggle
cloverink's picture

แหล่มเลยย


i = NulL

By: btssky
ContributoriPhoneAndroidUbuntu
btssky's blog
on 12/05/09 16:33 #101128 toggle
btssky's picture

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

By: ezy
ezy's blog
on 12/05/09 16:58 #101140 toggle
ezy's picture

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

ezybzy.info blog


ezybzy.info blog

By: nuntawat
WriterAndroidWindows
nuntawat's blog
on 12/05/09 17:56 #101151 Reply to:101140 toggle
nuntawat's picture

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

By: NgOrXz
iPhoneAndroidWindows
NgOrXz's blog
on 12/05/09 17:03 #101142 toggle
NgOrXz's picture

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

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


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

By: Mayarine
Mayarine's blog
on 12/05/09 17:23 #101144 toggle
Mayarine's picture

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

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

By: m3rlinez
m3rlinez's blog
on 12/05/09 18:56 #101162 toggle
m3rlinez's picture

จริงๆแล้วตอนนี้ก็มีความพยายามทำ 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
kittipat's blog
on 13/05/09 4:05 #101204 Reply to:101162 toggle
kittipat's picture

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

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


@kittipatv

http://kittipatv.wordpress.com

By: m3rlinez
m3rlinez's blog
on 14/05/09 1:52 #101779 Reply to:101204 toggle
m3rlinez's picture

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

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

By: kittipat
ContributorAndroidUbuntu
kittipat's blog
on 14/05/09 5:29 #101796 Reply to:101779 toggle
kittipat's picture

จริงอยู่ว่าปัญหาจำนวนมากทำ 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 :)


@kittipatv

http://kittipatv.wordpress.com

By: m3rlinez
m3rlinez's blog
on 14/05/09 12:42 #101910 Reply to:101796 toggle
m3rlinez's picture

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

By: wiennat
Writer
wiennat's blog
on 13/05/09 21:46 #101585 Reply to:101162 toggle
wiennat's picture

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

onedd.net


onedd.net

By: m3rlinez
m3rlinez's blog
on 14/05/09 2:20 #101782 Reply to:101585 toggle
m3rlinez's picture

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

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

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

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

By: wiennat
Writer
wiennat's blog
on 14/05/09 10:52 #101870 Reply to:101782 toggle
wiennat's picture

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

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

onedd.net


onedd.net

By: m3rlinez
m3rlinez's blog
on 14/05/09 12:29 #101906 Reply to:101870 toggle
m3rlinez's picture

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

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

By: wiennat
Writer
wiennat's blog
on 14/05/09 14:13 #101930 Reply to:101906 toggle
wiennat's picture

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

onedd.net


onedd.net

By: m3rlinez
m3rlinez's blog
on 14/05/09 17:56 #101980 Reply to:101930 toggle
m3rlinez's picture

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

By: wiennat
Writer
wiennat's blog
on 15/05/09 23:13 #102398 Reply to:101980 toggle
wiennat's picture

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

onedd.net


onedd.net

By: paepod
paepod's blog
on 12/05/09 19:23 #101168 toggle
paepod's picture

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

By: b98se
AndroidWindows
b98se's blog
on 12/05/09 21:57 #101178 Reply to:101168 toggle
b98se's picture

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

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

By: kittipat
ContributorAndroidUbuntu
kittipat's blog
on 13/05/09 4:16 #101205 toggle
kittipat's picture

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


@kittipatv

http://kittipatv.wordpress.com

By: teedech
WriterWindows Phone
teedech's blog
on 14/05/09 16:02 #101944 toggle
teedech's picture

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


VB.NET Programming