ความแตกต่างระหว่างการดำเนินการ "พร้อมกัน" และ "ขนาน"?


107

อะไรคือข้อแตกต่างระหว่างคำที่เกิดขึ้นพร้อมกันและการดำเนินการแบบขนาน ? ฉันไม่เคยเข้าใจความแตกต่างเลยทีเดียว

แท็กกำหนดภาวะพร้อมกันเป็นวิธีการรันสองกระบวนการพร้อมกัน แต่ฉันคิดว่าการขนานกันนั้นเป็นสิ่งเดียวกันนั่นคือ: เธรดที่แยกจากกันหรือกระบวนการที่อาจทำงานบนโปรเซสเซอร์ที่แยกต่างหาก

นอกจากนี้หากเราพิจารณาอะไรบางอย่างเช่น I / O แบบอะซิงโครนัสเราจะจัดการกับการเกิดพร้อมกันหรือการขนานกันไหม


27
สั้น - พร้อมกัน: หลายคนที่แตกต่างกันการดำเนินงานที่เกิดขึ้นในครั้งเดียว ขนาน: การดำเนินการเดียวกันแบ่งออกเป็นบิตขนาดเล็กที่เกิดขึ้นในครั้งเดียว
Oded

3
@Oded ฉันเข้าใจความหมายของคำ แต่ฉันมีปัญหาในการหาความหมาย คุณมีตัวอย่างที่เป็นรูปธรรมหรือไม่
blz

7
@Oded ฉันไม่เห็นด้วยกับคุณจริงๆไม่มีคำจำกัดความของพวกเขา (ทั่วไปหรือนำไปใช้กับการเขียนโปรแกรม) ทำแนวคิดของ "พร้อมกัน" และ "ขนาน" พูดถึงอะไรเกี่ยวกับจำนวนหรือ "ขนาด" ของการดำเนินการ
Shivan Dragon

2
@Oded เมื่อคุณพูดว่า "บิตเล็ก"
Avner Shahar-Kashtan

2
@Oded: ใช่ แต่นี่ดูเหมือนจะเป็นรากฐานของความเข้าใจผิดระหว่างคุณกับ ShivanDragon
Avner Shahar-Kashtan

คำตอบ:


97

การเกิดพร้อมกันและการขนานเป็นแนวคิดที่เกี่ยวข้อง แต่แตกต่างกันสอง

การเกิดขึ้นพร้อมกันหมายถึงโดยหลักแล้วภารกิจ A และภารกิจ B ทั้งคู่จำเป็นต้องเกิดขึ้นอย่างเป็นอิสระจากกันและ A เริ่มทำงานและจากนั้น B จะเริ่มก่อนที่ A จะเสร็จสิ้น

มีวิธีที่แตกต่างกันในการบรรลุพร้อมกัน หนึ่งในนั้นคือความขนาน - มี CPU หลายตัวที่ทำงานกับงานที่แตกต่างกันในเวลาเดียวกัน แต่นั่นไม่ใช่วิธีเดียว อีกอย่างคือการสลับงานซึ่งทำงานเช่นนี้: งาน A ทำงานได้จนถึงจุดหนึ่งจากนั้น CPU ที่ทำงานอยู่จะหยุดและสลับไปที่งาน B ทำงานบนมันสักครู่แล้วสลับกลับไปที่งาน A หาก ชิ้นเวลามีขนาดเล็กพอที่จะปรากฏแก่ผู้ใช้ว่าสิ่งทั้งสองกำลังทำงานแบบขนานแม้ว่าพวกเขาจะถูกประมวลผลเป็นอนุกรมโดยซีพียูมัลติทาสก์


4
กรณี B เป็นวิธีการทำงานของ async IO ได้อย่างไร
blz

