อ่าน 2 นาที
ภาษาโปรแกรมของฟอน นอยมันน์
ภาษาฟอนนอยมันน์ในการคำนวณคือภาษาโปรแกรม ที่เป็นสำเนา ไอโซมอ ร์ฟิก นามธรรมระดับสูงของสถาปัตยกรรมฟอนนอยมันน์ ณปี 2009 ภาษาโปรแกรมส่วนใหญ่ในปัจจุบันเข้าข่ายคำอธิบายนี้
ภาษาโปรแกรมของฟอน นอยมันน์
ภาษาฟอนนอยมันน์ในการคำนวณคือภาษาโปรแกรม ที่เป็นสำเนา ไอโซมอ ร์ฟิก นามธรรมระดับสูงของสถาปัตยกรรมฟอนนอยมันน์ [ 1 ] ณปี 2009 ภาษาโปรแกรมส่วนใหญ่ในปัจจุบันเข้าข่ายคำอธิบายนี้ ซึ่งน่าจะเป็นผลมาจากการครอบงำอย่างกว้างขวางของสถาปัตยกรรมคอมพิวเตอร์ฟอนนอยมันน์ในช่วง 50 ปีที่ผ่านมา
ความแตกต่างระหว่างFortran , Cและแม้แต่Javaแม้จะมีมาก แต่สุดท้ายแล้วก็ถูกจำกัดด้วยพื้นฐานการเขียนโปรแกรมของคอมพิวเตอร์แบบ von Neumann เหมือนกันทั้งหมด ตัวอย่างเช่น หากวัตถุใน Java ทั้งหมดถูกประมวลผลแบบขนานด้วยการส่งข้อความแบบ อะซิงโครนัส และการกำหนดแอดเดรสแบบประกาศตามแอตทริบิวต์แล้ว Java ก็จะไม่จัดอยู่ในกลุ่มนี้
ความเหมือนกันระหว่างภาษาโปรแกรมและสถาปัตยกรรมของฟอน นอยมันน์เป็นไปในลักษณะดังต่อไปนี้:
- ตัวแปรโปรแกรม ↔ เซลล์หน่วยความจำคอมพิวเตอร์
- คำสั่งควบคุม ↔ คำสั่งทดสอบและกระโดดของคอมพิวเตอร์
- คำสั่งกำหนดค่า ↔ คำสั่งดึงข้อมูลและจัดเก็บ
- นิพจน์ ↔ การอ้างอิงหน่วยความจำและคำสั่งทางคณิตศาสตร์
การวิจารณ์
จอห์น แบคคัสกล่าวว่า คำสั่งกำหนดค่าในภาษาฟอน นอยมันน์ แบ่งการเขียนโปรแกรมออกเป็นสองโลก โลกแรกประกอบด้วยนิพจน์ ซึ่งเป็น พื้นที่ทางคณิตศาสตร์ที่เป็นระเบียบและมีคุณสมบัติทางพีชคณิตที่เป็นประโยชน์: การคำนวณส่วนใหญ่เกิดขึ้นในพื้นที่นี้ โลกที่สองประกอบด้วยคำสั่งซึ่งเป็นพื้นที่ทางคณิตศาสตร์ที่ไม่เป็นระเบียบและมีคุณสมบัติทางคณิตศาสตร์ที่เป็นประโยชน์น้อย ( อย่างไรก็ตาม การเขียนโปรแกรมเชิงโครงสร้างสามารถมองได้ว่าเป็นฮิวริสติก แบบจำกัด ที่สามารถนำมาใช้ในพื้นที่นี้ได้)
Backus อ้างว่าในปี 1978 มีวงจรที่เลวร้ายเกิดขึ้นในวิทยาศาสตร์คอมพิวเตอร์ซึ่งการเน้นภาษา von Neumann มายาวนานทำให้สถาปัตยกรรมคอมพิวเตอร์ von Neumann ยังคงมีความสำคัญ และการพึ่งพาภาษาดังกล่าวทำให้ภาษาที่ไม่ใช่ von Neumann ไม่คุ้มค่าทางเศรษฐกิจ จึงจำกัดการพัฒนาต่อไป: การขาดแคลนภาษาที่ไม่ใช่ von Neumann ที่มีให้ใช้กันอย่างแพร่หลายและมีประสิทธิภาพ ทำให้นักออกแบบคอมพิวเตอร์ขาดแรงจูงใจและรากฐานทางปัญญาที่จำเป็นในการพัฒนาสถาปัตยกรรมคอมพิวเตอร์ใหม่[ 2 ]
การปรากฏตัวในระบบสมัยใหม่
โปรเซสเซอร์สมัยใหม่หลายตัวในปัจจุบันมีคอร์ประมวลผลหลายตัว และการเขียนโปรแกรมแบบมัลติเธรดมักเป็นวิธีที่มีประสิทธิภาพที่สุดในการใช้พลังการคำนวณที่มากขึ้นในโปรแกรมเดียว โปรเซสเซอร์สมัยใหม่บางตัวได้รับการปรับแต่งอย่างมากด้วยเทคนิคต่างๆ รวมถึงการประมวลผลแบบไม่เรียงลำดับแต่มีตรรกะที่ซับซ้อนในการตรวจจับว่าเมื่อใดจึงจะสามารถทำได้โดยไม่ละเมิดความหมายของฟอน นอยมันน์ (von Neumann semantics) ของแบบจำลองการเขียนโปรแกรมเชิงตรรกะ แคชคำสั่งและแคชข้อมูลแยกต่างหากถูกนำมาใช้กันอย่างแพร่หลาย ทำให้ฮาร์ดแวร์เป็นสถาปัตยกรรมแบบ Modified Harvardแต่ก็มีตรรกะในการตรวจจับกรณีที่การปรับแต่งล้มเหลว เพื่อให้สามารถเรียกใช้โค้ดที่แก้ไขตัวเองได้
โปรเซสเซอร์เฉพาะทางบางตัว (รวมถึงGPU ) เป็น อุปกรณ์ MIMD ( Multiple Instruction, Multiple Data ) ที่มีความกว้างของแกนประมวลผลสูงมาก CPU ทั่วไปมักมีหลายแกนประมวลผล แต่แต่ละแกนก็เร็วพอที่จะทำให้โปรแกรมหลายโปรแกรมทำงานได้เร็วโดยไม่ต้องใช้การประมวลผลแบบขนาน (โดยทั่วไปจะใช้เธรดในการจัดการกับอินพุตหรือเอาต์พุตแบบอะซิงโครนัส โดยเฉพาะในGUI ) CPU ทั่วไปจัดเป็นอุปกรณ์ MIMD ในทางเทคนิค แต่โดยปกติแล้วจะเรียกเฉพาะฮาร์ดแวร์ที่ออกแบบมาสำหรับการเขียนโปรแกรม MIMD โดยเฉพาะเท่านั้นว่า MIMD
ภาษาโปรแกรมที่ใช้กันอย่างแพร่หลายหลายภาษา เช่นC , C++และJavaไม่ได้เป็นภาษาแบบ von Neumann อย่างเคร่งครัดอีกต่อไปแล้ว เนื่องจากการเพิ่มการสนับสนุนการประมวลผลแบบขนานในรูปแบบของเธรด อย่างไรก็ตาม ภาษา ที่ไม่ใช่ แบบ von Neumann อย่างชัดเจนส่วนใหญ่ก็เป็น ภาษา เชิงฟังก์ชัน เช่นกัน และยังไม่เป็นที่นิยมใช้กันอย่างแพร่หลาย