FPGA จะทำได้ดีกว่าซีพียูได้อย่างไร?


55

ฉันได้ยินคนที่ใช้ FPGA เพื่อปรับปรุงประสิทธิภาพของระบบที่ทำสิ่งต่าง ๆ เช่นการขุด bit-coin การซื้อขายทางอิเล็กทรอนิกส์และการพับโปรตีน

FPGA จะแข่งขันกับประสิทธิภาพของ CPU ได้อย่างไรเมื่อโดยทั่วไปแล้วซีพียูทำงานอย่างน้อยลำดับความเร็วที่เร็วขึ้น (ในแง่ของความเร็วสัญญาณนาฬิกา)


13
FPGA ทำทุกอย่างในครั้งเดียว
Ignacio Vazquez-Abrams

คำตอบ:


48

CPU เป็นอุปกรณ์ประมวลผลตามลำดับ พวกเขาแบ่งอัลกอริทึมเป็นลำดับของการดำเนินการและดำเนินการทีละครั้ง

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

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

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

ราคาที่คุณจ่ายสำหรับข้อดีคือการใช้พลังงานและ $$$ ของ


2
+1; อย่างไรก็ตาม FPGA นั้นไม่ได้มีความไดนามิกเท่ากับซีพียูซึ่งเป็นเหตุผลที่ว่าทำไมซีพียูจึงเหมาะสำหรับพีซีมากกว่าปกติ
Nick Williams

17
"ราคาที่คุณจ่ายสำหรับข้อดีคือการใช้พลังงานและ $$$" - สิ่งนี้มักจะเป็นจริง แต่คุณสามารถเอาชนะ Intel Xeon หลายเครื่องระดับไฮเอนด์ได้สูงถึง $ 1,000 ด้วย Xilinx Spartan-6 ราคา $ 50 ต่ำสุดสำหรับอัลกอริธึมมากมาย แต่โดยทั่วไปแล้วจะใช้เวลาในการวิศวกรรมค่อนข้างนานและคุณอาจได้รับการออกแบบที่กำหนดเองซึ่งใช้งานได้เพียงแอปพลิเคชั่นเดียวและยากที่จะเปลี่ยนแปลง ดังนั้นการแลกเปลี่ยนไม่ได้เป็นเพียงแค่พลังและเงินเท่านั้น แต่เวลาในการพัฒนาอัลกอริทึมความสามารถในการนำกลับมาใช้ใหม่และความยืดหยุ่น (แม้ว่าคุณจะสามารถโต้แย้งเวลาได้ == เงิน)
wjl

markt, เกี่ยวกับประโยคสุดท้ายของคุณ, FPGAs ใช้พลังงานต่ำกว่า CPU ไม่มากใช่ไหม? มีอุปกรณ์หลากหลายสำหรับทั้ง CPU และ FPGAs แต่ถ้าเราดูอุปกรณ์ที่ใช้สำหรับการขุด bit-coin นั้นไม่ใช่ซีพียูที่ใช้สำหรับงานเหล่านั้นที่กินไฟมากกว่า FPGA ที่น่าจะเป็น ใช้?
David Gardner

4
@David: เมื่อพูดถึงการขุด Bitcoin ตัวชี้วัดที่เกี่ยวข้องคือจำนวนของแฮชต่อวัตต์ Markt กำลังพูดถึงการใช้พลังงานโดยรวม นั่นคือ FPGA ที่กำหนดอาจใช้พลังของซีพียูทั่วไป 3 เท่า แต่จะเร็วกว่าการขุด Bitcoin มากกว่า 3 เท่า; ดังนั้นสำหรับ Bitcoin นั้นเป็นชัยชนะ
Billy ONeal

2
@Billy: จำนวนของแฮชต่อวัตต์·วินาทีไม่ใช่ต่อวัตต์
Paŭlo Ebermann

34

Markt มีสิทธิ์ส่วนใหญ่ แต่ฉันจะโยน 2 เซ็นต์ของฉันที่นี่:

ลองนึกภาพว่าฉันบอกคุณว่าฉันต้องการเขียนโปรแกรมที่กลับคำสั่งของบิตภายในจำนวนเต็ม 32 บิต บางสิ่งเช่นนี้

int reverseBits(int input) {
    output = 0;
    for(int i = 0;i < 32;i++) {
        // Check if the lowest bit is set
        if(input & 1 != 0) {
            output = output | 1; // set the lowest bit to match in the output!
        }

        input = input >> 1;
        output = output << 1;
    }
    return output;
}

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

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

