2011-11-16 20 views
7

Chúng tôi đang xem xét việc chuyển một ứng dụng từ một chip xử lý tín hiệu kỹ thuật số chuyên dụng để chạy trên phần cứng x86 chung. Ứng dụng này thực hiện rất nhiều biến đổi Fourier và từ nghiên cứu ngắn gọn, có vẻ như các FFT tương đối phù hợp với tính toán trên GPU chứ không phải là CPU. Ví dụ, trang này có một số tiêu chuẩn với Core 2 Quad và GTX GF 8800 cho thấy giảm 10 lần trong thời gian tính toán khi sử dụng GPU:Có đáng để tải tính toán FFT vào GPU được nhúng không?

http://www.cv.nrao.edu/~pdemores/gpu/

Tuy nhiên, trong sản phẩm, hạn chế kích thước của chúng tôi hạn chế chúng tôi với các yếu tố hình thức nhỏ như PC104 hoặc Mini-ITX, và do đó giới hạn các GPU nhúng.

Tính năng tải trọng tải xuống GPU có phải là điều đáng làm với card đồ họa thịt trên xe buýt PCIe phù hợp hay thậm chí GPU được cung cấp có cải thiện hiệu suất không?

+0

tôi không nghĩ những bảng này bị giới hạn nữa; chứ không phải [ví dụ: nếu chúng có một Sandybridge i7] (http://www.silentpcreview.com/zotac-h67itx) – sehe

+0

@sehe Tôi biết rằng hỗ trợ Mini-ITX (và thậm chí PC104) có các mô hình hỗ trợ CPU gần đây , câu hỏi của tôi là liệu on * G * PU của họ có đáng để làm phiền hay không. Mini-ITX thường cung cấp một ổ cắm PCIe, nhưng kích thước sản phẩm của chúng tôi hạn chế mô-đun xử lý thành một bảng có kích thước Mini-ITX và sẽ không cho phép chúng tôi thêm một cạc đồ họa gắn thêm từ bo mạch chủ. –

+0

FFT của bạn lớn đến mức nào? Thuật toán của bạn có cho phép bạn thực hiện chúng trong "chế độ hàng loạt" mà bạn tính toán rất nhiều trong số chúng (tất cả cùng một kích thước) cùng một lúc không? –

Trả lời

2

8800 có trên thứ tự 100 lõi chạy ở khoảng nửa GHz. Tôi không nghĩ rằng bất kỳ GPU nhúng hiện tại cho các yếu tố hình thức nhỏ có bất cứ nơi nào gần như nhiều bóng/tính toán lõi.

5

Bạn cần so sánh chi phí di chuyển dữ liệu đến và từ bộ nhớ GPU so với bất kỳ lợi ích tốc độ nào khi sử dụng GPU. Mặc dù có thể chồng chéo I/O và phần tính toán, nhưng bạn vẫn có thể bị ảnh hưởng nếu các yêu cầu băng thông I/O lớn hơn băng thông tính toán. Nếu bạn có bất kỳ tính toán bổ sung có thể được thực hiện trên dữ liệu FFT trong khi nó cư trú trong bộ nhớ GPU thì điều này có thể giúp giảm thiểu chi phí I/O.

Điều quan trọng cần lưu ý là các FFT dựa trên GPU thường chỉ mang lại hiệu suất tốt cho dữ liệu chính xác đơn. Hơn nữa, bạn cần so sánh với FFT dựa trên CPU tốt nhất có thể, ví dụ: FFTW được xây dựng cho độ chính xác đơn và sử dụng SSE.

1

Một vấn đề có thể là lấy thông tin kỹ thuật bạn cần tải và thực thi mã trên GPU và giao tiếp và trao đổi dữ liệu với CPU. Nvidia cung cấp một API được gọi là CUDA dành riêng cho mục đích này. Vì vậy, hãy chọn một bo mạch chủ có GPU Nvidia hỗ trợ CUDA và bạn có thể thử nghiệm và đo điểm chuẩn với chi phí rất thấp và thậm chí là thử nghiệm trên máy tính để bàn thông thường.

Đối với phần cứng có hệ số dạng nhỏ, this discussion có thể có liên quan.

6

Có các quy trình FFT được phát triển cả trên phần cứng và GPU x86 (trước CUDA, 7800 GTX Hardware) tôi tìm thấy từ kết quả của riêng mình với kích thước nhỏ hơn FFT (dưới 2^13) mà CPU nhanh hơn. Trên các kích thước này, GPU nhanh hơn. Ví dụ, một FFT 2^16 có kích thước nhanh hơn 2-4x trên GPU so với biến đổi tương đương trên CPU. Xem bảng thời gian dưới đây (Tất cả thời gian bằng giây, so sánh Pentium 4 3GHz với 7800GTX. Công việc này được hoàn thành vào năm 2005 vì vậy phần cứng cũ và như tôi đã nói, không phải CUDA. Các thư viện mới có thể hiển thị các cải tiến lớn hơn)

 
N  FFTw (s) GPUFFT (s) GPUFFT MFLOPS GPUFFT Speedup 
8  0   0.00006  3.352705  0.006881 
16  0.000001 0.000065 7.882117  0.010217 
32  0.000001 0.000075 17.10887  0.014695 
64  0.000002 0.000085 36.080118  0.026744 
128  0.000004 0.000093 76.724324  0.040122 
256  0.000007 0.000107 153.739856  0.066754 
512  0.000015 0.000115 320.200892  0.134614 
1024 0.000034 0.000125 657.735381  0.270512 
2048 0.000076 0.000156 1155.151507  0.484331 
4096 0.000173 0.000215 1834.212989  0.804558 
8192 0.000483 0.00032  2664.042421  1.510011 
16384 0.001363 0.000605 3035.4551  2.255411 
32768 0.003168 0.00114  3450.455808  2.780041 
65536 0.008694 0.002464 3404.628083  3.528726 
131072 0.015363 0.005027 3545.850483  3.05604 
262144 0.033223 0.012513 3016.885246  2.655183 
524288 0.072918 0.025879 3079.443664  2.817667 
1048576 0.173043 0.076537 2192.056517  2.260904 
2097152 0.331553 0.157427 2238.01491  2.106081 
4194304 0.801544 0.430518 1715.573229  1.861814 

Theo đề xuất của các áp phích khác, việc chuyển dữ liệu đến/từ GPU là lần truy cập bạn thực hiện. FFT nhỏ hơn có thể được thực hiện trên CPU, một số cài đặt/kích thước hoàn toàn trong bộ nhớ cache. Điều này làm cho CPU trở thành lựa chọn tốt nhất cho các FFT nhỏ (dưới ~ 1024 điểm). Mặt khác, nếu bạn cần thực hiện nhiều đợt công việc lớn trên dữ liệu với các chuyển động tối thiểu đến/từ GPU thì GPU sẽ đánh bại CPU.

Tôi khuyên bạn nên sử dụng FFTW nếu bạn muốn triển khai FFT nhanh hoặc Thư viện toán học của Intel nếu bạn muốn triển khai nhanh hơn (thương mại). Đối với FFTW, việc thực hiện các kế hoạch sử dụng cờ FFTW_Measure sẽ đo lường và kiểm tra thường trình FFT nhanh nhất có thể cho phần cứng cụ thể của bạn.Tôi đi vào chi tiết về điều này trong this question.

Để triển khai GPU, bạn không thể làm tốt hơn so với mạng do NVidia CUDA cung cấp. Hiệu suất của GPU đã tăng đáng kể kể từ khi tôi đã thử nghiệm trên một 7800GTX vì vậy tôi sẽ đề nghị cho SDK của họ một đi cho yêu cầu cụ thể của bạn.

+0

mặc dù câu trả lời là tuyệt vời, nó cảm thấy lỗi thời. bạn đã bao giờ đánh giá các thiết bị di động thế hệ mới nơi bộ nhớ được chia sẻ với gpu cho FFT chưa? (chỉnh sửa: tôi không có nghĩa là chỉ điện thoại hoặc máy tính bảng khi tôi đã viết điện thoại di động, nhưng iot mới, nhúng, vv thiết bị quá) – emrahgunduz

+1

Có nó đã được hơn 10 năm trước, tôi đã làm công việc này. GPus ngày nay có băng thông nhanh hơn nhiều để chuyển từ bộ nhớ chính sang bộ nhớ GPU nhưng tương tự như vậy, CPU và bộ nhớ cache cũng nhanh hơn rất nhiều. Tôi đã không chuẩn bị nó nhưng tôi sẽ tưởng tượng vấn đề tương tự tồn tại ngày hôm nay: các bộ dữ liệu nhỏ hơn sẽ tính nhanh hơn trong SIMD tối ưu hóa C++, bộ dữ liệu lớn hơn nhanh hơn trên GPu. Chính xác nơi anh ấy là ai? Đó là vấn đề để thử nghiệm! –

1

Tôi muốn thêm vào câu hỏi của bạn cụ thể về GPU được nhúng.

Chúng thường có rất ít lõi đổ bóng, đăng ký ít hơn cho băng thông bộ nhớ lõi và thấp hơn so với GPU cao cấp được thấy trên máy tính để bàn. Tuy nhiên, chạy FFT như các ứng dụng trên một GPU nhúng có thể cho hiệu năng tốt hơn so với CPU đa lõi trên bo mạch [1]. Ưu điểm chính trong GPU nhúng là chúng chia sẻ bộ nhớ chung với CPU do đó tránh quá trình sao chép bộ nhớ từ máy chủ đến thiết bị.

Hầu như tất cả các GPU nhúng như Mali từ ARM, adreno từ Qualcomm, vv hỗ trợ OpenCL, do đó sử dụng thư viện OpenCL cho FFT của bạn trên GPU nhúng có thể mang lại hiệu suất tốt hơn (clFFT từ AMD nổi tiếng và mở). Chỉnh mã OpenCL cho kiến ​​trúc GPU nhúng có thể làm cho nó tốt hơn. (Vui lòng tham khảo ARM Mali-T600 Dòng GPU OpenCL Hướng dẫn Developer tại http://infocenter.arm.com)

[1] Arian Maghazeh, Unmesh, Bordoloi Petru, Eles Peng. Tổng quát Mục đích tính toán trên GPU nhúng công suất thấp: Có nó Đến từ tuổi?

Các vấn đề liên quan