Có thể ra ngoài thực hiện một PC đa lõi?


20

Tôi không hiểu làm thế nào mà FPGA có thể được sử dụng để tăng tốc thuật toán. Hiện tại tôi đang chạy một thuật toán thời gian thực tốn thời gian trên máy tính xách tay quadcore để có thể thực hiện song song bốn phép tính.

Gần đây tôi đã được cảnh báo rằng FPGA có thể mang lại hiệu năng thậm chí tốt hơn. Tôi không hiểu làm thế nào nó hoạt động. Ai đó có thể giải thích làm thế nào để tăng tốc thuật toán của một thuật toán không và liệu tôi có nên chuyển sang một giải pháp Xilinx hoặc Altera hay tiếp tục thực hiện các tính toán trên máy tính xách tay quadcore của tôi.

Chi tiết bổ sung: Thuật toán chạy 20 mạng nơ ron nhân tạo bằng cách sử dụng các đầu vào được đưa vào thông qua biến đổi gói sóng con

Cảm ơn tất cả các câu trả lời tuyệt vời.


1
Bạn đã xem xét việc chạy thuật toán trên CPU máy tính để bàn (hoặc máy chủ) chưa? Chúng thường nhanh hơn CPU máy tính xách tay. (Theo yếu tố không đổi, nhưng vẫn nhanh hơn.)
ntoskrnl

1
Hãy suy nghĩ về việc sử dụng GPU để xử lý mạng thần kinh. GPU có nhiều đơn vị có thể nhân các số dấu phẩy động song song.
Kamil

@ntoskrnl Tôi giả sử anh ta có i5 hoặc cpu tốt hơn (4 lõi) nên hiệu suất trên máy tính để bàn hoặc máy chủ sẽ chỉ mang lại tốc độ xung nhịp. Có thể trên Xeon anh ta có thể đạt được hiệu suất nhỏ (20%?) Nhờ bộ nhớ cache lớn và băng thông bộ nhớ tốt hơn, nhưng đó không phải là nhiều.
Kamil

Bạn có CPU gì?
Kamil

Thời gian thú vị của các câu hỏi, chúng tôi có một câu hỏi tương tự trên networkengineering.SE
Mike Pennington

Câu trả lời:


23

Một đồng nghiệp của tôi đã điểm chuẩn điều này và đi đến kết luận rằng các GPU sẽ vượt trội hơn PC một khi bạn có hơn 100 tác vụ số nguyên , độc lập phù hợp với FPGA. Đối với các tác vụ dấu phẩy động, GPGPU đánh bại FPGA trong suốt. Đối với hoạt động đa luồng hẹp hoặc SIMD thì CPU được tối ưu hóa cực kỳ cao và chạy ở tốc độ xung nhịp cao hơn so với các GPU thường đạt được.

Các cảnh báo khác: nhiệm vụ phải độc lập. Nếu có sự phụ thuộc dữ liệu giữa các tác vụ thì điều đó giới hạn đường dẫn quan trọng của tính toán. Các GPU rất tốt cho việc đánh giá boolean và toán học số nguyên, cũng như các giao diện có độ trễ thấp phần cứng, nhưng không phải cho khối lượng công việc phụ thuộc vào bộ nhớ hoặc điểm nổi.

Nếu bạn phải giữ khối lượng công việc trong DRAM thì đó sẽ là nút cổ chai chứ không phải bộ xử lý.


3
Để quyết định xem DRAM có phải là giới hạn hay không, bạn cũng phải biết rằng các GPU có nhiều RAM phân tán nhỏ (ví dụ 500 khối RAM 9kbit độc lập) có thể đọc / ghi trong cùng một chu kỳ xung nhịp.
MAXY

19

Một đồ họa hoạt động hoàn toàn khác với bộ xử lý.

Đối với bộ xử lý, bạn viết phần mềm cho biết phần cứng phải làm gì. Trên một đồ họa, bạn mô tả "phần cứng sẽ trông như thế nào" bên trong. Như thể bạn đang tạo ra một con chip được chế tạo đặc biệt cho thuật toán của bạn.

Điều này tăng tốc rất nhiều thứ và có thể làm giảm mức tiêu thụ năng lượng. Nhưng nó có nhược điểm của nó: Sự phát triển mất nhiều thời gian hơn và phức tạp hơn nhiều. Bạn cần suy nghĩ theo một cách hoàn toàn khác và không thể sử dụng các thuật toán hoạt động trong phần mềm theo cách đơn giản.

Đối với Mạng nơ-ron nhân tạo, FPGA là một lựa chọn tuyệt vời. Có rất nhiều nghiên cứu đang diễn ra trong lĩnh vực này.