มีหลายสิ่งที่ซีพียูใช้งานทั่วไปสามารถทำได้ แต่มีข้อ จำกัด เราตั้งค่าคำสั่งทั่วไปและแบบง่ายซึ่งจำเป็นต้องขยายเข้าไปในรายการคำสั่งง่าย ๆ เพื่อทำงานบางอย่างให้เสร็จ ดังนั้นฉันสามารถทำให้ซีพียูเอนกประสงค์มีคำสั่งเช่น "reverse bit order สำหรับ 32 bit register" และให้ CPU มีความสามารถเช่นเดียวกับ FPGA ที่เราเพิ่งสร้างขึ้น แต่มีคำแนะนำที่เป็นประโยชน์มากมายเช่นนี้มากมาย ใส่เฉพาะในสิ่งที่รับประกันค่าใช้จ่ายในซีพียูที่เป็นที่นิยม

FPGAs, CPLDs และ ASICs ทั้งหมดให้คุณเข้าถึงฮาร์ดแวร์แบบดิบซึ่งช่วยให้คุณกำหนดการดำเนินการที่บ้าเช่น "ถอดรหัส AES256 เข้ารหัสไบต์ด้วยคีย์" หรือ "ถอดรหัสเฟรมของวิดีโอ h.264" สิ่งเหล่านี้มีเวลาแฝงมากกว่าหนึ่งรอบสัญญาณนาฬิกาใน FPGA แต่สามารถนำไปใช้ในมารยาทที่มีประสิทธิภาพมากกว่าการเขียนการดำเนินการในรหัสแอสเซมบลีวัตถุประสงค์ทั่วไปหลายล้านบรรทัด สิ่งนี้ยังมีประโยชน์ในการทำให้ FPGA / ASIC สำหรับการดำเนินการหลายอย่างเพื่อการใช้พลังงานอย่างมีประสิทธิภาพมากขึ้นเพราะพวกเขาไม่จำเป็นต้องทำงานนอกโลกมากนัก!

Parallelism เป็นอีกส่วนที่ Markt ชี้ให้เห็นและในขณะที่มีความสำคัญเช่นกันสิ่งสำคัญคือเมื่อ FPGA ทำการขนานสิ่งที่มีราคาแพงในซีพียูในแง่ของวงจรที่จำเป็นในการดำเนินการ เมื่อคุณเริ่มพูดว่า "ฉันสามารถทำงานใน 10 FPGA รอบงานซึ่งใช้ CPU 100,000 รอบของฉันและฉันสามารถทำงานนี้ใน 4 รายการพร้อมกันในเวลา" คุณสามารถเห็นได้อย่างง่ายดายว่าทำไม FPGA อาจเป็นจำนวนมาก เร็วกว่าซีพียู!

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


2
สำหรับตัวอย่างของการย้อนกลับบิต (และการสลับบิต / การเลือกอื่น ๆ ทั้งหมด) มันไม่ได้ใช้เวลา 1 รอบนาฬิกาใช้เวลา 0 ในตัวอย่างของคุณมันใช้เวลา 1 รอบนาฬิกาในการจัดเก็บข้อมูลใน latchซึ่งไม่ใช่ การดำเนินการเดียวกัน ใช้เวลา 1 รอบนาฬิกาไม่ว่าคุณจะย้อนกลับบิตหรือไม่ การทำงานของการย้อนกลับบิตคือ 0 รอบนาฬิกา ไม่มีค่าใช้จ่ายการกำหนดเส้นทางที่แตกต่างกัน ความแตกต่างไม่ใช่แค่ความหมายโดยเฉพาะอย่างยิ่งเมื่อคุณเริ่มเพิ่มสิ่งต่าง ๆ ตัวอย่างเช่นใช้เวลานานเท่าใดในการเลื่อนคำ 32- บิตลง 3 บิตแล้วสลับสับเปลี่ยนกันทุกอันแล้วสลับกลับ
wjl

1
"โมดูล FPGA-CPU ไฮบริด" - มีอยู่ในตลาดมาเป็นเวลานาน (ดูxilinx.com/products/silicon-devices/soc/zynq-7000/index.htmเพื่อความสำเร็จที่ทันสมัย) แต่ถึงแม้จะไม่มี การสนับสนุนพิเศษการรวมซอฟต์แวร์ & HDL นั้นทำได้โดยทั่วไปโดยใช้ซีพียูนิ่มใน FPGA บนผ้า
wjl