6
@blz: ถูกต้อง นอกจากนี้ยังเป็นวิธีการทำงานมัลติทาสกิ้งที่ยึดเอาเสียก่อน ความแตกต่างที่สำคัญคือใน async IO โปรแกรมตัดสินใจที่จะให้ขึ้นเวลาและบอก CPU ในการประมวลผลอย่างอื่นในขณะที่ในการทำงานหลายมาตรการถ้าด้ายทำงานไม่สมัครใจให้ขึ้น CPU หลังจากที่นานพอระบบปฏิบัติการpreemptsมัน.
Mason Wheeler

1
คำอธิบายที่ดีที่สุดแจก
Konrad

@ MasonWheeler: ถ้าเรามี CPU เพียง 1 ตัวเราจะมี Concurrency ได้โดยไม่มี Parallelism ขวา? Parallelism สามารถทำได้มากกว่า 1 CPU ขวา? และถ้ามันถูกต้องและถ้าเรามี CPU เพียง 1 ตัว Streams จาก Java 8 จะไม่มีประโยชน์อะไรเลย
Anish Mittal

1
ถูกต้องเกี่ยวกับจุดแรก สำหรับคนสุดท้ายความเท่าเทียมกันเป็นประโยชน์อย่างเดียวที่คุณได้รับจาก Streams? ฉันไม่ใช่นักพัฒนา Java แต่ความประทับใจของฉันคือ Java Streams นั้นเทียบเท่ากับ LINQ และมีประโยชน์อย่างแท้จริงในเรื่องการแสดงออกและความง่ายในการพัฒนา
Mason Wheeler

37

แนวคิดทั้งสองเกี่ยวข้องกัน แต่แตกต่างกัน

การเกิดขึ้นพร้อมกันหมายความว่าการคำนวณสองรายการขึ้นไปเกิดขึ้นภายในกรอบเวลาเดียวกันและโดยปกติจะมีการพึ่งพาระหว่างกัน

ความเท่าเทียมหมายถึงการคำนวณสองครั้งขึ้นไปเกิดขึ้นพร้อมกัน

การเกิดพร้อมกันอธิบายถึงปัญหา (สองสิ่งต้องเกิดขึ้นพร้อมกัน) ในขณะที่การขนานกันอธิบายถึงวิธีแก้ปัญหา (แกนประมวลผลทั้งสองถูกใช้เพื่อดำเนินการสองสิ่งพร้อมกัน)

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

ตัวอย่างที่รู้จักกันดีที่สุดของการทำงานพร้อมกันที่ไม่ขนานกันคือวิธีการทำงานของ JavaScript: มีเพียงเธรดเดียวและการเรียกกลับแบบอะซิงโครนัสใด ๆ จะต้องรอจนกว่า chunk ของโค้ดก่อนหน้านี้จะดำเนินการเสร็จสิ้น สิ่งนี้เป็นสิ่งสำคัญที่ต้องรู้เพราะมันรับประกันว่าฟังก์ชั่นใด ๆ ที่คุณเขียนนั้นเป็นอะตอมมิก - ไม่มีการโทรกลับสามารถขัดจังหวะมันจนกว่ามันจะกลับ แต่ก็หมายความว่า "การวนรอบไม่ว่าง" จะใช้งานไม่ได้ - คุณไม่สามารถตั้งค่าการหมดเวลาแล้ววนซ้ำจนกว่าจะเริ่มทำงานเนื่องจากการวนซ้ำจะป้องกันการโทรกลับหมดเวลาจากการดำเนินการ


8
คุณบอกว่าแต่ผู้ใช้ที่เขียนว่าคำตอบที่ได้รับการยอมรับว่าConcurrency means that two or more calculations happen within the same time frame, and there is usually some sort of dependency between them. Concurrency means, essentially, that task A and task B both need to happen independently of each otherดังนั้นข้อสรุปคืออะไร?
nbro

