FPGA สามารถทำงานกับพีซีแบบมัลติคอร์ได้หรือไม่?


20

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

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

รายละเอียดเพิ่มเติม: อัลกอริทึมทำงาน 20 เครือข่ายประสาทเทียมโดยใช้อินพุตที่ป้อนผ่านการแปลงแพ็คเก็ตเวฟเล็ต

ขอบคุณทุกท่านสำหรับคำตอบที่ดี


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

1
คิดเกี่ยวกับการใช้ GPU สำหรับการประมวลผลเครือข่ายประสาท GPU มีหลายหน่วยที่สามารถคูณจำนวนจุดลอยตัวในแบบคู่ขนาน
Kamil

@ntoskrnl ฉันคิดว่าเขามี i5 หรือ cpu ที่ดีกว่า (4 คอร์) ดังนั้นประสิทธิภาพการทำงานบนเดสก์ท็อปหรือเซิร์ฟเวอร์จะเป็นไปตามความเร็วของนาฬิกา บางทีใน Xeon เขาสามารถเพิ่มประสิทธิภาพเล็กน้อย (20%?) ด้วยแคชขนาดใหญ่และแบนด์วิดธ์หน่วยความจำที่ดีขึ้น แต่นั่นไม่มาก
Kamil

CPU อะไรที่คุณมี
Kamil

เวลาที่น่าสนใจของคำถามเรามีคำถามที่คล้ายกันใน networkengineering.SE
Mike Pennington

คำตอบ:


23

เพื่อนร่วมงานของผม benchmarked นี้และมาสรุปว่า FPGAs จะมีประสิทธิภาพสูงกว่าเครื่องคอมพิวเตอร์เมื่อคุณมีมากกว่าประมาณ 100 อิสระ , จำนวนเต็มงานที่จะพอดีงาน FPGA สำหรับงานที่มีคะแนนลอยตัว GPGPU จะชนะ FPGA ไปตลอด สำหรับการทำงานแบบมัลติเธรดหรือ SIMD แบบแคบซีพียูจะได้รับการปรับให้เหมาะสมที่สุดและทำงานที่ความเร็วสัญญาณนาฬิกาสูงกว่า FPGA โดยทั่วไป

caveats อื่น ๆ : งานจะต้องเป็นอิสระ หากมีการพึ่งพาข้อมูลระหว่างงานนั้นจะ จำกัด เส้นทางที่สำคัญของการคำนวณ FPGA นั้นดีสำหรับการประเมินบูลีนและเลขจำนวนเต็มรวมถึงอินเทอร์เฟซที่มีความหน่วงต่ำ แต่ไม่เหมาะสำหรับปริมาณงานหรือหน่วยความจำลอยตัว

หากคุณต้องเก็บภาระงานไว้ใน DRAM นั่นจะเป็นปัญหาคอขวดมากกว่าตัวประมวลผล


3
ในการตัดสินใจว่า DRAM นั้นเป็นขีด จำกัด คุณต้องทราบด้วยว่า FPGA มี RAM ขนาดเล็กจำนวนมากกระจาย (เช่น 500 บล็อก 9kbit RAM อิสระ) ที่สามารถอ่าน / เขียนได้ในช่วงเวลาเดียวกัน
maxy

19

FPGA ทำงานแตกต่างจากโปรเซสเซอร์อย่างสิ้นเชิง

สำหรับโปรเซสเซอร์คุณเขียนซอฟต์แวร์ที่บอกฮาร์ดแวร์ว่าต้องทำอย่างไร ใน FPGA คุณอธิบาย "สิ่งที่ฮาร์ดแวร์ควรมีลักษณะ" ภายใน ราวกับว่าคุณกำลังสร้างชิปที่ทำขึ้นเป็นพิเศษสำหรับอัลกอริทึมของคุณ

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

สำหรับเครือข่ายประสาทเทียม FPGA เป็นตัวเลือกที่ยอดเยี่ยม มีการวิจัยอย่างต่อเนื่องในพื้นที่นี้


ที่จริงแล้วการพัฒนา FPGA มักใช้ภาษาเช่น Verilog หรือ VHDL ซึ่งอธิบายพฤติกรรมมากกว่าการนำไปใช้ - ความจริงซึ่งบางครั้งมีประโยชน์ หากมีการระบุการใช้งาน, ความล่าช้าในการขยายพันธุ์จะค่อนข้างสอดคล้องกัน แต่ในภาษาพฤติกรรมที่พวกเขาจะไม่ได้รับประกันว่าจะในเชิงบวก สิ่งสำคัญที่มีการออกแบบ FPGA คือภาษาทำให้ง่ายมากที่จะมีส่วนต่าง ๆ ของชิป (หลายร้อยหรือหลายพัน) ของพฤติกรรมที่เรียบง่ายพร้อมกันพฤติกรรม
supercat