@wjl คุณพูดถูกแล้วว่าในทางเทคนิคแล้วมันไม่มีวงจรในการดำเนินการเอง ฉันจะยืนยันว่าตัวอย่างของคุณนั้นแตกต่างกันเพียงความหมาย แต่ส่วนใหญ่เป็นเพราะการดำเนินการทั้งสามอย่างมีเหตุผลแปลเป็นรูปแบบบิตคงที่ (เช่นฉันเริ่มต้นด้วย b1b2b3b4 และฉันลงท้ายด้วย b3b1b4b2) นี่คือประเด็นของฉันในคำตอบทั้งหมด ฉันพยายามชี้ให้เห็นว่าการอธิบายการดำเนินการเป็นชุดของขั้นตอนมักจำเป็นเฉพาะเมื่อคุณมีการจัดชุดคำสั่ง / ประตูคงที่
Kit Scuzz

@wjl: วิธีที่ดาวิดการ์ดเนอร์ถามคำถามดูเหมือนว่าเขาจะพูดว่า "CPU" เทียบเท่ากับ Intel หรือ AMD x86 / x86_64 ที่มีการโอเวอร์คล็อกและซีพียูที่ได้รับการปรับแต่งอย่างสูง มี "ซีพียู" ที่อ่อนนุ่มมากมาย แต่ฉันไม่ได้ออกแบบมาเพื่อนั่งใน FPGA ที่สามารถโอเวอร์คล็อกได้เหมือนกับ i7 และพวกมันก็เกือบจะไม่ได้รับการปรับให้เหมาะสมหรือมีความสามารถ สำหรับลูกผสมฉันหมายถึงอะไรมากกว่านี้เช่นnewsroom.intel.com/docs/DOC-1512ซึ่งมีอยู่จริง
Kit Scuzz

1
Zynq ไม่ได้แย่ไปกว่าโปรเซสเซอร์ (ARM Cortex-A9 - เป็นสิ่งเดียวกันกับที่ใช้งานคอมพิวเตอร์แท็บเล็ต ฯลฯ ) แต่ฉันยอมรับว่ามันยอดเยี่ยมมากที่จะมี FPGA ในตัวด้วยความเร็วสูง x86_64 =)
wjl

25

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

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

ความแตกต่างพื้นฐานคือสิ่งที่เราซ้อนทับอยู่บนซิลิคอน เป็นไปไม่ได้ที่มนุษย์คนหนึ่งจะเข้าใจรายละเอียดทั้งหมดของการออกแบบ CPU ที่ทันสมัยจากซิลิกอนไปจนถึง IC ที่บรรจุไว้ ในฐานะที่เป็นส่วนหนึ่งของกระบวนการทางวิศวกรรมเราแบ่งปัญหาที่ซับซ้อนออกเป็นปัญหาเล็ก ๆ ที่จัดการได้ซึ่งมนุษย์สามารถล้อมรอบ

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

  1. ก่อนอื่นเรามีวิศวกรที่รู้วิธีสร้างทรานซิสเตอร์จากซิลิคอน พวกเขารู้วิธีการออกแบบทรานซิสเตอร์ขนาดเล็กที่จิบพลังงานและเปลี่ยนในอัตรา 10 หรือ 100 กิกะเฮิร์ตซ์และพวกเขารู้วิธีการออกแบบทรานซิสเตอร์ขนาดเล็กที่สามารถขับสัญญาณที่มีพลังมากพอที่จะส่งพวกมันออกจากแพ็คเกจ IC และทั่ว PCB ไปยังชิปอื่น

  2. จากนั้นเรามีนักออกแบบลอจิกดิจิตอลที่รู้วิธีนำทรานซิสเตอร์เหล่านั้นมารวมกันที่ห้องสมุดที่มีเซลล์ตรรกะต่าง ๆ นับร้อย ประตูลอจิก flops พลิก muxes และส่วนเสริมเพื่อชื่อไม่กี่ ทั้งหมดในการกำหนดค่าที่หลากหลาย

  3. ต่อไปเรามีกลุ่มวิศวกรที่รู้วิธีนำบล็อกดิจิตอล (และบางครั้งอนาล็อก) เข้าด้วยกันเพื่อสร้างบล็อกการทำงานระดับสูงขึ้นเช่นเดียวกับตัวรับส่งสัญญาณความเร็วสูงตัวควบคุมหน่วยความจำตัวทำนายสาขา ALUs เป็นต้น

  4. จากนั้นเรามีนักออกแบบ CPU เพื่อออกแบบ CPU ระดับสูงโดยดึงหน่วยการทำงานเหล่านั้นเข้าด้วยกันเป็นระบบที่สมบูรณ์

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

  1. เราอาจมีคอมไพเลอร์ C ที่คอมไพล์ดังกล่าวเป็นรหัสแอสเซมบลี (อาจผ่านการเป็นตัวแทนระดับกลาง)
  2. เราสามารถเพิ่มสิ่งที่เป็นนามธรรมด้านบนของ C เพื่อให้ได้ภาษาเชิงวัตถุ
  3. เราอาจจะเขียนเครื่องเสมือนบน C หรือ C ++ เพื่อให้เราสามารถตีความสิ่งต่าง ๆ เช่นรหัส Java byte

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

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

