Điểm Heuristic tốt Nơi gửi FFT tới GPU có đáng để tính toán không?


7

Đây là một câu hỏi khá đơn giản, nhưng tôi đã không tìm thấy nhiều bài đăng trong vòng 5 năm qua hoặc liên quan đến một quy tắc tốt để tính toán FFT trên GPU so với CPU. Tôi biết rằng hầu hết chi phí hoạt động của các FFT tính toán GPU là trước tiên bạn phải ghi dữ liệu vào bộ đệm và sau đó truyền dữ liệu đó đến GPU, từ CPU, để tính toán biến đổi.

Điều này ngụ ý một cách tự nhiên rằng tính toán GPU của FFT phù hợp hơn với các tính toán FFT lớn hơn trong đó số lần ghi vào GPU tương đối nhỏ so với số lượng tính toán được thực hiện bởi GPU. Nhưng vấn đề sau đó trở nên biết tại thời điểm nào FFT hoạt động tốt hơn trên CPU so với GPU. Điều tốt nhất tôi tìm thấy là trên dòng chữ "khi bạn tính toán các FFT lớn hơn", nhưng đó là một hướng dẫn tương đối có ý nghĩa đặc biệt đối với các học viên, đặc biệt là xem xét rằng công nghệ GPU đã tăng tốc rất nhanh trong vài năm qua.

Tôi chỉ đang tìm kiếm một ước tính cụ thể hơn về thời điểm nó trở nên hiệu quả để tính toán biến đổi trên GPU so với CPU (có lẽ có một điểm chuẩn ở đâu đó ngoài kia?). Cảm ơn trước cho bất kỳ sự giúp đỡ bạn có thể cung cấp.

Câu trả lời:


10

Tôi sợ sẽ không bao giờ có một quy tắc của ngón tay cái!

Lý do rất đa dạng, chủ yếu là, cả hai hệ thống bạn đang xem xét và các vấn đề bạn đang cố gắng giải quyết khác nhau trên một phạm vi rất lớn.

Các khía cạnh dựa trên vấn đề

Bạn nói rằng bạn muốn làm một FFT - nhưng đó luôn luôn là một nửa những gì bạn thực sự muốn làm!

Cần FFT chuyển đổi thành abs², sau đó ánh xạ sang màu sắc, sau đó hiển thị trên màn hình? Làm điều đó trong GPU, nó đúng nơi nó thuộc về; fosphor thực hiện điều đó, với tốc độ 200MS / giây dễ dàng trên các kết hợp PC / GPU có khả năng:

phốt pho

Trong trường hợp đó, kích thước của FFT thậm chí không quan trọng. Dữ liệu của bạn sẽ được xử lý thêm bởi GPU, do đó, FFT cũng vậy.

Mặt khác, bạn có thể muốn làm một cái gì đó phụ thuộc vào rất nhiều kiểm tra đối với các thành phần riêng lẻ trong FFT, trong CPU? Có thể chỉ là một FFT, và sau đó không nhiều nữa?

Trong trường hợp đó, thông lượng lý thuyết của bạn không giúp bạn chút nào. Chỉ cần đợi dữ liệu thoát khỏi bộ đệm CPU của bạn, trở lại bộ nhớ kết hợp, do đó, nó có thể được chuyển sang GPU, khi đó bạn khởi tạo FFT (có thể lãng phí một công tắc ngắt / bối cảnh trên đường), chỉ để Đợi cho đến khi hoàn thành, GPU đã đưa dữ liệu trở lại bộ nhớ chính của bạn và bạn đã đưa nó vào bộ nhớ cache của CPU sẽ không phải trả tiền, ngay cả đối với các FFT cỡ trung bình.

Vì vậy: toàn bộ "kinh doanh máy gia tốc toán học có độ trễ cao" này thực sự chỉ được đền đáp nếu bạn có thể làm điều gì đó hợp lý trong khi chờ đợi. Nếu bạn không thể, có một hình phạt độ trễ rất lớn.

Các khía cạnh dựa trên hệ thống

Ok, không đi sâu vào chi tiết ở đây, nhưng:

  • Các hệ thống DSP bị giới hạn CPU hoặc băng thông bộ nhớ
  • Nếu hoạt động GPU của bạn giúp hạn chế CPU, nhưng lại tải thêm chuyển động dữ liệu trên giao diện bộ nhớ, trong khi thực tế, phần còn lại của hệ thống của bạn bị giới hạn băng thông bộ nhớ, bạn đang tự làm tổn thương mình.
  • Áp dụng tương tự theo cách khác: Có thể thuật toán của bạn (FFT theo kích thước quan tâm cụ thể của bạn) bị giới hạn CPU, nhưng việc tăng tốc GPU của bạn dẫn đến các ngắt bổ sung
  • Kích thước FFT mà CPU của bạn có thể làm rất tốt là gì? Điều đó có thể được xác định bởi kích thước của bộ đệm L1 và L2. Một CPU bẻ khóa số Xeon sẽ có hàng tá Megabyte trong số đó, trong khi một ARM chạy trong Jetson NVidia SoC thì không.
  • Kích thước FFT mà card đồ họa của bạn giỏi là bao nhiêu? Có một sự khác biệt lớn về số lượng các luồng song song, tính linh hoạt và băng thông bộ nhớ của chúng trên các thẻ.
  • Một số liệu cho "tốt", tất cả là gì? Chỉ là một số tỷ lệ kỳ lạ của thông lượng và độ trễ, nhưng cũng có thể là năng lượng và để lại các loại tài nguyên phù hợp miễn phí cho công việc khác?
  • CPU <-> giao diện bộ nhớ chính của bạn là gì? Đây có phải là giao diện DDR4 bốn kênh chạy ở tốc độ gần 2GHz hay là DDR đơn kênh?
  • Giao diện bộ nhớ GPU <-> GPU của bạn là gì?
  • GPU <-> giao diện bộ nhớ chính của bạn là gì?
  • CPU <-> Giao tiếp GPU của bạn hoạt động tốt như thế nào đối với trường hợp sử dụng cụ thể của bạn?
  • Chẳng hạn, có tải cao không, ví dụ như bus PCIe, bởi vì cùng một công tắc PCIe phải xử lý dữ liệu chảy vào và ra khỏi hệ thống tốc độ cao của bạn (ví dụ: lưu trữ, nhưng nhiều khả năng là 10 Gigabit ethernet hoặc dữ liệu video) ?

Vì vậy, câu trả lời có lẽ sẽ không thỏa đáng, nhưng thực sự là:

Ở đâu đó trên 64 thùng, ở đâu đó dưới 2 20 thùng, cho một FFT chính xác duy nhất. Nó phụ thuộc.

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.