อัลกอริทึมนั้นขึ้นอยู่กับสถาปัตยกรรมคอมพิวเตอร์หรือไม่?


22

ฉันอ่านที่ไหนสักแห่ง (ลืมหนังสือเล่มนี้) ว่าอัลกอริธึมเป็นอิสระจากสถาปัตยกรรมคอมพิวเตอร์ บางคนถึงกับบอกว่าอัลกอริธึมเป็นเครื่องคำนวณของตัวเองเหรอ?

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

ฉันคิดว่าฉันพลาดภาพใหญ่? ขอบคุณ


quicksort ดีกว่าแล้วรวมการเรียงลำดับ?
AK_

อัลกอริทึมแบบขนานสามารถทำงานบนสถาปัตยกรรมแบบเธรดเดียว การแบ่งส่วนเวลาได้รับการสนับสนุนโดยสถาปัตยกรรมส่วนใหญ่เหล่านั้นและใครบอกว่างานแบบขนานต้องทำงานพร้อมกัน? หาก A และ B เป็นแบบขนานทำไมคุณถึงไม่สามารถรัน A ดังนั้น B ได้? หรือสอดแทรกพวกเขาหากมีใครอาศัยอยู่ที่อื่น (แต่โดยทั่วไปแล้วเป็นความคิดที่ไม่ดี)

3
อัลกอริทึมที่ระบุไว้กับเครื่องบทคัดย่อ คอมพิวเตอร์ทั่วไปที่เป็นอุดมคติของคอมพิวเตอร์ส่วนบุคคลแบบมัลติคอร์ทุกวันนี้เรียกว่าPRAM (Parallel Random Access Machine ) ซึ่งบางครั้งอาจแบ่งเป็น EREW (อ่าน / เขียนหน่วยความจำพิเศษ) หรือ CRCW (อ่าน / เขียนหน่วยความจำพร้อมกัน)
rwong

@rwong: แล้วเครื่องนามธรรมทั้งหมดเป็นอิสระจากสถาปัตยกรรมคอมพิวเตอร์ถ้าอัลกอริทึมเป็นอย่างไร
ทิม

2
อัลกอริธึม (และโครงสร้างข้อมูล) สามารถปรับให้เหมาะสมสำหรับสถาปัตยกรรมเฉพาะเช่น B + Tree เป็นโครงสร้างข้อมูลที่เชื่อมโยงซึ่งเหมาะสำหรับสถาปัตยกรรมที่การอ่านบล็อกข้อมูลขนาดใหญ่ราคาถูกกว่าการอ่านบล็อกเล็ก ๆ หลายบล็อก
253751

คำตอบ:


20

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

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


13

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

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

แต่ความเร็วที่อัลกอริธึมทำงานขึ้นอยู่กับสถาปัตยกรรม และอัลกอริทึมบางตัวทำงานได้เร็วกว่าอื่น ๆ ขึ้นอยู่กับสถาปัตยกรรม

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

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

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


"แต่ความเร็วที่อัลกอริธึมทำงานขึ้นอยู่กับสถาปัตยกรรมและอัลกอริธึมบางตัวทำงานได้เร็วกว่าอื่น ๆ ขึ้นอยู่กับสถาปัตยกรรม" ฉันคิดว่านี่เป็นคำตอบที่มีค่า
Rıdvan Nuri Göçmen

4

"ดูเหมือนว่าอัลกอริธึมแบบขนานขึ้นอยู่กับสถาปัตยกรรมคู่ขนานเหรอ?"

ในความเห็นของฉันคำตอบนั้นง่าย ๆ : ไม่ ทั่วไปฉันได้รับคุณสมบัติเท่านั้น

  • ความเท่าเทียม
  • ขนาดคำ (ข้อ จำกัด ของทรัพยากรโดยปริยาย)

เมื่อคิดถึงสถาปัตยกรรมฮาร์ดแวร์

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

แน่นอนว่าอาจมีอัลกอริทึมบางอย่างซึ่งขึ้นอยู่กับชุดคำสั่งเพิ่มเติมบางชุด แต่อย่างน้อยทุกอย่างสามารถอธิบายได้ด้วยคณิตศาสตร์พื้นฐาน

ตัวอย่างเช่นการคำนวณควอนตัมค่า Big-O บางอย่างอาจมีการเปลี่ยนแปลงและจากนั้นฉันจะบอกว่า

"อัลกอริธึมเป็นอิสระจากสถาปัตยกรรมคอมพิวเตอร์"

ไม่เป็นความจริงอีกต่อไป


4

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

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

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


3

