คำถามติดแท็ก parallel-processing

การประมวลผลแบบขนานนั้นตรงกันข้ามอย่างชัดเจนกับการประมวลผลพร้อมกันซึ่งรับประกันได้ว่าจะเริ่ม / ดำเนินการ / เสร็จสิ้นงานระดับเธรดและ / หรือระดับคำสั่งทั้งหมดที่ดำเนินการในรูปแบบคู่ขนานและให้การรับประกันเสร็จสิ้นของเส้นทางรหัสที่ดำเนินการพร้อมกัน

13
วิธีการสื่อสารความแตกต่างระหว่างการเขียนโปรแกรมไม่ตรงกันและขนาน?
หลายแพลตฟอร์มส่งเสริมการทำงานแบบอะซิงโครนัสและการขนานซึ่งเป็นวิธีการปรับปรุงการตอบสนอง ฉันเข้าใจความแตกต่างโดยทั่วไป แต่มักจะพบว่ามันยากที่จะพูดออกมาในใจของฉันเองเช่นเดียวกับคนอื่น ๆ ฉันเป็นโปรแกรมเมอร์ทำงานและใช้ async & callbacks ค่อนข้างบ่อย ความเท่าเทียมนั้นให้ความรู้สึกแปลกใหม่ แต่ฉันรู้สึกว่าพวกเขาสับสนง่ายโดยเฉพาะในระดับการออกแบบภาษา จะรักคำอธิบายที่ชัดเจนว่าพวกเขาเกี่ยวข้อง (หรือไม่) และชั้นเรียนของโปรแกรมที่แต่ละโปรแกรมที่ดีที่สุด