คุณช่วยอธิบายได้ไหมว่าทำไมรูปแบบของ JavaScript จึงเกิดขึ้นพร้อมกัน? จากคำจำกัดความของคุณในการคำนวณพร้อมกันการคำนวณสองรายการขึ้นไปควรเกิดขึ้นภายในกรอบเวลาเดียวกัน แต่ในการคำนวณ JavaScript นั้นเรียงตามลำดับโดยใช้คิวเดียว
damluar

4
โดย "ภายในกรอบเวลาเดียวกัน" ฉันไม่จำเป็นต้องแปลว่า "พร้อมกัน" เพียงแค่ว่ากรอบเวลาโดยรวมที่เกิดขึ้นทับกัน สิ่งนี้สามารถเกิดขึ้นได้ในแบบคู่ขนาน (เช่นตัวประมวลผลสองคอร์แต่ละตัวดำเนินการหนึ่งในงาน) แต่ก็สามารถทำได้โดยการเรียงลำดับการดำเนินการให้สมบูรณ์ (ทำภารกิจ 1 ก่อนจำผลลัพธ์จากนั้นทำภารกิจ 2 จากนั้นรายงานทั้งสอง) หรือโดยการตัดทั้งขึ้นและแทรกชิ้น สิ่งหลังคือสิ่งที่ JS ทำ
tdammers

9

ฉันเชื่อว่าคำตอบนี้ถูกต้องมากกว่าคำตอบที่มีอยู่และการแก้ไขจะมีการเปลี่ยนแปลงสาระสำคัญของพวกเขา ฉันพยายามเชื่อมโยงไปยังแหล่งข้อมูลต่าง ๆ หรือหน้าวิกิพีเดียเพื่อให้ผู้อื่นสามารถยืนยันความถูกต้องได้


เห็นพ้องด้วย:ทรัพย์สินของระบบซึ่งจะช่วยให้หน่วยงานของโปรแกรมอัลกอริทึมหรือปัญหาที่จะดำเนินการออกจากคำสั่งซื้อหรือในการสั่งซื้อบางส่วนโดยไม่ต้องมีผลกระทบต่อผลสุดท้าย1 2

ตัวอย่างง่าย ๆ ของสิ่งนี้คือการเพิ่มเติมอย่างต่อเนื่อง:

0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45

เนื่องจากทรัพย์สินที่สับเปลี่ยนของการเพิ่มคำสั่งเหล่านี้สามารถจัดเรียงใหม่โดยไม่ส่งผลกระทบต่อความถูกต้อง; การจัดเรียงต่อไปนี้จะส่งผลให้คำตอบเดียวกัน:

(1 + 9) + (2 + 8) + (3 + 7) + (4 + 6) + 5 + 0 = 45

ที่นี่ฉันได้จัดกลุ่มตัวเลขเป็นคู่ที่จะรวมเป็น 10 ทำให้ฉันง่ายขึ้นที่จะได้คำตอบที่ถูกต้องในหัวของฉัน

การคำนวณแบบขนาน:ประเภทของการคำนวณซึ่งในการคำนวณจำนวนมากหรือการดำเนินการของกระบวนการที่จะดำเนินการพร้อมกัน3 4 ดังนั้นการคำนวณแบบขนานจึงยกระดับคุณสมบัติของการเกิดพร้อมกันเพื่อดำเนินการหลาย ๆ หน่วยของโปรแกรมอัลกอริทึมหรือปัญหาพร้อมกัน

ดำเนินการต่อด้วยตัวอย่างของการเพิ่มที่ต่อเนื่องกันเราสามารถดำเนินการส่วนต่าง ๆ ของผลรวมในแบบคู่ขนาน:

Execution unit 1:  0 + 1 + 2 + 3 + 4 = 10
Execution unit 2:  5 + 6 + 7 + 8 + 9 = 35

10 + 35 = 45จากนั้นในตอนท้ายที่เราสรุปผลที่ได้จากพนักงานแต่ละคนจะได้รับ

