Chi phí tính toán của là gì


26

Một trong những vấn đề chính mà chúng ta phải giải quyết trong các mô phỏng phân tử là việc tính toán các lực phụ thuộc vào khoảng cách. Nếu chúng ta có thể hạn chế các hàm lực và khoảng cách để có các lũy thừa của khoảng cách , thì chúng ta chỉ cần tính bình phương của khoảng cách và không phải lo lắng về . Tuy nhiên, nếu có các quyền hạn lẻ, thì chúng ta cần phải xử lý .r 2 = r r r r = rr2=rrrr=r2

Câu hỏi của tôi là: tính toán đắt như thế nào khi được triển khai trong các thư viện của các ngôn ngữ phổ biến (C / C ++, Fortran, Python), v.v.? Có thực sự có rất nhiều cải tiến hiệu suất cần có bằng cách điều chỉnh mã cho các kiến ​​trúc cụ thể không?x

Câu trả lời:


39

Là một phần mở rộng cho câu trả lời moyner của , về chip sqrtthường là một rsqrt, tức là một đối ứng căn bậc hai mà tính . Vì vậy, nếu trong mã của bạn, bạn sẽ chỉ sử dụng1/r(nếu bạn đang thực hiện động lực phân tử, bạn có thể), bạn có thể tính toántrực tiếp và tiết kiệm cho mình phép chia. Lý do tại saođược tính toán thay vìlà phép lặp Newton của nó không có phân chia, chỉ có phép cộng và phép nhân.a1/a1/rr = rsqrt(r2)rsqrtsqrt

Là một lưu ý phụ, các bộ phận cũng được tính toán lặp lại và hầu như chỉ chậm như rsqrttrong phần cứng. Nếu bạn đang tìm kiếm hiệu quả, tốt hơn hết là bạn nên cố gắng loại bỏ các phân chia không cần thiết.

Một số kiến ​​trúc hiện đại hơn như kiến ​​trúc POWER của IBM không cung cấp rsqrtper-se, nhưng ước tính chính xác đến một vài bit, ví dụ FRSQRTE . Khi người dùng gọi rsqrt, điều này tạo ra một ước tính và sau đó một hoặc hai lần (bao nhiêu là bắt buộc) thuật toán của Newton hoặc Goldschmidt bằng cách sử dụng phép nhân và phép cộng thông thường. Ưu điểm của phương pháp này là các bước lặp có thể được sắp xếp theo đường ống và xen kẽ với các hướng dẫn khác mà không chặn FPU (để biết tổng quan rất hay về khái niệm này, mặc dù trên các kiến ​​trúc cũ hơn, xem Luận án Tiến sĩ của Rolf Strebel ).

Đối với tiềm năng tương tác, sqrtcó thể tránh hoàn toàn thao tác bằng cách sử dụng phép nội suy đa thức của hàm tiềm năng, nhưng công việc của riêng tôi (được triển khai mdcore) trong lĩnh vực này cho thấy, ít nhất là trên các kiến ​​trúc kiểu x86, sqrthướng dẫn này đủ nhanh.

Cập nhật

Vì câu trả lời này dường như nhận được khá nhiều sự chú ý, tôi cũng muốn giải quyết phần thứ hai của câu hỏi của bạn, nghĩa là nó có thực sự đáng để thử cải thiện / loại bỏ các hoạt động cơ bản như sqrtkhông?

Trong bối cảnh mô phỏng Động lực học phân tử, hoặc bất kỳ mô phỏng dựa trên hạt nào với các tương tác giới hạn cắt, có rất nhiều điều có được từ các thuật toán tốt hơn cho việc tìm kiếm hàng xóm. Nếu bạn đang sử dụng danh sách Di động hoặc bất cứ thứ gì tương tự, để tìm hàng xóm hoặc tạo danh sách Verlet , bạn sẽ tính toán một số lượng lớn khoảng cách cặp đôi giả. Trong trường hợp ngây thơ, chỉ có 16% các cặp hạt được kiểm tra sẽ thực sự nằm trong khoảng cách giới hạn của nhau. Mặc dù không có tương tác nào được tính toán cho các cặp như vậy, nhưng việc truy cập dữ liệu hạt và tính toán khoảng cách theo cặp giả có chi phí lớn.