Trên thực tế, việc phát triển FPGA thường được thực hiện bằng các ngôn ngữ như Verilog hoặc VHDL mô tả hành vi thay vì thực hiện - một thực tế đôi khi hữu ích nhưng đôi khi có thể làm phức tạp đáng kể việc thiết kế logic tuần tự không đồng bộ. Nếu một người chỉ định thực hiện, độ trễ lan truyền sẽ hơi nhất quán, nhưng trong ngôn ngữ hành vi, họ thậm chí không được đảm bảo là tích cực . Điều quan trọng với thiết kế đồ họa là các ngôn ngữ làm cho nó rất dễ dàng để có nhiều (có thể hàng trăm hoặc hàng ngàn) bộ phận khác nhau của chip thực hiện các hành vi đơn giản đồng thời.
supercat

13

Nó phụ thuộc rất nhiều vào thuật toán, nhưng nguyên tắc có thể được giải thích khá đơn giản.

Giả sử rằng thuật toán của bạn phải tổng hợp rất nhiều số 8 bit. CPU của bạn sẽ vẫn cần tìm nạp từng lệnh, lấy toán hạng từ RAM hoặc bộ nhớ đệm, thực thi tổng, lưu kết quả vào bộ đệm và tiếp tục với thao tác tiếp theo. Các đường ống giúp, nhưng bạn chỉ có thể thực hiện nhiều hoạt động đồng thời như các lõi bạn có.

Nếu bạn sử dụng một đồ họa, bạn có thể thực hiện một số lượng lớn các bộ cộng đơn giản hoạt động song song, có thể tạo ra hàng ngàn tổng số song song. Mặc dù một thao tác có thể mất nhiều thời gian hơn, nhưng bạn có một mức độ song song rất lớn.

Bạn cũng có thể sử dụng GPGPU để thực hiện các tác vụ tương tự, vì chúng cũng được tạo từ nhiều lõi đơn giản hơn.


GPGPU là một đầu vào tuyệt vời cho các mạng thần kinh sử dụng!
Botnic

Ngoài ra còn có ASIC mạng thần kinh. Intel đã từng chế tạo 16 chiếc nơ-ron trong thập niên 80.
Lior Bilia

@LiorBilia tôi cũng không biết gì về họ :). Tôi chưa bao giờ làm việc với các mạng thần kinh và rất ít với FPGA
clabacchio

@clabacchio Mạng thần kinh phần mềm là một chương trình chủ yếu thực hiện nhân và so sánh các hoạt động trên các số dấu phẩy động. Ý tôi là ... 95% trở lên.
Kamil

Một CPU thông thường có thể thực hiện một công việc khá tốt là tổng hợp rất nhiều số 8 bit; trên một máy nhanh, thời gian thực hiện sẽ bị chi phối bởi chi phí tìm nạp dữ liệu từ bộ nhớ (99% các lần tìm nạp mã sẽ đến từ việc bắt). Một ví dụ thú vị hơn sẽ làm việc với dữ liệu được mã hóa bằng cách sử dụng sơ đồ yêu cầu các sắp xếp khá "bất thường" hoặc hoán vị của các bit. Ví dụ: nếu một phần dữ liệu lấy mẫu video trả về các bit xen kẽ các màu đỏ, xanh lục và xanh lam, thì một FPGA có thể dễ dàng sắp xếp lại các bit; một CPU thông thường sẽ gặp nhiều rắc rối hơn.
supercat

6

Có khoảng 3 cấp độ chuyên môn hóa thiết bị máy tính:

CPU (như trong máy tính xách tay của bạn) là loại chung nhất trong số chúng. Nó có thể làm mọi thứ, nhưng tính linh hoạt này có giá của tốc độ chậm và tiêu thụ điện năng cao. CPU được lập trình khi đang di chuyển, các hướng dẫn đến từ RAM. Các chương trình cho CPU rất nhanh, rẻ và dễ viết và rất dễ thay đổi.

FPGA (có nghĩa là Mảng cổng lập trình trường) là tầng giữa. Như tên của nó ngụ ý, nó có thể được lập trình "trên thực địa", nằm ngoài một nhà máy. FPGA thường được lập trình một lần, quá trình này có thể được mô tả là thiết lập cấu trúc bên trong của nó. Sau quá trình này, nó hoạt động giống như một chiếc máy tính nhỏ chuyên dùng cho một nhiệm vụ bạn đã chọn cho nó. Đây là lý do tại sao nó có thể tốt hơn so với CPU chung. Lập trình FPGA rất khó khăn và tốn kém và gỡ lỗi chúng là rất khó.

ASIC (có nghĩa là Mạch tích hợp dành riêng cho ứng dụng) là chuyên gia cuối cùng. Đó là một con chip được thiết kế và sản xuất cho một và chỉ một nhiệm vụ - một nhiệm vụ mà nó thực hiện cực kỳ nhanh chóng và hiệu quả. Không có khả năng lập trình lại ASIC, nó khiến nhà máy được xác định đầy đủ và vô dụng khi công việc không còn cần thiết nữa. Thiết kế ASIC là điều mà chỉ các tập đoàn lớn có thể đủ khả năng và gỡ lỗi chúng là tốt, khá nhiều điều không thể.

Nếu bạn nghĩ về "lõi", thì hãy nhìn nó theo cách này: CPU có 4, 6, có thể 8 lõi lớn có thể làm mọi thứ. ASICS thường có hàng ngàn lõi, nhưng những cái rất nhỏ, chỉ có khả năng một thứ.