อีกครั้งการขนานนี้เป็นไปได้เพียงเพราะการต่อเนื่องกันมีสมบัติของการเกิดพร้อมกัน

การเกิดขึ้นพร้อมกันสามารถยกระดับได้มากกว่าเพียงแค่การขนาน พิจารณาpre-emptionบนระบบ single-core: ในช่วงระยะเวลาหนึ่งระบบอาจสร้างความคืบหน้าให้กับกระบวนการที่กำลังรันหลายกระบวนการโดยที่ยังไม่เสร็จสิ้น อันที่จริงตัวอย่างของคุณของ Iync แบบอะซิงโครนัสเป็นตัวอย่างทั่วไปของการเกิดพร้อมกันที่ไม่ต้องใช้การขนาน


ความสับสน

ด้านบนค่อนข้างตรงไปตรงมา ฉันสงสัยว่าผู้คนสับสนเพราะคำจำกัดความของพจนานุกรมไม่ตรงกับสิ่งที่อธิบายไว้ข้างต้น:

  • พร้อมกัน: เกิดขึ้นหรือที่มีอยู่พร้อมกันหรือเคียงข้าง5
  • เห็นพ้อง: ความเป็นจริงของสองคนหรือมากกว่าเหตุการณ์หรือสถานการณ์ที่เกิดขึ้นหรือที่มีอยู่ในเวลาเดียวกันจากการค้นหาใน google: "define: เห็นพ้องด้วย"

พจนานุกรมกำหนด "การเกิดขึ้นพร้อมกัน" ในความเป็นจริงของการเกิดขึ้นในขณะที่คำจำกัดความในการใช้คอมพิวเตอร์พื้นถิ่นเป็นคุณสมบัติแฝงของโปรแกรมทรัพย์สินหรือระบบ แม้ว่าสิ่งเหล่านี้เกี่ยวข้องจะไม่เหมือนกัน


คำแนะนำส่วนบุคคล

ฉันขอแนะนำให้ใช้คำว่า "ขนาน" เมื่อการดำเนินการพร้อมกันนั้นมั่นใจหรือคาดว่าจะเกิดขึ้นและให้ใช้คำว่า "พร้อมกัน" เมื่อไม่แน่ใจหรือไม่เกี่ยวข้องว่าจะดำเนินการพร้อมกันหรือไม่

ดังนั้นฉันจะอธิบายการจำลองเครื่องยนต์เจ็ทบนหลายแกนในแนวขนาน

ฉันจะอธิบาย Makefiles เป็นตัวอย่างของการเกิดพร้อมกัน Makefiles ระบุการพึ่งพาของแต่ละเป้าหมาย เมื่อเป้าหมายขึ้นอยู่กับเป้าหมายอื่น ๆ สิ่งนี้จะสร้างการสั่งซื้อบางส่วน เมื่อความสัมพันธ์และสูตรอาหารถูกกำหนดอย่างครอบคลุมและถูกต้องสิ่งนี้จะกำหนดคุณสมบัติของการเกิดพร้อมกัน: มีคำสั่งบางส่วนเพื่อให้ลำดับของงานบางอย่างสามารถจัดเรียงใหม่โดยไม่ส่งผลกระทบต่อผลลัพธ์ อีกครั้งการทำงานพร้อมกันนี้สามารถใช้ประโยชน์ในการสร้างกฎหลาย ๆ อย่างพร้อมกัน แต่การทำงานพร้อมกันเป็นคุณสมบัติของ Makefile ไม่ว่าจะมีการใช้ความขนานหรือไม่


6

การดำเนินการพร้อมกันคือรูปแบบทั่วไปของการดำเนินการแบบขนาน ตัวอย่างเช่นโปรแกรมแบบขนานสามารถเรียกว่าทำงานพร้อมกัน แต่การย้อนกลับไม่เป็นความจริง

  1. สามารถดำเนินการพร้อมกันในโปรเซสเซอร์เดียว (หลายเธรดจัดการโดยตัวกำหนดตารางเวลา)
  2. ไม่สามารถทำการประมวลผลแบบขนานบนโปรเซสเซอร์เดี่ยว แต่ใช้โปรเซสเซอร์หลายตัวได้ (หนึ่งกระบวนการต่อโปรเซสเซอร์)

