Độ chính xác đơn so với dấu phẩy động kép


13

Các số dấu phẩy động chính xác đơn chiếm một nửa bộ nhớ và trên các máy hiện đại (thậm chí trên GPU dường như) các thao tác có thể được thực hiện với chúng với tốc độ gần gấp đôi so với độ chính xác gấp đôi. Nhiều mã FDTD mà tôi đã tìm thấy chỉ sử dụng số học và lưu trữ chính xác duy nhất. Có một quy tắc khi sử dụng độ chính xác duy nhất để giải các hệ phương trình thưa thớt quy mô lớn không? Tôi giả sử nó phải phụ thuộc nhiều vào số điều kiện ma trận.

Hơn nữa, có bất kỳ kỹ thuật hiệu quả nào sử dụng độ chính xác kép khi cần thiết và đơn lẻ khi không yêu cầu độ chính xác gấp đôi. Ví dụ, tôi nghĩ rằng đối với phép nhân vectơ ma trận hoặc sản phẩm chấm vectơ, có thể nên tích lũy kết quả trong một biến chính xác kép (để tránh lỗi hủy), nhưng các mục riêng lẻ sẽ được nhân với nhau có thể được nhân lên bằng cách sử dụng độ chính xác duy nhất.

Do FPU hiện đại có cho phép chuyển đổi từ độ chính xác đơn (độ nổi) sang độ chính xác kép (gấp đôi) và ngược lại không? Hay là những hoạt động tốn kém?

Câu trả lời:


7

Đối với tất cả các vấn đề không tầm thường (nghĩa là đối với những vấn đề về hiệu năng) hầu như tất cả bộ nhớ bạn có sẽ nằm trong ma trận và tương đối ít trong các vectơ. Ví dụ, đối với các phần tử 3d Taylor-Hood cho phương trình Stokes, bạn có vài trăm phần tử mỗi hàng trong ma trận và điều này vượt xa số lượng bộ nhớ cần thiết cho vectơ. Do đó, chúng tôi đã chơi với ý tưởng lưu trữ ma trận dưới dạng phao và vectơ như nhân đôi. Tôi không nhớ lại kết quả thời gian của chúng tôi nhưng tôi biết chắc chắn rằng chúng tôi chưa thấy có vấn đề gì với việc làm tròn, v.v ... Vì vậy, phương pháp này chắc chắn có hiệu quả.


Cảm ơn, giáo sư Bangerth. Còn đối với người giải ma trận lặp? Bạn có tăng tỷ lệ chính xác lên gấp đôi cho các sản phẩm vectơ ma trận hoặc thu nhỏ các phần tử vectơ thành đơn cho các bội số và sao lưu thành gấp đôi để tích lũy không?
Costis

Tôi tất nhiên đã nói về người giải quyết lặp đi lặp lại. Chúng tôi thực hiện tất cả các vectơ với độ chính xác gấp đôi (vì điều đó không quan trọng), vì vậy hoạt động dst = matrix src xảy ra như double = float double. Sự tích lũy sau đó xảy ra với độ chính xác gấp đôi, nhưng tôi thực sự rất ngạc nhiên nếu nó quan trọng.
Wolfgang Bangerth

Có một bài báo ở đâu đó (có lẽ từ 2 thập kỷ trở lại) chỉ ra rằng các sản phẩm chấm nên được thực hiện với độ chính xác cao hơn gấp đôi. Tôi không có tài liệu tham khảo tiện dụng, nhưng tôi sẽ xem liệu tôi có thể tìm thấy nó sau này không.
Bill Barth

Vâng, điều đó sẽ không làm tôi ngạc nhiên. Điều đó cũng phù hợp với những gì chúng tôi làm.
Wolfgang Bangerth

Bạn sử dụng quad chính xác cho các sản phẩm chấm? Nếu vậy, mát mẻ! Tôi đã không nghe nói rằng bất cứ ai đang làm điều này trong một thư viện.
Bill Barth


3

Lời khuyên của tôi sẽ là tập trung chủ yếu vào mức tiêu thụ bộ nhớ cho quyết định khi sử dụng độ chính xác đơn (float). Vì vậy, dữ liệu số lượng lớn cho tính toán FDTD nên sử dụng float, nhưng tôi sẽ giữ bản mô tả vấn đề (như hình học, tham số vật liệu, điều kiện kích thích) và tất cả dữ liệu meta có liên quan gấp đôi.

Tôi sẽ giữ tất cả các hiệu suất không chính xác và không phân tích sâu tính toán gấp đôi. Đặc biệt, tôi sẽ giữ dữ liệu đa giác và mô tả hình học khác gấp đôi (có thể là số nguyên nếu có thể), vì kinh nghiệm cho biết rằng bạn sẽ không bao giờ có được các phần hình học tính toán của mã của mình hoàn toàn mạnh mẽ, ngay cả khi về mặt lý thuyết là có thể.

Phần thứ ba tôi sẽ giữ lại là các tính toán phân tích, bao gồm các phím tắt sử dụng phân tách eigenvalue không đối xứng. Ví dụ, tôi có một hàm 2D đối xứng xoay được xác định bằng piecewise và tôi cần biến đổi Fourier của nó. Sẽ có nhiều cách khác nhau liên quan đến FFT và "bộ lọc thông thấp phân tích" thích hợp để làm cho nó "hiệu quả". Vì đó là hiệu suất không chính xác, tôi đã sử dụng biểu thức phân tích "chính xác" liên quan đến các hàm Bessel. Vì đây là một lối tắt để bắt đầu và tôi sẽ không dành thời gian để phân tích sự lan truyền lỗi của công thức phức tạp của mình, tốt hơn tôi nên sử dụng độ chính xác kép cho tính toán đó. (Hóa ra chỉ có một số biểu thức tương đương phân tích cho công thức là có thể sử dụng đượ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.