Công việc của riêng tôi trong lĩnh vực này ( ở đây , ở đâyở đây ), cũng như của những người khác (ví dụ ở đây ), cho thấy làm thế nào những tính toán giả này có thể tránh được. Các thuật toán tìm hàng xóm này thậm chí còn thực hiện các danh sách Verlet, như được mô tả ở đây .

Điểm tôi muốn nhấn mạnh là mặc dù có thể có một số cải tiến để đạt được từ việc biết / khai thác tốt hơn kiến ​​trúc phần cứng cơ bản, nhưng cũng có những lợi ích lớn hơn có thể có khi nghĩ lại các thuật toán cấp cao hơn.


6
SSE rsqrtpsvà AVX vrsqrtpscũng là ước tính, chúng nhận được 11 đến 12 bit đầu tiên chính xác và bạn nên tinh chỉnh bằng phép lặp Newton hoặc hai nếu bạn muốn độ chính xác cao hơn. Đây là các hướng dẫn 5/1 và 7/1 (độ trễ / thông lượng nghịch đảo) trên Sandy Bridge (xem bảng hướng dẫn của tài liệu Intel hoặc Agner Fog tương đương với phép nhân. Ngược lại, độ chính xác đầy đủ (v)sqrtps(hoặc độ chính xác kép (v)sqrtpd) mất 10-43 / 10-43 (xem bảng hướng dẫn để biết chi tiết).
Jed Brown

@JedBrown: Cảm ơn bạn đã chỉ ra điều đó! Tôi đã quên rằng SSE và các phần mở rộng của nó cũng cung cấp điều này.
Pedro

16

Căn bậc hai được triển khai trong phần cứng trên hầu hết các bộ xử lý, nghĩa là có các hướng dẫn lắp ráp cụ thể và hiệu suất phải tương đương với hầu hết các ngôn ngữ vì rất khó để thực hiện việc triển khai. Bạn có thể sẽ không bao giờ có thể đánh bại hướng dẫn của FSQRT, vì nó được thiết kế bởi một số nhà thiết kế phần cứng thông minh.

Cách thức triển khai trong phần cứng có thể khác nhau, nhưng có lẽ đó là một kiểu lặp điểm cố định, ví dụ phương pháp của Newton-Raphson có số lần lặp cụ thể cho đến khi số lượng chữ số được yêu cầu được tính toán. Các phương pháp lặp trong phần cứng nói chung chậm hơn nhiều so với các hoạt động khác, vì một số chu trình phải được hoàn thành trước khi kết quả sẵn sàng.

Ngoài ra còn có một số Hướng dẫn phát SIMD có thể được sử dụng trên các thanh ghi XMM để tính toán véc tơ nhanh được tìm thấy ở đây . Các thanh ghi này khá nhỏ, nhưng nếu bạn có số lượng tọa độ đã biết (giả sử, hệ tọa độ Cartesian ba chiều) thì chúng có thể nhanh hơn một chút.

Nếu ngôn ngữ của bạn đủ mức thấp, bạn luôn có thể đánh máy với độ chính xác thấp hơn hoặc sử dụng số chính xác thấp hơn cho tọa độ của mình. Độ chính xác đơn thường là nhiều hơn đủ tốt và từ những gì tôi nhớ sẽ nhanh hơn khi tính toán căn bậc hai vì các lần lặp có thể được chấm dứt trước đó.

Nó phải đủ dễ để đánh giá các ngôn ngữ khác nhau: Chỉ cần viết một chuỗi dài các số ngẫu nhiên vào một tệp, tải nó bằng các ngôn ngữ khác nhau và sau đó tính thời gian căn bậc hai.


0

Có thể có những cải tiến về hiệu suất, nhưng trước tiên bạn nên lập hồ sơ để biết rằng tính toán đối ứng của sqrt là cổ chai (và không, nói, tải các vị trí và lưu các lực lượng).

Dự án GROMACS MD đã nảy ra ý tưởng khai thác các chi tiết của định dạng dấu phẩy động của IEEE để tạo sơ đồ lặp lại Newton-Raphson để tính toán một xấp xỉ có thể chấp nhận được đối với căn bậc hai (xem Phụ lục B.3 của http: / /www.gromacs.org/Documentation/Manual ), nhưng không có CPU HPC nào được sử dụng trong đó GROMACS vẫn sử dụng ý tưởng này.

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.