สำหรับรายละเอียดอ่านบทความวิจัย แนวคิดการเขียนโปรแกรมพร้อมกัน


1
"การประมวลผลแบบขนานนั้นไม่สามารถทำได้บนตัวประมวลผลเดียว แต่สำหรับตัวประมวลผลหลายตัว" - นอกเหนือจากที่มีเส้นทางการประมวลผลแบบขนานภายในตัวประมวลผลเช่นระบบที่ใช้ประโยชน์จาก Instruction Level Parallelism (aka "superscalar" สถาปัตยกรรมเช่นโปรเซสเซอร์ของ Intel Pentium, ARM Cortex และตัวประมวลผลระดับสูงอื่น ๆ ส่วนใหญ่) และ Single Instruction Multiple Data หรือที่เรียกว่าสถาปัตยกรรมแบบขนานข้อมูล (เช่น MMX / SSE / etc) ไม่ต้องพูดถึงการจัดการที่แปลกใหม่เช่นตัวประมวลผลดาต้าโลว์และอื่น ๆ
จูลส์

3

การประมวลผลแบบขนานเป็นส่วนย่อยของการประมวลผลที่เกิดขึ้นพร้อมกัน

การประมวลผลที่เกิดขึ้นพร้อมกันจะอธิบายถึงสองงานที่เกิดขึ้นแบบอะซิงโครนัสซึ่งหมายถึงลำดับที่งานจะถูกดำเนินการไม่ได้กำหนดไว้ล่วงหน้า สองเธรดสามารถรันพร้อมกันบนตัวประมวลผลหลักเดียวกันได้โดยการแทรกคำสั่งที่สามารถเรียกใช้งานได้ ตัวอย่างเช่น thread 1 รันเป็นเวลา 10ms, thread 2 รันเป็นเวลา 10ms เป็นต้น

การประมวลผลแบบขนานเป็นประเภทของการประมวลผลที่เกิดขึ้นพร้อมกันโดยมีชุดคำสั่งมากกว่าหนึ่งชุดทำงานพร้อมกัน นี่อาจเป็นหลายระบบที่ทำงานกับปัญหาที่พบบ่อยเช่นเดียวกับในการคำนวณแบบกระจายหรือหลายคอร์ในระบบเดียวกัน


0

คำแถลงของดัมเมอร์เข้ามาใกล้ส่วนที่เหลือล้วน แต่เป็นประเด็น เขาพูดว่า:

"ใส่อย่างกล้าหาญ, การเกิดพร้อมกันอธิบายถึงปัญหา (สองสิ่งที่ต้องเกิดขึ้นพร้อมกัน) ในขณะที่การขนานกันอธิบายถึงวิธีแก้ปัญหา (แกนประมวลผลทั้งสองถูกใช้เพื่อดำเนินการสองสิ่งพร้อมกัน"

ลองวิเคราะห์คำศัพท์กันก่อน

ปัจจุบันหมายถึงสิ่งที่เกิดขึ้นจริงที่เกี่ยวข้องในขณะนี้ ต่อต้านหมายถึงต่อต้านไม่สอดคล้องกับ

ขนานหมายถึงในทิศทางเดียวกันโดยไม่ต้องข้ามโดยไม่ต้องไปในทางของแต่ละคน

ดังนั้นการเห็นพ้องด้วยหมายถึงการแย่งชิงทรัพยากรเดียวกัน ความเท่าเทียมไม่ได้ กระบวนการแบบขนานอาจใช้ทรัพยากรเดียวกัน แต่ไม่ถือว่าเป็นปัญหา แต่ไม่ใช่ปัญหา ด้วยความพร้อมกันมันเป็นปัญหาที่ต้องจัดการ