Bạn có thể nhìn vào cộng đồng khai thác bitcoin. Họ làm băm SHA256.

  • Lõi CPU i7: 0,8-1,5 M băm / s
  • FPGA: 5-300M băm / s
  • ASIC: 12000M băm / s trên một chip nhỏ, 2000000M (yep, 2T) băm / s cho một thiết bị 160 chip

Tất nhiên, những đứa trẻ ASIC đó có giá gần 2000 đô la khi được sản xuất hàng loạt, nhưng nó cho bạn ý tưởng về cách một người giao dịch có thể chống lại một chuyên gia.

Câu hỏi duy nhất là: liệu FPGA có thể mang lại cho bạn nhiều tiền tiết kiệm hơn so với việc thiết kế nó sẽ tốn kém không? Tất nhiên, thay vì chạy nó trên MỘT máy tính xách tay, bạn có thể thử chạy nó trên 20 chiếc.


Băm là một trường hợp rất đặc biệt mặc dù; lưu ý rằng các đồng tiền dựa trên tiền điện tử (cố tình) không được tăng tốc rất nhiều bởi phần cứng chuyên dụng.
pjc50

1
& Gỡ lỗi ASIC thường được xử lý trong mô phỏng trước khi vận chuyển đến sản xuất. Vì vậy, thường là 6 tháng trở lên từ thông số kỹ thuật đến sản xuất. Chẩn đoán lỗi sau khi sản xuất là .. tốn ​​kém nhưng không phải là không thể.
pjc50

Và mặc dù khó, nhưng thực tế có thể rất khó, có những thứ như quét ranh giới, kiểm tra JTAG và các kỹ thuật trực tiếp sử dụng FIB, v.v ... Vì vậy, không thể gỡ lỗi chúng, bạn chỉ cần biết bạn đang làm gì . Bây giờ, một ngày ASIC đề cập nhiều hơn đến một dòng thiết kế (HDL, Tổng hợp, P & R) mà nó thực sự đề cập đến một thiết bị thực tế vì hầu hết các thiết bị đều là ASIC bao gồm cả những thứ như bộ xử lý ARM.
giữ chỗ

@ pjc50 Vâng, đó là quan điểm của tôi - trong trường hợp đặc biệt, sự khác biệt về tốc độ là rất lớn. Nhưng asics scrypt vẫn pwn CPU và GPU. Không phải bởi một yếu tố triệu (như với sha), nhưng vẫn hơn 100.
Agent_L

@placeholder yeah, nhưng ngay cả khi bạn tìm thấy lỗi, nó không được sử dụng nhiều cho tất cả các chip đã được sản xuất. Tôi có nghĩa là "gỡ lỗi" như trong "loại bỏ lỗi" không chỉ "đây là".
Đặc vụ_L

5

Đúng, FPGA có thể vượt trội so với CPU hiện đại (như Intel i7) trong một số tác vụ cụ thể, nhưng có những phương pháp dễ dàng hơn và rẻ hơn để cải thiện hiệu suất mạng thần kinh.

Bởi rẻ hơn - ý tôi là toàn bộ nỗ lực, không phải chi phí IC IC, mà còn bộ nhớ rất nhanh cho FPGA (bạn sẽ cần nó cho mạng thần kinh) và toàn bộ quá trình phát triển.

  1. Sử dụng SSE - Tôi đã thấy các triển khai mạng thần kinh khá đơn giản với hiệu suất tốt hơn 2-3 lần. Đây có thể là ý tưởng tốt nếu bạn không có GPU chuyên dụng trong máy tính xách tay của mình.

    Cải thiện tốc độ mạng thần kinh trên CPU của Vincent Vanhoucke và Andrew Senior

  2. Sử dụng GPGPU (Điện toán đa năng trên các đơn vị xử lý đồ họa) - Tôi nghĩ rằng bạn có thể lưu trữ tăng hiệu suất 100-200x trên GPU máy tính xách tay hạng trung như GeForce 730M.

    Đây là triển khai mạng thần kinh (và mã miễn phí). Nó sử dụng Nvidia CUDA.

    Cách tiếp cận GPGPU rất có thể mở rộng, nếu đến một lúc nào đó bạn nhận ra rằng bạn cần nhiều sức mạnh tính toán hơn - bạn chỉ có thể sử dụng máy tính để bàn có GPU mạnh hơn hoặc thậm chí là Nvidia Tesla K80 với lõi 4992 (rất tốn kém).


1
Vấn đề ở đây là xác định hiệu suất. Nếu chúng tôi muốn nói nhanh hơn thì có, fpga có thể nhanh hơn cpus bình thường. Tuy nhiên, fpga không linh hoạt như CPU, Chúng được thiết kế để thực thi hiệu quả chỉ là một nhiệm vụ được xác định trước. Thực hiện một nhiệm vụ khác có nghĩa là thay đổi hệ thống dây điện bên trong của nó thực sự thực hiện một fpga khác
Gianluca Ghettini
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.