2010-01-17 32 views
18

Tôi đã cố gắng tìm thông tin về hiệu suất của việc sử dụng float vs double trên phần cứng đồ họa. Tôi đã tìm thấy rất nhiều thông tin trên float vs double trên CPU, nhưng thông tin đó là khan hiếm hơn đối với GPU.float vs double trên phần cứng đồ họa

Tôi mã bằng OpenGL, vì vậy nếu có bất kỳ thông tin cụ thể nào cho API mà bạn cảm thấy cần biết, hãy có nó.

Tôi hiểu rằng nếu chương trình đang di chuyển rất nhiều dữ liệu đến/từ phần cứng đồ họa, thì có thể tốt hơn nếu sử dụng phao như tăng gấp đôi yêu cầu gấp đôi băng thông. Các yêu cầu của tôi hướng tới cách phần cứng đồ họa xử lý nó như thế nào. Theo tôi hiểu, các CPU Intel hiện đại chuyển đổi float/double thành 80 bit thực cho các phép tính (các lệnh SSE bị loại trừ) và cả hai loại này đều nhanh như nhau. Card đồ họa hiện đại có làm được điều gì không? là nổi và hiệu suất gấp đôi về bằng bây giờ? Có bất kỳ lý do mạnh mẽ để sử dụng một trong những khác?

Trả lời

19

Về tốc độ, GPU được tối ưu hóa cho phao nổi. Tôi quen thuộc hơn với phần cứng Nvidia, nhưng trong phần cứng thế hệ hiện tại, có 1 DP FPU cho mỗi 8 SP FPU. Trong phần cứng thế hệ tiếp theo, chúng được dự kiến ​​sẽ có nhiều tỷ lệ 1 đến 2 thay thế.

Đề xuất của tôi sẽ là xem thuật toán của bạn có cần độ chính xác gấp đôi hay không. Nhiều thuật toán không thực sự cần thêm các bit. Chạy một số thử nghiệm để xác định lỗi trung bình mà bạn nhận được bằng cách đi đến độ chính xác đơn và tìm ra nếu nó có ý nghĩa. Nếu không, chỉ cần sử dụng duy nhất.

Nếu thuật toán của bạn hoàn toàn là đồ họa, có thể bạn không cần độ chính xác gấp đôi. Nếu bạn đang tính toán mục đích chung, hãy cân nhắc sử dụng OpenCL hoặc CUDA.

+1

+1 để được tư vấn. Mặc dù tôi tưởng tượng nó vẫn còn giữ (như bạn nói đôi khi có khả năng sẽ không tạo ra nhiều sự khác biệt có thể nhìn thấy đối với đồ họa), tôi muốn biết liệu câu trả lời của bạn có thay đổi hay không (có lẽ về phần cứng) trong sáu năm kể từ khi bạn viết nó. –

+6

Thẻ Nvidia dựa trên Maxwell có sự khác biệt lớn hơn giữa tính toán đơn và đôi chính xác. Họ đã bổ sung thêm nhiều đơn vị FP32 với chi phí không gian của các đơn vị FP64. Độ chính xác đơn là cách để chạy trên GPU, trừ khi bạn hoàn toàn cần độ chính xác cao hơn. – tkerwin

5

Thẻ đồ họa hiện đại thực hiện nhiều tối ưu hóa, ví dụ: chúng thậm chí có thể hoạt động trên các phao 24 bit. Theo như tôi biết, card đồ họa nội bộ không sử dụng gấp đôi khi chúng được xây dựng cho tốc độ, không nhất thiết phải chính xác.

Từ entry trên GPGPU trên Wikipedia:

Việc triển khai các điểm nổi trên GPU Nvidia chủ yếu là IEEE phù hợp; tuy nhiên, điều này là không đúng trên tất cả các nhà cung cấp. Điều này có ý nghĩa đối với tính chính xác được coi là quan trọng đối với một số ứng dụng khoa học. Trong khi các giá trị dấu phẩy động 64-bit (phao chính xác kép) thường có sẵn trên CPU, chúng không được hỗ trợ phổ biến trên GPU; một số kiến ​​trúc GPU hy sinh sự tuân thủ IEEE trong khi những kiến ​​trúc khác thiếu chính xác gấp đôi. Đã có những nỗ lực để mô phỏng các giá trị điểm nổi chính xác gấp đôi trên GPU; tuy nhiên, sự cân bằng tốc độ sẽ phủ nhận bất kỳ lợi ích nào để giảm tải tính toán lên GPU ngay từ đầu.

+3

các cạc đồ họa gần đây nhất không hoạt động trên các đĩa 24 bit nữa. Những người đã làm là ATI R300 và dẫn xuất (DX9 dựa). – Bahbar

4

Hầu hết các GPU không hỗ trợ nổi hai lần. Sự hỗ trợ đã được thêm rất gần đây (thế hệ này), chứ không phải ở khắp mọi nơi:

  • ATI:
    • HD5870 và HD5850 có nó ở tốc độ phong nha (không nhanh như đơn mặc dù)
    • HD5770 làm không có nó, mặc dù đang ở trong cùng một thế hệ như HD5870.
  • Nvidia: thẻ dựa
    • GT200 có hỗ trợ tăng gấp đôi, nhưng ở một đôi tỷ lệ/duy nhất đó là rất thấp. (Tỷ lệ 8: 1?)
    • Fermi được cho là có tốc độ bằng một nửa ... Mỗi khi tàu đó được vận chuyển.

Đối với mọi thứ khác, bạn chỉ không có hỗ trợ kép.

Vì vậy ... Bạn chắc chắn không nên sử dụng gấp đôi nếu bạn không cần.

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