5
เหตุใดฉันจึงควรเลือก 'await Task whenAll' มากกว่าการรอหลายครั้ง
ในกรณีที่ฉันไม่สนใจลำดับการทำงานให้เสร็จและเพียงแค่ต้องการให้ทุกอย่างเสร็จสมบูรณ์ฉันควรใช้await Task.WhenAllแทนหลาย ๆ ตัวawaitหรือไม่ เช่นDoWork2ด้านล่างเป็นวิธีที่ต้องการDoWork1(และทำไม?): using System; using System.Threading.Tasks; namespace ConsoleApp { class Program { static async Task<string> DoTaskAsync(string name, int timeout) { var start = DateTime.Now; Console.WriteLine("Enter {0}, {1}", name, timeout); await Task.Delay(timeout); Console.WriteLine("Exit {0}, {1}", name, (DateTime.Now - start).TotalMilliseconds); return name; } static async Task DoWork1() { var …

8
Powershell สามารถเรียกใช้คำสั่งแบบขนานได้หรือไม่
ฉันมีสคริปต์ powershell เพื่อทำการประมวลผลแบบแบตช์กับรูปภาพจำนวนมากและฉันต้องการทำการประมวลผลแบบขนาน ดูเหมือนว่า Powershell จะมีตัวเลือกการประมวลผลเบื้องหลังเช่น start-job, wait-job ฯลฯ แต่ทรัพยากรที่ดีเพียงอย่างเดียวที่ฉันพบสำหรับการทำงานคู่ขนานคือการเขียนข้อความของสคริปต์และเรียกใช้สิ่งเหล่านั้น ( PowerShell Multithreading ) ตามหลักการแล้วฉันต้องการบางสิ่งที่คล้ายกับ foreach แบบขนานใน. net 4 สิ่งที่ดูเหมือนจะไม่สวยเช่น: foreach-parallel -threads 4 ($file in (Get-ChildItem $dir)) { .. Do Work } บางทีฉันอาจจะดีกว่าแค่ทิ้งตัวลงไปที่ c # ...

4
วัตถุหน่วยความจำที่ใช้ร่วมกันในการประมวลผลหลายขั้นตอน
สมมติว่าฉันมีอาร์เรย์จำนวนมากในหน่วยความจำฉันมีฟังก์ชันfuncที่รับอาร์เรย์ยักษ์นี้เป็นอินพุต (พร้อมกับพารามิเตอร์อื่น ๆ ) funcด้วยพารามิเตอร์ที่แตกต่างกันสามารถทำงานแบบขนานได้ ตัวอย่างเช่น: def func(arr, param): # do stuff to arr, param # build array arr pool = Pool(processes = 6) results = [pool.apply_async(func, [arr, param]) for param in all_params] output = [res.get() for res in results] ถ้าฉันใช้ไลบรารีการประมวลผลหลายขั้นตอนอาร์เรย์ขนาดยักษ์นั้นจะถูกคัดลอกหลายครั้งในกระบวนการต่างๆ มีวิธีที่จะให้กระบวนการต่างๆใช้อาร์เรย์เดียวกันได้หรือไม่? วัตถุอาร์เรย์นี้เป็นแบบอ่านอย่างเดียวและจะไม่มีการแก้ไข จะมีอะไรซับซ้อนไปกว่านั้นถ้า arr ไม่ใช่อาร์เรย์ แต่เป็นวัตถุ python โดยพลการมีวิธีแบ่งปันหรือไม่? [แก้ไข] …

1
เธรด Haskell ล้นแม้จะใช้หน่วยความจำทั้งหมดเพียง 22Mb?
ฉันกำลังพยายามขนานเรย์ - เทรเซอร์ ซึ่งหมายความว่าฉันมีรายการการคำนวณขนาดเล็กที่ยาวมาก โปรแกรมวานิลลาทำงานบนฉากเฉพาะใน 67.98 วินาทีและ 13 MB ของการใช้หน่วยความจำทั้งหมดและผลผลิต 99.2% ในความพยายามครั้งแรกของฉันฉันใช้กลยุทธ์คู่ขนานที่parBufferมีขนาดบัฟเฟอร์ 50 ฉันเลือกparBufferเพราะมันเดินผ่านรายการได้เร็วที่สุดเท่าที่ประกายไฟจะหมดและไม่บังคับกระดูกสันหลังของรายการเช่นparListซึ่งจะใช้หน่วยความจำมาก เนื่องจากรายการยาวมาก ด้วย-N2มันทำงานในเวลา 100.46 วินาทีและ 14 MB ของการใช้หน่วยความจำทั้งหมดและผลผลิต 97.8% ข้อมูลจุดประกายคือ:SPARKS: 480000 (476469 converted, 0 overflowed, 0 dud, 161 GC'd, 3370 fizzled) ประกายไฟที่มอดลงในสัดส่วนที่มากบ่งบอกว่าความละเอียดของประกายไฟมีขนาดเล็กเกินไปดังนั้นต่อไปฉันจึงลองใช้กลยุทธ์parListChunkซึ่งแยกรายการออกเป็นชิ้น ๆ และสร้างประกายสำหรับแต่ละชิ้น ฉันได้ผลลัพธ์ที่ดีที่สุดด้วยขนาดของ0.25 * imageWidth. โปรแกรมทำงานใน 93.43 วินาทีและ 236 MB ของการใช้หน่วยความจำทั้งหมดและประสิทธิภาพการผลิต 97.3% ข้อมูลจุดประกายคือ: SPARKS: 2400 …

5
แบ่งขนานไปข้างหน้า?
ฉันจะแยกออกจากเส้นขนานสำหรับลูปได้อย่างไร ฉันมีข้อความที่ค่อนข้างซับซ้อนซึ่งมีลักษณะดังต่อไปนี้: Parallel.ForEach<ColorIndexHolder>(ColorIndex.AsEnumerable(), new Action<ColorIndexHolder>((ColorIndexHolder Element) => { if (Element.StartIndex <= I && Element.StartIndex + Element.Length >= I) { Found = true; break; } })); การใช้คลาสคู่ขนานฉันสามารถเพิ่มประสิทธิภาพกระบวนการนี้ได้ อย่างไรก็ตาม; ฉันคิดไม่ออกว่าจะทำลายลูปขนานได้อย่างไร? break;คำสั่งพ่นไวยากรณ์ผิดพลาดต่อไปนี้: ไม่มีการปิดล้อมลูปที่จะทำลายหรือดำเนินการต่อ

7
งบล็อคแพงแค่ไหน?
ฉันได้ทดลองกับการประมวลผลแบบหลายเธรดและการประมวลผลแบบขนานและฉันต้องการตัวนับเพื่อทำการนับพื้นฐานและการวิเคราะห์ทางสถิติเกี่ยวกับความเร็วของการประมวลผล เพื่อหลีกเลี่ยงปัญหาในการใช้คลาสของฉันพร้อมกันฉันได้ใช้คำสั่งล็อคกับตัวแปรส่วนตัวในคลาสของฉัน: private object mutex = new object(); public void Count(int amount) { lock(mutex) { done += amount; } } แต่ฉันสงสัยว่า ... การล็อคตัวแปรแพงแค่ไหน? ผลเสียต่อประสิทธิภาพคืออะไร?

4
อัลกอริทึมการจัดเรียง MapReduce ทำงานอย่างไร
หนึ่งในตัวอย่างที่หลักที่ใช้ในการแสดงให้เห็นถึงพลังของ MapReduce เป็นมาตรฐาน Terasort ฉันมีปัญหาในการทำความเข้าใจพื้นฐานของอัลกอริทึมการเรียงลำดับที่ใช้ในสภาพแวดล้อม MapReduce สำหรับฉันการเรียงลำดับเพียงแค่การกำหนดตำแหน่งสัมพัทธ์ขององค์ประกอบที่สัมพันธ์กับองค์ประกอบอื่น ๆ ทั้งหมด การเรียงลำดับจึงเกี่ยวข้องกับการเปรียบเทียบ "ทุกอย่าง" กับ "ทุกอย่าง" อัลกอริธึมการเรียงลำดับโดยเฉลี่ยของคุณ (ด่วนฟอง ... ) ทำสิ่งนี้ได้อย่างชาญฉลาด ในความคิดของฉันการแยกชุดข้อมูลออกเป็นหลาย ๆ ชิ้นหมายความว่าคุณสามารถจัดเรียงชิ้นส่วนเดียวได้จากนั้นคุณยังต้องรวมชิ้นส่วนเหล่านี้เข้ากับชุดข้อมูลที่จัดเรียงแบบ 'สมบูรณ์' ด้วยชุดข้อมูลเทราไบต์ที่กระจายอยู่ในระบบหลายพันระบบฉันคาดว่านี่จะเป็นงานที่ยิ่งใหญ่ แล้วสิ่งนี้ทำได้อย่างไร? อัลกอริทึมการจัดเรียง MapReduce นี้ทำงานอย่างไร ขอบคุณที่ช่วยให้ฉันเข้าใจ

5
การตัดสินใจระหว่างกระบวนการย่อยการประมวลผลหลายกระบวนการและเธรดใน Python?
ฉันต้องการขนานโปรแกรม Python ของฉันเพื่อให้สามารถใช้โปรเซสเซอร์หลายตัวบนเครื่องที่ทำงานได้ การทำให้ขนานของฉันง่ายมากโดยที่ "เธรด" แบบขนานทั้งหมดของโปรแกรมจะเป็นอิสระและเขียนเอาต์พุตไปยังไฟล์แยกต่างหาก ฉันไม่ต้องการเธรดเพื่อแลกเปลี่ยนข้อมูล แต่มีความจำเป็นที่ฉันต้องรู้ว่าเมื่อเธรดเสร็จสิ้นเนื่องจากขั้นตอนบางอย่างของไปป์ไลน์ของฉันขึ้นอยู่กับเอาต์พุต การพกพาเป็นสิ่งสำคัญเพราะฉันต้องการให้สิ่งนี้ทำงานบน Python เวอร์ชันใดก็ได้บน Mac, Linux และ Windows ด้วยข้อ จำกัด เหล่านี้โมดูล Python ใดที่เหมาะสมที่สุดสำหรับการใช้งานสิ่งนี้ ฉันกำลังพยายามตัดสินใจระหว่างเธรดกระบวนการย่อยและการประมวลผลหลายขั้นตอนซึ่งดูเหมือนจะมีฟังก์ชันที่เกี่ยวข้อง มีความคิดเห็นเกี่ยวกับเรื่องนี้ไหม ฉันต้องการโซลูชันที่ง่ายที่สุดที่พกพาได้

13
จะรอให้เธรดจำนวนหนึ่งเสร็จสมบูรณ์ได้อย่างไร?
มีวิธีใดเพียงแค่รอให้กระบวนการเธรดทั้งหมดเสร็จสิ้น ตัวอย่างเช่นสมมติว่าฉันมี: public class DoSomethingInAThread implements Runnable{ public static void main(String[] args) { for (int n=0; n<1000; n++) { Thread t = new Thread(new DoSomethingInAThread()); t.start(); } // wait for all threads' run() methods to complete before continuing } public void run() { // do something here } } ฉันจะแก้ไขสิ่งนี้ได้อย่างไรเพื่อให้main()เมธอดหยุดที่ข้อคิดเห็นจนกว่าrun()วิธีการของเธรดทั้งหมดจะออก …


2
การแบ่งปันคิวผลลัพธ์ระหว่างกระบวนการต่างๆ
เอกสารสำหรับการแสดงโมดูลวิธีการส่งคิวให้กระบวนการที่เริ่มต้นด้วยmultiprocessing multiprocessing.Processแต่ฉันจะแชร์คิวกับกระบวนการของผู้ปฏิบัติงานแบบอะซิงโครนัสที่เริ่มต้นด้วยได้apply_asyncอย่างไร ฉันไม่ต้องการการเข้าร่วมแบบไดนามิกหรือสิ่งอื่นใดเป็นเพียงวิธีให้คนงาน (ซ้ำ ๆ ) รายงานผลกลับไปที่ฐาน import multiprocessing def worker(name, que): que.put("%d is done" % name) if __name__ == '__main__': pool = multiprocessing.Pool(processes=3) q = multiprocessing.Queue() workers = pool.apply_async(worker, (33, q)) สิ่งนี้ล้มเหลวด้วย: RuntimeError: Queue objects should only be shared between processes through inheritance. ฉันเข้าใจว่าสิ่งนี้หมายถึงอะไรและฉันเข้าใจคำแนะนำในการสืบทอดแทนที่จะต้องการการดอง / การไม่หยิบ (และข้อ จำกัด พิเศษทั้งหมดของ …

2
SLURM "srun" เทียบกับ "sbatch" และพารามิเตอร์
ฉันพยายามทำความเข้าใจว่าความแตกต่างระหว่าง SLURM srunและsbatchคำสั่งคืออะไร ฉันจะพอใจกับคำอธิบายทั่วไปมากกว่าคำตอบเฉพาะสำหรับคำถามต่อไปนี้ แต่ต่อไปนี้เป็นประเด็นเฉพาะของความสับสนที่อาจเป็นจุดเริ่มต้นและให้ความคิดเกี่ยวกับสิ่งที่ฉันกำลังมองหา อ้างอิงถึงเอกสาร , srunมีไว้เพื่อส่งงานและsbatchสำหรับการส่งงานสำหรับการดำเนินการในภายหลัง แต่ความแตกต่างในทางปฏิบัติก็ไม่มีความชัดเจนให้ฉันและพฤติกรรมของพวกเขาดูเหมือนว่าจะเป็นแบบเดียวกัน ตัวอย่างเช่นฉันมีคลัสเตอร์ที่มี 2 โหนดแต่ละโหนดมี CPU 2 ตัว ถ้าผมดำเนินการsrun testjob.sh &5x ในแถวมันอย่างจะคิวงานที่ห้าจน CPU sbatch testjob.shที่สามารถใช้งานได้เป็นจะดำเนินการ เพื่อให้คำถามเป็นรูปธรรมมากขึ้นฉันคิดว่าจุดเริ่มต้นที่ดีอาจเป็น: มีสิ่งใดบ้างที่ฉันสามารถทำได้กับคำถามที่ฉันไม่สามารถทำได้กับอีกคำถามและเพราะเหตุใด อาร์กิวเมนต์จำนวนมากของทั้งสองคำสั่งเหมือนกัน คนที่ดูเหมือนที่เกี่ยวข้องมากที่สุดคือ--ntasks, --nodes, ,--cpus-per-task สิ่งเหล่านี้เกี่ยวข้องกันอย่างไรและต่างกันอย่างไรสำหรับvs ?--ntasks-per-nodesrunsbatch ความแตกต่างอย่างหนึ่งคือsrunจะทำให้เกิดข้อผิดพลาดหากtestjob.shไม่มีสิทธิ์ปฏิบัติการเช่นchmod +x testjob.shในขณะที่sbatchจะรันอย่างมีความสุข เกิดอะไรขึ้น "ภายใต้ประทุน" ที่ทำให้เป็นเช่นนี้? เอกสารประกอบยังกล่าวถึงที่srunมักใช้ภายในsbatchสคริปต์ สิ่งนี้นำไปสู่คำถาม: พวกเขามีปฏิสัมพันธ์กันอย่างไรและอะไรคือ "หลักการใช้" สำหรับพวกเขาแต่ละคน? โดยเฉพาะฉันจะใช้srunเองหรือไม่?


2
mapM แบบขนานบนอาร์เรย์ Repa
ในงานล่าสุดของฉันกับGibbs samplingฉันได้ใช้ประโยชน์อย่างRVarเต็มที่ซึ่งในมุมมองของฉันเป็นอินเทอร์เฟซที่เหมาะสำหรับการสร้างตัวเลขแบบสุ่ม น่าเศร้าที่ฉันไม่สามารถใช้ Repa ได้เนื่องจากไม่สามารถใช้การกระทำแบบ monadic ในแผนที่ได้ ในขณะที่แผนที่ monadic โดยทั่วไปไม่สามารถขนานกันได้อย่างชัดเจน แต่สำหรับฉันแล้วRVarอาจเป็นตัวอย่างของ monad อย่างน้อยหนึ่งตัวอย่างที่เอฟเฟกต์สามารถขนานกันได้อย่างปลอดภัย (อย่างน้อยตามหลักการฉันไม่คุ้นเคยกับการทำงานภายในของRVar) . กล่าวคือฉันต้องการเขียนสิ่งต่อไปนี้ drawClass :: Sample -> RVar Class drawClass = ... drawClasses :: Array U DIM1 Sample -> RVar (Array U DIM1 Class) drawClasses samples = A.mapM drawClass samples ที่A.mapMจะมีลักษณะบางอย่างเช่น mapM :: ParallelMonad m => (a …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.