ในทางทฤษฎีอัลกอริทึมเป็นอิสระจากสถาปัตยกรรม คุณสามารถเลียนแบบสถาปัตยกรรมแบบขนานได้ตลอดเวลาบนระบบไทม์สเลดฉบับเดียว คุณสามารถให้เหตุผลเกี่ยวกับอัลกอริทึมที่ไม่มีสถาปัตยกรรมเลย หนังสือของ Knuth ใช้สถาปัตยกรรมแบบสวม

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


3

ใช่และไม่. ขึ้นอยู่กับข้อ จำกัด ที่คุณต้องการและเงื่อนไขที่จำเป็นในการเรียกใช้อัลกอริทึมของคุณ

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

ดังนั้นหลักการควรเป็นนามธรรมที่เป็นไปได้โดยไม่ต้องลงบัญชีฮาร์ดแวร์ใด ๆ

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

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

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

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

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

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

คำค้นหาที่เกี่ยวข้องที่คุณอาจสนใจ:


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

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

2

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

คำจำกัดความของอัลกอริทึมจาก Wikipedia:

ในวิชาคณิตศาสตร์และวิทยาการคอมพิวเตอร์อัลกอริทึมเป็นชุดปฏิบัติการแบบทีละขั้นตอน อัลกอริทึมที่มีอยู่ดำเนินการคำนวณ , การประมวลผลข้อมูลและเหตุผลอัตโนมัติ

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

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

จากนั้นคุณสามารถสร้างเครื่องที่สามารถทำ X, Y, Z .... แต่ละอันสามารถใช้ในอัลกอริทึมของคุณเป็นคำสั่ง แต่ถ้าพวกเขาทั้งหมดเกี่ยวกับการคำนวณปิด (ในความเป็นจริงไม่ใช่แบบโต้ตอบกำหนดดิจิตอลคำนวณขั้นตอนเล็ก ๆ ) จากนั้นหนึ่งสามารถพิสูจน์ได้ว่าเครื่องของคุณจะเทียบเท่ากับเครื่องทัวริง แต่ถ้าคุณตั้งเป้าหมายการคำนวณประเภทอื่น ๆ (ต่อค่าหรือการคำนวณแบบโต้ตอบ [แต่ฉันไม่แน่ใจว่าพวกเขาเป็นประเภทการคำนวณอื่นจริง ๆ ]) หรือแม้กระทั่งงานที่ไม่มีการคำนวณคุณสามารถนึกถึงเครื่องที่สามารถทำงานได้

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


1

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

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

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


1

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

อัลกอริทึมสำหรับการแปลงสตริงเป็น all-caps สามารถอธิบายได้ง่ายใน pseudocode ที่ไม่ขึ้นกับสถาปัตยกรรม แต่ในเวลาเดียวกันไม่มีอะไรหยุดคุณจากการอธิบายอัลกอริทึมสำหรับการแปลงสตริงเป็นตัวพิมพ์ใหญ่ทั้งหมดโดยเฉพาะบนสถาปัตยกรรม x86 สิ่งที่ต้องทำคือการมอบหมายการบ้าน x86 (คุณยังสามารถทำสิ่งนี้ได้ใน pseudocode - เพียงแค่ pseudocode ที่เกี่ยวข้องกับสถาปัตยกรรมนั้น!) ความจริงที่ว่าปัญหานี้เกิดขึ้นโดยเฉพาะสำหรับการทำสิ่งนี้บนสถาปัตยกรรม x86 ไม่ได้หมายความว่าคุณจะไม่มีอัลกอริทึมในการแก้ไข

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


1

อัลกอริทึมเป็นลำดับขั้นตอน พวกเขาไม่ได้ขึ้นอยู่กับสิ่งที่ดำเนินการ (หรือไม่)

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


0

พวกเขาแตกต่างกันในบริบทที่แตกต่างกันของปัญหา อัลกอริทึมคือชุดของขั้นตอนในการแก้ปัญหา บริบทของปัญหานี้อาจเป็นไปได้ในทางทฤษฎี ดังนั้นอัลกอริทึมของการแก้ปัญหาจึงขึ้นอยู่กับสิ่งใดก็ตามในจักรวาลที่เราจินตนาการได้ ให้ฉันอธิบายด้วยตัวอย่าง สมมติว่าคุณได้รับมอบหมายงานให้

สร้างอัลกอริทึมที่จะกระจายโหลดไปยังหลายคอร์เมื่อมัลติคอร์พร้อมใช้งาน

ตอนนี้คุณนึกภาพว่าอัลกอริทึมของคุณจะขึ้นอยู่กับสถาปัตยกรรมหรือไม่? แน่นอนใช่

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