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


20

ฉันสงสัยว่าหน่วยการคำนวณแบบขนานขนาดใหญ่ที่มีอยู่ในการ์ดกราฟิกในปัจจุบัน (ตัวอย่างที่ตั้งโปรแกรมได้ในOpenCLเป็นต้น) ดีพอที่จะจำลองออโตเซล 1D เซลลูลาร์ (หรืออาจเป็นออโตเซล 2D)?

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

ฉันคิดว่าออโตมาร์เซลลูลาร์ 2D จะต้องใช้แบนด์วิดท์มากขึ้นสำหรับการสื่อสารระหว่างส่วนต่าง ๆ ของชิปมากกว่าออโตมาตา 1D

ฉันสนใจคำถามเดียวกันในกรณีของการเขียนโปรแกรม FPGA หรือชิปที่กำหนดเอง


บางทีมันอาจจะมีความเกี่ยวข้องมากกว่าเมื่อเปรียบเทียบกับชิป "เทียบเท่า" ที่จำลองออโตเซลแบบเซลลูลาร์แบบเดียวกันตามปกติ (การจัดเก็บเซลล์ในหน่วยความจำในรูปแบบปกติฟอน Newmann)
jmad

คำถามที่ดี. ฉันไม่รู้ว่าอัลกอริทึมชนิดใดทำงานได้ดีบน GPU ดังนั้นฉันจึงรอคำตอบ
Raphael

1
แม้จะมี FPGAs แต่ประสบการณ์ก็เป็นประสบการณ์ ที่เกี่ยวข้องบางทีนี่และที่นี่

คำตอบ:


7

คำถามที่ยอดเยี่ยม ฉันเชื่อว่าคำตอบคือใช่

การพัฒนาหุ่นยนต์เซลลูล่าร์นั้นเทียบเท่ากับการทำการคำนวณลายฉลุ ในบางตาราง 1D, 2D หรือ 3D ค่าจุดต่อเนื่อง (หรือเซลล์) จะถูกคำนวณตามค่าสุดท้ายของพื้นที่ใกล้เคียงของจุด ใน CA 1D แบบง่ายย่านนี้อาจเป็นเซลล์และสองเซลล์ทางซ้ายและขวา มีตัวอย่างมากมายของการคำนวณแบบสเตนเลสบน GPUs; ชุดเกณฑ์เปรียบเทียบ SHOC ของ ORNL สำหรับ OpenCL / CUDA มีตัวอย่างลายฉลุ 2 มิติเป็นต้น

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

คำตอบนี้จะดีขึ้นมากถ้าฉันจะยกตัวอย่าง แต่ตอนนี้ฉันยุ่งเกินกว่าที่จะเขียนรหัสใด ๆ ในตอนนี้ ... แต่ในทางทฤษฎีแล้วฉันคิดว่ามันควรจะเป็นไปได้ที่จะจำลอง CAs บน GPU ได้อย่างมีประสิทธิภาพ การคำนวณ มีสิ่งที่ต้องพิจารณามากมายในการเขียนการคำนวณ stencil ที่ดีสำหรับ GPUs


5

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

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

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

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

สรุป: - หากคุณต้องการดูสถานะตัวกลางทั้งหมด GPU เป็นวิธีที่มีประสิทธิภาพมากที่สุด - ถ้าคุณไม่ต้องการปริมาณที่จะพิสูจน์ว่า ASIC มีสิ่งที่ดีกว่า FPGA อาจไม่มีข้อได้เปรียบเพียงพอ มี


2

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

โดยทั่วไปแล้วใช่คอมพิวเตอร์ GPU เป็นทางเลือกที่ดีที่สุดในฮาร์ดแวร์มาตรฐานสำหรับทุกคน

รายละเอียดเพิ่มเติม; ในทางทฤษฎีภายใต้โมเดลรถเข็นต้นทุนขั้นตอนต่อเวลานั้นแน่นอนคุณรู้อยู่แล้วว่า อย่างไรก็ตาม GPU นั้นแตกต่างจาก PRAM เล็กน้อยเนื่องจากหน่วยความจำมีค่าใช้จ่ายสูงและแบ่งออกเป็นลำดับชั้นที่แตกต่างกัน (ควรพิจารณารุ่น PMH สำหรับการวิเคราะห์เชิงทฤษฎีที่ละเอียดกว่า) นอกจากนี้เธรดทำงานในกลุ่มหรือวิปริตพวกเขาเป็นการคำนวณ lockstep ที่คืบหน้าในทาง SIMD รูปแบบการเขียนโปรแกรมของ GPU ทำงานร่วมกับแนวคิดของกริด (CUDA) หรือพื้นที่ทำงานO(1)(OpenCL) ซึ่งเป็นการแมปแบบ 1 ต่อ 1 ไปยังพื้นที่ของการคำนวณออโตเซลแบบเซลลูลาร์ นี่เป็นคุณสมบัติสำคัญในการระบุและตระหนักว่า GPU เป็นมิตรกับ CA รายละเอียด Tecnical: ถ้าแตกต่างวิปริตได้รับการปฏิบัติอย่างถูกต้อง (เปลี่ยนถ้า-อื่นเงื่อนไขโดยนิพจน์ทางคณิตศาสตร์ปิด), acceses หน่วยความจำจะรวมตัวกันและ (จำนวนของเซลล์และจำนวนตัวประมวลผล) แล้วใครจะบอกว่าการคำนวณ ความซับซ้อนเป็นประเภทของ(1)nPnPO(1)

ในด้าน FPGA และ ASIC ฉันรู้ว่ามีงานวิจัยเกี่ยวกับการสร้าง CA เชิงกายภาพเป็นกริดของประตูลอจิกกับรัฐซึ่งทั้งหมดเชื่อมต่อกันด้วยเพื่อนบ้าน เช่นอาร์เรย์ systolic แนวคิดนี้จะไม่ใช้หน่วยความจำร่วมอีกต่อไป แต่จะต้องพึ่งพาสถานะของแต่ละโหนดในกริดแทน เครื่องจักรประเภทนี้จะเป็นการปฏิวัติตั้งแต่นั้นเราสามารถหยุดพูดคุยเกี่ยวกับคอมพิวเตอร์จำลอง CA และเริ่มพูดคุยเกี่ยวกับ CA ที่ทำงานในฐานะคอมพิวเตอร์ (บาง CA กำลังทำให้สมบูรณ์)

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