การเป็นตัวแทนระดับกลางใดที่สามารถใช้เพื่อให้เหตุผลเกี่ยวกับการเกิดพร้อมกัน?


12

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

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

  • การตัดสินใจว่าค่าใช้จ่ายจากการหมุนเธรดนั้นคุ้มค่าหรือไม่เนื่องจากระดับของการขนานที่มีอยู่ในรหัส

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

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


หากคุณเขียนโค้ดในลักษณะที่ใช้งานได้คุณจะไม่ต้องกังวลเกี่ยวกับสภาพการแข่งขันหรือผลข้างเคียง
Robert Harvey

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

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

หนึ่งในเครื่องมือทางทฤษฎีเรียกว่า "Dynamic Single Assignment (DSA)" ที่สร้างขึ้นจาก SSA
วงเวียน

@rwong: คุณสามารถให้การอ้างอิงที่ชัดเจนได้หรือไม่?
Ira Baxter

คำตอบ:


5

ใครจะคิดว่าการสร้างแบบจำลองพร้อมกันอย่างชัดเจนในการเป็นตัวแทนระดับกลาง (IR) เป็นข้อกำหนดที่จำเป็น ดังนั้นคำตอบเดียวก็คือ "IR ใด ๆ ที่ใช้สำหรับโปรแกรมที่ต่อเนื่องพร้อมกับการเพิ่มการทำงานพร้อมกัน" เช่น "fork and join", "parallel x y" การเพิ่มสิ่งเหล่านี้ทำให้มีเหตุผลเกี่ยวกับการทำงานพร้อมกันบางประเภท แต่ไม่จำเป็นต้องง่าย และไม่ชัดเจนว่าจะรับประกันคุณสมบัติบางอย่าง (data-race freeness) ได้อย่างไรโดยไม่ต้องไปถึงการทำงานแทนอย่างเต็มที่

Petri Nets (CPNs) ที่มีเนื้อหาครอบคลุมสีเป็นทางเลือกที่ดีสำหรับการแสดงโปรแกรมพร้อมกัน (โทเค็นใน CPNs คือ "มีสี" [มีชนิด] และสามารถมีค่าได้ "การเปลี่ยน" เป็นสถานะสามารถทำการคำนวณทางคณิตศาสตร์โดยใช้โทเค็นที่เข้ามาเพื่อสร้างโทเค็นสีที่ต่างไปจากเดิม หากคุณนึกถึงสถานที่ที่คำนวณผลลัพธ์และช่วงการเปลี่ยนภาพเป็นตัวดำเนินการสร้างแบบจำลอง (รวมถึงสถานที่พิเศษในการเข้าถึงหน่วยความจำ) สิ่งนี้จะแสดงจำนวนกราฟกระแสข้อมูลที่จะใช้กับโปรแกรมแบบจำลอง คุณสามารถใช้สิ่งนี้เพื่อให้การตีความอย่างเป็นทางการกับการเรียบเรียงคอมไพเลอร์คลาสสิคเช่น triples [โอเปอเรเตอร์, อินพุต 1, อินพุต 2, เอาต์พุต]

มีเครื่องมือมากมายในการวิเคราะห์กราฟ CPN ดังกล่าวรวมถึงคุณสมบัติการคำนวณเช่น deadlock-freeness, ขอบเขตของจำนวนโทเค็นในสถานที่ ฯลฯ Heirarchical CPN ช่วยให้คุณสามารถจำลองรูปแบบการทำงานและขั้นตอนและแนวคิดของ "การโทร"

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

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