"ปัจจุบันหมายถึงสิ่งที่เกิดขึ้นจริงที่เกี่ยวข้องในขณะนี้การต่อต้านต่อต้านไม่สอดคล้องกับ" - ต้องการการอ้างอิง ฉันสงสัยอย่างยิ่งว่าทั้งสองข้อความนี้ ในขณะที่ "ปัจจุบัน" สามารถมีความหมายที่กล่าวถึงที่นี่ในภาษาอังกฤษนั่นไม่ใช่ความหมายที่ใช้ในคำว่า "พร้อมกัน"
Hulk

1
ฉันคิดว่าการแปลพร้อมกันจากละตินคือ "การทำงานร่วมกัน" คำนำหน้า 'นักโทษ' มักจะหมายถึงกันในขณะที่สมรู้ร่วมคิด (การหายใจเข้าด้วยกัน) ผล (ผลด้วยกันหรือต่อไปนี้) สรุป (ใกล้กัน) ฯลฯ มันเป็นแง่มุมที่น่ารำคาญของภาษาว่าสิ่งที่สามารถมีความหมายตรงข้ามลงโทษเป็นตัวอย่างที่ชื่นชอบ .

@ ไม่ประกอบด้วยในกรณีนี้ (แย้งในปัจจุบัน) การทำงานร่วมกันความหมายดูเหมือนจะเหมาะสมกว่า เนื่องจากไม่มีโปร - ปัจจุบัน ... ในภาษาดัตช์การเกิดขึ้นพร้อมกันเป็นคำนามหมายถึงคู่แข่ง Courant เป็นเรื่องปกติและเคลื่อนไหวรอบตัวคุณ นอกจากนี้ยังเป็นหนังสือพิมพ์ สิ่งที่ใช้งานอยู่ในขณะนี้ "Rekening courant" เป็นบัญชีที่ใช้งานอยู่ ฉันรู้สึกว่าการทำงานพร้อมกันหมายถึงข้อผิดพลาด con (!) การต่อสู้กับทรัพยากรเดียวกัน ทำงานในพื้นที่เดียวกัน อาจเป็นเพราะความหมายดัตช์ (คู่แข่ง)
Martin Maat

อะไรที่ Dijkstra พูดว่าฉันสงสัย?

-1

เห็นได้ชัดว่ามีการใช้คำศัพท์ต่างกันในวัฒนธรรมที่แตกต่างกัน

ความเข้าใจของฉันคือ:

Parallelism เป็นวิธีการเพิ่มความเร็วในการประมวลผล ไม่ว่าคุณจะทำการคูณเมทริกซ์ในแกนเดียวบนหลายคอร์หรือแม้แต่ใน GPU ผลลัพธ์จะเหมือนกัน (หรือโปรแกรมของคุณเสีย) มันไม่ได้เพิ่มฟังก์ชั่นใหม่ให้กับบางโปรแกรมเพียงเพิ่มความเร็ว

ในขณะที่เห็นพ้องด้วยเป็นเรื่องเกี่ยวกับสิ่งที่คุณไม่สามารถทำตามลำดับ ตัวอย่างเช่นการแสดงหน้าเว็บ 3 หน้าในเวลาเดียวกันให้กับลูกค้า 3 รายในขณะที่รอคำขอถัดไป (แม้ว่าคุณจะสามารถจำลองสิ่งนี้ได้ในระดับหนึ่งผ่านการสอดแทรกเหมือนที่ทำกันในสมัยก่อน) โปรดทราบว่าพฤติกรรมของโปรแกรมที่เกิดขึ้นพร้อมกันนั้นเป็นแบบไม่ระบุชื่อ มันเป็นตัวอย่างที่ไม่ชัดเจนซึ่งลูกค้าทั้ง 3 รายจะให้บริการอย่างสมบูรณ์ก่อน คุณสามารถทำการทดสอบได้บ้างและรับผลลัพธ์ที่แตกต่างกันในแต่ละครั้งเกี่ยวกับการสั่งซื้อคำขอจะเสร็จสิ้น ระบบรันไทม์ควรรับประกันว่า a) ลูกค้าทั้งหมดจะได้รับบริการและ b) ในระยะเวลาที่เหมาะสม

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


