โปรแกรมแบบเธรดเดียวสามารถใช้หลายแกนได้หรือไม่


12

ชื่อกล่าวมันทั้งหมด: มีวิธีที่จะได้รับโปรแกรมเก่าที่ออกแบบมาเพื่อใช้ CPU แกนเดียวเพื่อใช้หลายแกน CPU หรือไม่?


13
ไม่เป็นไปไม่ได้
Moab

5
ถ้าเป็นเช่นนั้นง่ายมาก ..
เบรนแดน Long

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

ใครจะเป็นผู้จัดการการซิงโครไนซ์ระหว่างหลายเธรดเนื่องจากลำดับมีความสำคัญ
user36582

คำตอบ:


16

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


19
นอกจากนี้ยังเป็นที่น่าสังเกตว่าบางแอปพลิเคชันไม่สามารถเขียนใหม่เพื่อพิจารณาหลายคอร์ได้ ส่วนใหญ่ขึ้นอยู่กับว่ากระบวนการเป็นแบบขนาน ตัวอย่างง่ายๆของกระบวนการที่ไม่สามารถเทียบเคียงได้คือการสืบพันธุ์ของมนุษย์: ผู้หญิงคนหนึ่งสามารถสร้างลูกหนึ่งคนใน 9 เดือน ผู้หญิงเก้าคนสามารถสร้างลูก 9 คนใน 9 เดือน แต่คุณไม่สามารถใช้ผู้หญิง 9 คนในการผลิตลูกคนเดียวในหนึ่งเดือน
AndrejaKo

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

ยอดเยี่ยมขอบคุณทุกคนคุณทำให้ฉันรู้สึกเสียใจกับตัวอย่างของผู้หญิงและเกิดโดยเฉพาะอย่างยิ่งเมื่อคุณพูดถึงการผลิต: D
Chris

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

13

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


2

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

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

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

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


0

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

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