Liên kết tĩnh, động và đơn động có nghĩa là gì?


9

Tôi sử dụng Intel MKL cho BLAS và sử dụng Trình tư vấn dòng liên kết Intel MKL để được trợ giúp với các tùy chọn dòng lệnh.

Trình cố vấn cung cấp các tùy chọn cho Thư viện động tĩnh, động và đơn. Các thuật ngữ này có nghĩa là gì?

Đã có nhiều bài viết về SO liên quan đến vấn đề này nhưng tất cả chúng đều tập trung vào phát triển phần mềm thay vì mã khoa học / toán học. ( Cái này đặc biệt hữu ích)

  • Làm thế nào những điều khoản này có liên quan đến tính toán song song?
  • Cái này tốt hơn những cái khác phải không? (Tôi biết rằng tốt hơn sẽ cần được xác định chính xác hơn nhưng tôi không biết làm thế nào cho đến bây giờ)
  • Những gì được sử dụng phổ biến hơn và tại sao?
  • Lập trình viên cần xem xét gì khi liên kết?

Cũng như một lưu ý, nếu bạn chưa thấy nó, các trình biên dịch Intel mới hơn (tôi nghĩ phiên bản 11 trở lên) cung cấp -mklcờ sẽ loại bỏ nhu cầu sử dụng trình cố vấn dòng liên kết cho hầu hết các trường hợp.
Aesin

@Aesin, mình đã thắc mắc. Đó có phải là cách liên kết tối ưu nhất?
Thắc mắc

Thật không may, tôi không biết - thật sự tôi chưa thực hiện bất kỳ thử nghiệm nào và hướng dẫn không đi sâu vào bất kỳ chi tiết nào về những gì nó đang làm hoặc cách nó kết hợp với các tùy chọn khác. Nó không liên kết tĩnh MKL nếu bạn chỉ định -staticvà tự động liên kết nó nếu bạn không, mặc dù. Nó chắc chắn tốt hơn rất nhiều từ quan điểm dễ sử dụng, trong mọi trường hợp.
Aesin

Câu trả lời:


14

Các thuật ngữ liên kết tĩnhliên kết động không liên quan trực tiếp đến điện toán song song, mặc dù từ lâu, người ta đã biết rằng tải động (trái ngược với tải thực thi được biên dịch tĩnh) không mở rộng tốt trên các hệ thống tệp mạng do nặng tải siêu dữ liệu gây ra bởi các đường dẫn tải của trình tải động tìm kiếm cho các thư viện đích.

Thật khó để đưa ra tuyên bố chung về việc các thư viện tĩnh hay động tốt hơn trong điện toán hiệu năng cao. Chắc chắn đối với hầu hết các ứng dụng siêu máy tính, nó đơn giản hơn và được ưa thích để liên kết tĩnh. Tại sao lại thế này? Trên thế hệ siêu máy tính hiện tại, thường chỉ có một công việc chạy trên mỗi nút, điều này làm giảm mạnh bất kỳ lợi ích nào của việc giảm tiêu thụ bộ nhớ do các thư viện chia sẻ. Ngoài ra, các mã máy tính khoa học có xu hướng không quá phức tạp về các tính năng ngôn ngữ hoặc thiết kế chương trình và chúng hiếm khi sử dụng các tính năng ngôn ngữ yêu cầu tải động (như mô-đun plugin). Các thư viện động có thêm khó khăn là ít di động hơn trên các hệ điều hành so với các thư viện tĩnh.

Như một hệ quả của tất cả những điều này, hầu hết các hệ thống HPC sử dụng biên dịch tĩnh khi có sẵn. Các thư viện tĩnh được xem là nhanh hơn, dễ cài đặt và bảo trì hơn và thường mạnh mẽ hơn. Mã HPC dựa trên Python là một trong những trường hợp ngoại lệ cho vấn đề này, nhưng chúng vẫn phải chịu các vấn đề về hiệu suất liên quan đến tải động (một số người dùng trên scicomp đang thực sự giải quyết vấn đề này ngay bây giờ!).

Khi bạn chọn liên kết tĩnh so với liên kết động, bạn cần xem xét cách thức và nơi mã của bạn sẽ được triển khai, liệu các thư viện cơ bản có khả năng thay đổi hoặc di chuyển và đặc điểm hiệu suất của hệ thống tệp mạng của bạn. Bạn cũng nên đánh giá xem bạn có cần liên kết động hay không, thông qua sự phụ thuộc vào thư viện hoặc để tương tác với một ngôn ngữ kịch bản động như Python.

Thư viện động đơn là một thuật ngữ dành riêng cho Intel. Nó đề cập đến việc đóng gói các thư viện động của họ vào một thư viện meta duy nhất để đơn giản hóa quá trình liên kết. Nếu bạn sẽ sử dụng liên kết động với các thư viện Intel, hình thức này có thể được ưu tiên trừ khi bạn đang làm một việc gì đó phức tạp.


Câu trả lời tuyệt vời! Chỉ một điều nữa: tôi nhận ra liên kết động sẽ không cần thiết và sự lựa chọn sẽ là giữa động tĩnh và động đơn. Bạn nói rằng tôi nên chọn cái sau trừ khi tôi làm điều gì đó phức tạp (mà tôi thì không). Vậy, tôi có nên liên kết bằng Single Dynamic không? [FWiW, tôi đang làm việc với Phương pháp không gian con Krylov]
Cuộc điều tra

Lấy làm tiếc! Tôi có nghĩa là bạn nên sử dụng tĩnh theo mặc định nhưng thích động đơn hơn động.
Aron Ahmadia

Tôi đã thực hiện một số điểm chuẩn và tôi thấy: Dynamic : 0:42.92 Static : 0:42.93 Single Dynamic : 0:42.97trung bình trên 1000 giá trị.
Thắc mắc vào

1
Điều đáng chú ý là trên một số hệ thống HPC, bạn phải liên kết tĩnh - trên các hệ thống BlueGene / L, ví dụ như vậy, vì hệ điều hành giảm trên các nút tính toán không hỗ trợ liên kết động.
Aesin

1
Tôi hơi bối rối trước câu nói của bạn: "Trên thế hệ siêu máy tính hiện tại, thường chỉ có một công việc chạy trên mỗi nút, giúp giảm mạnh bất kỳ lợi ích nào của việc giảm tiêu thụ bộ nhớ do các thư viện chia sẻ." Ý của bạn là chỉ có một tiến trình cho mỗi nút? Tôi không chắc chắn làm thế nào một công việc trên mỗi nút ảnh hưởng đến tình hình. Khi liên kết tĩnh mỗi quy trình sẽ lưu trữ một bản sao đầy đủ của tệp thực thi có thể có ý nghĩa khi lõi trên mỗi bộ xử lý phát triển. Liên kết động sẽ chỉ yêu cầu một bản sao của thư viện động trên mỗi không gian bộ nhớ dùng chung.
andybauer
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.