-1

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

Mason Wheeler และ Penguin ได้ให้คำตอบเดียวกัน หนึ่งคอร์ที่มีการสลับงานและหรือมัลติคอร์พร้อมกันคือมัลติคอร์ = ขนานอย่างเคร่งครัด

ความคิดเห็นของฉันคือคำสองคำนี้ควรจะถูกนำมารวมกันเป็นหนึ่งและฉันพยายามที่จะหลีกเลี่ยงการพูดว่า "พร้อมกัน" ฉันเดาว่าในระดับการเขียนโปรแกรม OS ความแตกต่างนั้นสำคัญ แต่จากมุมมองของโปรแกรมเมอร์แอพพลิเคชั่นมันไม่สำคัญมากนัก ฉันเขียน mapReduce, Spark, MPI, cuda, openCL และ multithreaded c ++ และฉันไม่เคยหยุดและคิดว่าถ้างานกำลังทำงานกับเธรด interleaved หรือหลายคอร์

ตัวอย่างเช่นเมื่อฉันเขียน c ++ แบบหลายเธรดบางครั้งฉันไม่แน่ใจว่าฉันจะได้รับหลายแกนแม้ว่าจะมีวิธีที่จะตอบสนองต่อจำนวนคอร์ที่คุณได้รับตามที่อธิบายไว้ที่นี่https://stackoverflow.com/questions/2166425/ วิธีการโครงสร้าง-AC ในจุดประกายฉันเพิ่งทำแผนที่และลดการดำเนินการและไม่รู้ว่า jvm จัดการกับมันในระดับฮาร์ดแวร์อย่างไร สำหรับ GPU ฉันคิดว่าทุกเธรดได้รับมอบหมายให้เป็นโปรเซสเซอร์ที่เรียบง่ายของตัวเอง แต่ฉันมักจะซิงค์กระทู้ของฉันทุกที่ที่มีปัญหาอาจเกิดขึ้น ด้วย MPI การสื่อสารระหว่างเครื่องถูกระบุไว้อย่างชัดเจน แต่เราสามารถแทรกการทำงานของหลาย ๆ เครื่องบนแกนเดียวและรวมผลลัพธ์ผ่านทางฟังก์ชั่นเธรดเดี่ยวที่เหมาะสม และถ้าเราใช้ MPI เพื่อประสานเครื่องหลักแกนเดี่ยวแต่ละเครื่องมีมัลติเธรด สิ่งที่แตกต่างมันจะทำให้? ฉันจะไม่พูดอะไร เรียกมันว่า "ขนาน" ทั้งหมดและทำได้ด้วย


2
ความแตกต่างยังคงมีความเกี่ยวข้องในปัจจุบัน คุณสามารถมีความขนานได้สูงสุดตามจำนวน CPU core ที่ฮาร์ดแวร์ของคุณมี แต่โปรแกรมจำนวนมากมีการคำนวณพร้อมกันหลายร้อยรายการพร้อมกันที่เกิดขึ้นพร้อมกันมากกว่าจำนวนคอร์ที่ฮาร์ดแวร์มี การไม่เข้าใจความแตกต่างนี้อาจทำให้โปรแกรมเมอร์ไม่เข้าใจว่าเหตุใดโปรแกรมที่ขนานกันของพวกเขาจึงทำงานช้ากว่าเวอร์ชั่นเธรดเดี่ยว (หรือเธรดจำนวนน้อย)
Lie Ryan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.