ตอนนี้เปรียบเทียบ abstractions เหล่านั้นกับสิ่งที่จำเป็นสำหรับ FPGA โดยพื้นฐานแล้ว abstractions FPGA หยุดที่ # 2 ในรายการด้านบน FPGA ช่วยให้นักพัฒนาสามารถทำงานในเลเยอร์ตรรกะแบบดิจิทัล มันค่อนข้างซับซ้อนกว่านั้นเพราะ CPU นั้น 'เข้ารหัสยาก' ที่เลเยอร์นี้และ FPGA จะต้องถูกกำหนดค่า ณ รันไทม์ (ซึ่ง BTW คือสาเหตุที่ CPU มักจะทำงานที่ความถี่สูงกว่ามาก) แต่ความจริงที่สำคัญที่สำคัญคืออยู่ไกล abstractions สำหรับ FPGAs น้อยกว่าสำหรับ CPU

ดังนั้นทำไม FPGA ได้เร็วกว่า CPU? ในสาระสำคัญเป็นเพราะ FPGA ใช้ abstractions น้อยกว่า CPU ซึ่งหมายความว่านักออกแบบทำงานใกล้ชิดกับซิลิคอน เขาไม่จ่ายค่าใช้จ่ายของเลเยอร์สิ่งที่เป็นนามธรรมมากมายซึ่งจำเป็นสำหรับซีพียู เขาใช้รหัสในระดับต่ำกว่าและต้องทำงานให้หนักขึ้นเพื่อให้ได้ฟังก์ชั่นการใช้งานที่กำหนด แต่รางวัลที่เขาได้รับมีประสิทธิภาพสูงกว่า

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

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


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

21

ในขณะที่คำตอบอื่น ๆ ทั้งหมดนั้นถูกต้อง แต่ก็ยังไม่มีคำตอบใด ๆ จากตัวอย่างการขุด bitcoin จากคำถามของคุณซึ่งเป็นตัวอย่างที่ดี การขุด Bitcoin เกี่ยวข้องกับการคำนวณฟังก์ชั่นการเข้ารหัสลับซ้ำ ๆ กัน SHA-256 ของผลลัพธ์จากการคำนวณ SHA-256 อีกครั้งของข้อมูลที่มีการเปลี่ยนแปลงจำนวนเต็ม 32 บิตเดียวจนกระทั่งแฮชที่ได้นั้นมีคุณสมบัติบางอย่าง แต่ละ SHA-256 ประกอบด้วยการทำซ้ำ 64 ครั้งของอัลกอริทึมเดียวกันที่เกี่ยวข้องกับการเพิ่ม 32 บิตบิตการเปลี่ยนแปลงและการดำเนินการบิตบิตเพิ่มเติม

หากคุณตั้งโปรแกรมลูปนี้บน CPU แบบ 32 บิต (หรือมากกว่า) คุณจะพบชุดคำสั่งที่เหมาะสมมากสำหรับงาน --- SHA-256 ได้รับการออกแบบให้ทำงานได้อย่างมีประสิทธิภาพบน CPU คุณจะยังคงใช้งานเพียง 2% ของพื้นที่ซิลิคอนของ CPU ที่ทันสมัยพร้อมฟังก์ชั่นการใช้งานในระดับสูงเช่นการแคชการคูณการหารการดำเนินการจุดลอยการแยกสาขาและการคาดการณ์ brach เป็นต้นซึ่งไม่ได้ใช้เลย การเพิ่มประสิทธิภาพสำหรับงานนี้โดยเฉพาะ

