2011-08-31 21 views
10

Làm cách nào để tối ưu hóa hàm exp trong cuda? Sự khác nhau giữa những điều sau đây trong CUDA là gì ??CUDA exp() expf() và __expf()

exp() 
    expf() 
    __expf() 
+3

Điều này được trình bày trong Phụ lục C của hướng dẫn lập trình CUDA, giống như một số câu hỏi liên quan đến CUDA trước đó của bạn. Có lẽ bây giờ là lúc để đọc tài liệu? – talonmies

+1

Nó hiện được đề cập trong [Phụ lục D] (http://docs.nvidia.com/cuda/cuda-c-programming-guide/#mathematical-functions-appendix). Tôi biết điều này sẽ thay đổi một lần nữa đôi khi. –

+2

Tôi thích câu hỏi của anh ấy, googling và tìm kiếm trên stackoverflow nhịp đập hy vọng tìm thấy bất cứ điều gì trong tài liệu cuda imho – ikku100

Trả lời

14

Sự khác biệt được giải thích trong CUDA C Programming Guide, phụ lục D.

  • exp() nên được sử dụng cho độ chính xác gấp đôi, mặc dù nên bị quá tải cho đơn
  • expf() nên được sử dụng cho độ chính xác đơn (float)
  • __expf() là phiên bản toán nhanh, hiệu suất nhanh hơn với một số mất độ chính xác (phụ thuộc vào giá trị đầu vào, xem guide để biết thêm chi tiết).
+1

là lỗi ulp tối đa là '2 + sàn (abs (1.16 * x))' theo liên kết. Bạn có thể muốn thêm điều đó vào câu trả lời của mình;) –

4

chung exp() là dành cho đôi, expf() cho phao nổi và cả hai đều là hơi chậm hơn so với __exp() đó là có sẵn như là một hoạt động phần cứng. Hiệu suất đạt được thường đi kèm với chi phí chính xác nhưng trừ khi bạn thực sự quan tâm về độ chính xác nó không phải là một vấn đề.