Một kỹ sư điện gần đây đã cảnh báo tôi không sử dụng GPU cho máy tính khoa học (ví dụ: độ chính xác thực sự quan trọng) trên cơ sở không có các biện pháp bảo vệ phần cứng như trong CPU. Điều này có đúng không, và nếu như vậy vấn đề thường gặp/đáng kể là gì trong phần cứng điển hình?Độ chính xác của GPU cho máy tính khoa học
Trả lời
Thực tế, các GPU hiện đại phù hợp rất tốt cho máy tính khoa học và nhiều ứng dụng HPC ít nhất được chuyển một phần để chạy trên GPU, vì hiệu suất và tiết kiệm năng lượng. Không giống như các GPU cũ hơn, các GPU hiện đại (ví dụ như các kiến trúc Fermi hoặc Kepler của NVIDIA) cung cấp các định dạng chuẩn IEEE-754 chuẩn, cho cả độ chính xác đơn và đôi, vì vậy bạn có thể sử dụng chúng giống như trên CPU hiện đại .
Tôi đã tìm thấy một vài bài viết cũ hơn về vấn đề này, nhưng có vẻ như vấn đề đã được khắc phục trong thẻ có tính toán capabilityitity> = 2.0.
GPU hiện tại không hỗ trợ tính toán đúp chính xác và hỗ trợ chính xác đơn của họ đã che đậy những khía cạnh quan trọng của IEEE-754 floating-point chuẩn [1], chẳng hạn như kết quả được làm tròn chính xác và đóng đúng hệ thống số. ... Kết quả của chúng tôi cho thấy có lỗi nghiêm trọng với kết quả của GPU ở các trường hợp cạnh nhất định, ngoài việc xử lý sai số số không chuẩn hóa.
Karl E. Hillesland và Anselmo Lastra, "GPU Floating-Point Paranoia." Trong Proc. GP2, August 2004.
Guillaume Đà Graça và David Defour, "Thực hiện khai thác float-float về đồ họa phần cứng." Trong Proc. Hội nghị lần thứ 7 về số Real và Computers, July 2006.
chính xác đôi (CUDA tính toán khả năng 1.3 trở lên) [14] chệch từ chuẩn IEEE 754: tròn-to -gần nhất-thậm chí là chỉ chế độ làm tròn được hỗ trợ cho gốc đối ứng, chia và căn bậc hai. Trong độ chính xác, ký hiệu và tín hiệu đơn NaN không được hỗ trợ; chỉ có hai chế độ làm tròn IEEE được hỗ trợ (chop và vòng-to-gần nhất thậm chí), và được chỉ định trên cơ sở mỗi lệnh thay vì trong một từ điều khiển; và độ chính xác của phân chia/căn bậc hai là thấp hơn một chút so với độ chính xác đơn.
tính thực tế khoa học nhất thường không cần phải là chính xác, bởi vì sai số phép đo và như vậy phần lớn lấn át các lỗi được giới thiệu bởi các điểm làm tròn nổi (ngoại trừ, có lẽ trong trường hợp thoái hóa, giống như cách tổng hợp một loạt các phao nổi trong trật tự vs theo thứ tự ngược lại, nhưng bạn sẽ nhận được loại vấn đề đó ngay cả trong CPU và không có gì sẽ cảnh báo bạn vì nó hoạt động đúng như thiết kế).Trong máy tính khoa học, nói chung là đủ để hiển thị kết quả trong một phạm vi nhất định của các lỗi, và để cho thấy rằng lợi nhuận sẽ không gây ra các vấn đề thực tế.
Điểm nổi được thiết kế nhanh, không nhất thiết phải chính xác về số, ngay cả trong CPU, đó là lý do tại sao chúng tôi luôn được dạy để so sánh điểm nổi với epsilon.
OTOH, các tính toán thực sự cần quy tắc làm tròn chính xác cho các chữ số cuối, như lý thuyết kế toán hoặc số, nên xem xét sử dụng số học điểm cố định (ví dụ: mô-đun thập phân) cho phép bạn chỉ định chính xác quy tắc làm tròn.
NVIDIA đã công bố một báo cáo chính bao gồm các chi tiết về làm việc với dấu chấm động nói chung và trên GPU cụ thể:
http://developer.download.nvidia.com/assets/cuda/files/NVIDIA-CUDA-Floating-Point.pdf
vâng ... đúng vậy ... tất cả những cụm tính toán khổng lồ được xây dựng với GPU hoàn toàn vô dụng và về cơ bản chỉ là các trình tạo số ngẫu nhiên. Tất cả phần cứng đều bị lỗi ngẫu nhiên - một photon năng lượng cao được phát ra bởi một sự kiện phân rã phóng xạ trong một gói gốm có thể lật bit ở đâu đó bên trong CPU và hoàn toàn tiêu diệt hệ thống ... hoặc có thể không. –
@MarcB Tôi không phải là một nhà lý thuyết âm mưu! Xem các liên kết trong câu trả lời của tôi dưới đây để minh họa các vấn đề trong quá khứ. Tôi về cơ bản muốn biết nếu những điều này đã được sửa chữa đầy đủ trong phần cứng gần đây hơn. –