13

มันขึ้นอยู่กับอัลกอริทึมมาก แต่หลักการสามารถอธิบายได้ค่อนข้างง่าย

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

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

คุณยังสามารถใช้ GPGPU เพื่อทำงานที่คล้ายกันเนื่องจากทำจากแกนที่เรียบง่ายกว่ามากมาย


GPGPU เป็นอินพุตที่ยอดเยี่ยมสำหรับเครือข่ายประสาทเทียมโดยใช้!
Botnic

นอกจากนี้ยังมี ASIC เครือข่ายประสาท Intel ใช้วิธีสร้างเซลล์ประสาท 16 เซลล์ในยุค 80
Lior Bilia

@ LiorBilia ดีฉันไม่รู้อะไรเกี่ยวกับพวกเขา :) ฉันไม่เคยทำงานกับเครือข่ายประสาทและน้อยมากกับ FPGA
clabacchio

@clabacchio ซอฟต์แวร์โครงข่ายประสาทเทียมเป็นโปรแกรมที่ส่วนใหญ่ทำการคูณและเปรียบเทียบการทำงานกับตัวเลขทศนิยม โดยส่วนใหญ่ฉันหมายถึง ... 95% ขึ้นไป
Kamil

ซีพียูทั่วไปสามารถทำได้ดีมากในการรวมตัวเลข 8 บิตจำนวนมากเข้าด้วยกัน บนเครื่องที่รวดเร็วเวลาในการดำเนินการจะถูกครอบงำโดยค่าใช้จ่ายในการดึงข้อมูลจากหน่วยความจำ (99% ของการดึงรหัสจะมาจากการจับ) ตัวอย่างที่น่าสนใจกว่านั้นคือการทำงานกับข้อมูลที่เข้ารหัสโดยใช้รูปแบบที่ต้องการการเตรียมการที่“ ผิดปกติ” หรือการเรียงสับเปลี่ยนของบิต ตัวอย่างเช่นหากชิ้นส่วนของข้อมูลการสุ่มตัวอย่างวิดีโอส่งคืนบิต interleaves สำหรับสีแดงสีเขียวและสีน้ำเงิน FPGA สามารถจัดเรียงบิตได้อย่างง่ายดาย ซีพียูทั่วไปจะมีปัญหามากขึ้น
supercat

6

อุปกรณ์คอมพิวเตอร์มีความเชี่ยวชาญประมาณ 3 ระดับ:

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

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

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

หากคุณคิดว่าเป็น "แกนประมวลผล" ให้มองมันด้วยวิธีนี้: CPU มี 4, 6 หรือ 8 แกนใหญ่ที่สามารถทำทุกอย่างได้ ASICS มักมีแกนหลักหลายพันแกน แต่มีขนาดเล็กมากสามารถทำได้เพียงอย่างเดียวเท่านั้น

คุณสามารถดูชุมชนการขุด bitcoin พวกเขาทำแฮช SHA256

  • CPU core i7: 0.8-1.5 M hash / s
  • FPGA: 5-300M แฮช / s
  • ASIC: hash 12000M ต่อชิปเล็กหนึ่งตัว 2000000M (yep, 2T) hash / s สำหรับอุปกรณ์ 160 ชิปหนึ่งตัว

แน่นอนว่าเด็ก ASIC เหล่านั้นมีค่าใช้จ่ายเกือบ $ 2,000 เมื่อมีการผลิตเป็นจำนวนมาก แต่มันให้ความคิดแก่คุณเกี่ยวกับวิธีที่แจ็คของการซื้อขายทั้งหมดสามารถทำหน้าที่เปรียบเทียบกับผู้เชี่ยวชาญได้

คำถามเดียวคือ FPGA สามารถให้คุณประหยัดได้มากกว่าการออกแบบที่จะเสียค่าใช้จ่ายหรือไม่ แน่นอนแทนที่จะเรียกใช้บนแล็ปท็อปหนึ่งตัวคุณสามารถลองใช้กับ 20 PCS ได้


Hashing เป็นกรณีพิเศษมากแม้ว่า; โปรดทราบว่าเหรียญพิเศษที่ใช้การสแกนนั้น (โดยเจตนา) ไม่สามารถเร่งความเร็วได้มากโดยฮาร์ดแวร์เฉพาะ
pjc50