ในฮาร์ดแวร์ที่สามารถกำหนดค่าได้เช่น FPGA คุณเพียง แต่นำไปใช้เพียง 2% และเพิ่มประสิทธิภาพให้มากขึ้นโดยลืมเกี่ยวกับการเรียกใช้โค้ดทั้งหมดแทนที่จะออกแบบประตูเพื่อคำนวณโดยตรงแต่ละฟังก์ชั่นย่อยซ้ำ ๆ ไปป์ไลน์ที่แต่ละของพวกเขาผ่านผลลัพธ์ไปยังนาฬิกาทุกกระบอกสูบและทำซ้ำ 128 ครั้ง (และด้วยตรรกะเพิ่มเติมพิเศษบางอย่างที่แต่ละ SHA-256 เริ่มต้นและสิ้นสุด) คุณจะได้รับผลลัพธ์ทุกรอบนาฬิกา (สำหรับบางที 100 ล้านแฮชต่อวินาทีใน FPGA ที่โฆษณาเพื่อสนับสนุน 300 MHz บนตรรกะที่ง่ายกว่านี้) ในขณะที่ใช้ CPU ที่ทันสมัยคุณสามารถคาดหวังผลหนึ่งครั้งทุกสองสามพันรอบนาฬิกาต่อหนึ่งแกนในแต่ละแกนกล่าว 10 ล้านแฮชต่อวินาที -GHz CPU

หากตัวอย่างนี้เป็นที่สนใจของคุณคุณอาจต้องการดูคำตอบที่เกี่ยวข้องของฉันเกี่ยวกับ internals ของ ASIC miners บน bitcoin.stackexchange เนื่องจากผู้ปฏิบัติงาน FPGA จำนวนมากทำงานในลักษณะเดียวกันโดยใช้การกำหนดค่าได้แทนที่จะใช้ฮาร์ดแวร์ที่กำหนดเอง เพื่อประโยชน์ของความสมบูรณ์: มีความเป็นไปได้อื่น ๆ เช่น จำกัด หรือหลีกเลี่ยงการวางท่อที่ฉันอธิบายในความโปรดปรานของการขนานที่น่าสนใจยิ่งขึ้นโดยใช้แฮชเชอร์ SHA-256 อิสระหลายตัว ขึ้นอยู่กับข้อ จำกัด ที่กำหนดโดยภายในของ FPGA และขนาดโดยรวมที่สามารถให้ประสิทธิภาพที่ดีขึ้นแม้ว่าจะมีประสิทธิภาพน้อยกว่าในแง่ของจำนวนประตูและค่าใช้จ่ายในการกำหนดเส้นทางหากคุณมีอิสระอย่างสมบูรณ์ในการออกแบบชิปทั้งหมดไม่ใช่แค่การกำหนดค่าของ FPGA .


3
นั่นเป็นจุดที่ดีมากเกี่ยวกับการใช้ซิลิคอน
markt

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

3

คำตอบข้างต้นในขณะที่ถูกต้องพลาดจุดที่ว่าทำไม FPGAs (และ ASIC ที่กำหนดเอง) จึงดีสำหรับการคำนวณ bitcoin

ข้อได้เปรียบที่แท้จริงคือสัดส่วนขนาดใหญ่ของการคำนวณ SHA-256 คือการทำงานแบบลอจิคัล (ตัวอย่างเช่นการเลื่อนบิต) ซึ่งสามารถทำได้ในการเดินสาย เมื่อเสร็จสิ้นวิธีนี้พวกเขาต้องใช้ 0 รอบนาฬิกา

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

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

GPU ใช้สำหรับการทำ bitcoins ด้วยเช่นกัน แต่เนื่องจากพวกมันมีประสิทธิภาพด้านการใช้พลังงานน้อยกว่าพวกมันจึงสูญเสีย FPGA และ ASIC ที่กำหนดเอง


หากคุณดูอัลกอริธึมการบดบัง Monero aka cryptonight คุณจะเห็นว่าการติดตั้ง FPGA นั้นใกล้จะเป็นไปไม่ได้เนื่องจากหน่วยความจำจำนวนมากจำเป็นต้องเข้าถึงแบบสุ่ม (2MB) CPU มีข้อได้เปรียบในกรณีนี้
lucas92
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.