1
การแก้จุดบกพร่อง & ASIC มักจะจัดการในการจำลองก่อนที่จะส่งไปยังการผลิต ดังนั้นจึงมักจะ 6 เดือนหรือมากกว่าจากสเป็คในการผลิต การวินิจฉัยข้อบกพร่องหลังการผลิตนั้นมีราคาแพง แต่ก็เป็นไปไม่ได้
pjc50

และในขณะที่มันยากจริง ๆ แล้วอาจจะยากมากมีสิ่งต่าง ๆ เช่นการสแกนขอบเขตการทดสอบ JTAG และเทคนิคโดยตรงโดยใช้ FIB เป็นต้นดังนั้นจึงเป็นเรื่องที่เป็นไปไม่ได้ที่จะแก้ไขข้อบกพร่องเหล่านี้คุณเพียงแค่ต้องรู้ว่าคุณกำลังทำอะไร . ทุกวันนี้ ASIC อ้างถึงกระแสการออกแบบมากขึ้น (HDL, การสังเคราะห์, P&R) ที่อ้างถึงอุปกรณ์จริงเนื่องจากอุปกรณ์ส่วนใหญ่เป็น ASIC รวมถึงสิ่งต่างๆเช่นโปรเซสเซอร์ ARM
ตัวยึดตำแหน่ง

@ pjc50 ใช่นั่นคือจุดของฉัน - ในกรณีพิเศษความแตกต่างความเร็วเป็นอย่างมาก แต่ scrypt asics ยังคงใช้ซีพียูและ GPU อยู่ดี ไม่ใช่โดยปัจจัยล้าน (เช่นเดียวกับ sha) แต่ยังดีกว่า 100
Agent_L

@placeholder ใช่ แต่ถึงแม้ว่าคุณจะพบข้อผิดพลาดก็ไม่ได้ใช้มากสำหรับชิปเหล่านั้นทั้งหมดที่ผลิตแล้ว ฉันหมายถึง "การดีบั๊ก" ใน "การลบบั๊ก" ไม่ใช่แค่ "นี่มันคือ"
Agent_L

5

ใช่ FPGA สามารถทำงานได้ดีกว่าซีพียูสมัยใหม่ (เช่น Intel i7) ในงานบางอย่างที่จำเพาะเจาะจง แต่มีวิธีที่ง่ายกว่าและราคาถูกกว่าในการปรับปรุงประสิทธิภาพเครือข่ายประสาท

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

  1. ใช้SSE - ฉันเคยเห็นการใช้งานเครือข่ายนิวรัลง่าย ๆ ด้วยประสิทธิภาพที่ดีขึ้น 2-3 เท่า นี่อาจเป็นความคิดที่ดีถ้าคุณไม่มี GPU เฉพาะในแล็ปท็อปของคุณ

    ปรับปรุงความเร็วของเครือข่ายประสาทเทียมบน CPU โดย Vincent Vanhoucke และ Andrew Senior

  2. ใช้GPGPU (การคำนวณทั่วไปสำหรับหน่วยประมวลผลกราฟิก) - ฉันคิดว่าคุณสามารถเพิ่มประสิทธิภาพได้ 100-200x สำหรับ GPU แล็ปท็อประดับกลางเช่น GeForce 730M

    นี่คือการใช้งานเครือข่ายนิวรัล (และรหัสฟรี) ใช้ Nvidia CUDA

    วิธี GPGPU นั้นสามารถปรับขนาดได้อย่างมากหากในบางจุดคุณรู้ว่าคุณต้องการพลังการประมวลผลมากขึ้น - คุณสามารถใช้คอมพิวเตอร์เดสก์ท็อปที่มี GPU ที่ทรงพลังกว่าหรือแม้แต่ Nvidia Tesla K80 ที่มี 4992 คอร์ (ราคาแพง)


1
ปัญหาที่นี่คือการกำหนดประสิทธิภาพ หากเราหมายถึงเร็วกว่าใช่แล้ว fpga สามารถเร็วกว่า cpus ปกติ อย่างไรก็ตาม fpga นั้นไม่ค่อยมีความยืดหยุ่นเท่าซีพียูพวกมันถูกออกแบบมาให้ทำงานได้อย่างมีประสิทธิภาพเพียงแค่งานที่กำหนดไว้ล่วงหน้า การดำเนินงานอื่นจะหมายถึงการเปลี่ยนการเดินสายภายในจริง ๆ แล้วใช้
fpga
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.