Các thư viện song song bộ nhớ chia sẻ dựa trên tác vụ trong Khoa học máy tính


10

Trong những năm gần đây, một số thư viện / dự án phần mềm đã xuất hiện cung cấp một số dạng hoặc dạng song song của bộ nhớ chia sẻ dữ liệu theo mục đích chung.

Ý tưởng chính là thay vì viết một mã được phân luồng rõ ràng, các lập trình viên thực hiện các thuật toán của họ dưới dạng các tác vụ phụ thuộc lẫn nhau, sau đó được lên lịch động bởi một phần mềm trung gian có mục đích chung trên máy bộ nhớ dùng chung.

Ví dụ về các thư viện đó là:

  • QUARK : Được thiết kế ban đầu cho thư viện đại số tuyến tính song song MAGMA , dường như cũng được sử dụng cho Phương pháp Đa cực nhanh song song .

  • Cilk : Ban đầu là một dự án có trụ sở tại MIT, hiện được Intel hỗ trợ, được triển khai dưới dạng phần mở rộng ngôn ngữ / trình biên dịch sang C, được sử dụng trong phần mềm cờ vua máy tính Cilkchessthử nghiệm trong FFTW .

  • SMP superscalar : Được phát triển tại Trung tâm siêu máy tính Barcelona, ​​tương tự như Cilk ở nhiều khía cạnh, dựa trên các #pragmaphần mở rộng.

  • StarPU : Các "bộ mã" dựa trên thư viện tương tự có thể được biên dịch và lên lịch trên một số kiến ​​trúc khác nhau, bao gồm cả GPU.

  • Các tác vụ OpenMP: Kể từ phiên bản 3.0, OpenMP đã giới thiệu "các tác vụ" có thể được lên lịch không đồng bộ (xem Phần 2.7 của thông số kỹ thuật).

  • Các khối xây dựng luồng của Intel : Sử dụng các lớp C ++ để tạo và khởi chạy các tác vụ không đồng bộ, xem Phần 11 của Hướng dẫn.

  • OpenCL : Hỗ trợ song song dựa trên nhiệm vụ trên nhiều lõi.

Mặc dù có rất nhiều tài liệu mô tả hoạt động bên trong của các thư viện / phần mở rộng ngôn ngữ này và ứng dụng của chúng cho các vấn đề cụ thể, tôi chỉ bắt gặp rất ít ví dụ về chúng được sử dụng trong thực tế trong các ứng dụng máy tính khoa học.

Vì vậy, đây là câu hỏi: Có ai biết mã máy tính khoa học bằng cách sử dụng bất kỳ thư viện / phần mở rộng ngôn ngữ nào, hoặc tương tự, cho song song bộ nhớ chia sẻ không?


Bạn đang tìm kiếm song song dựa trên nhiệm vụ? Có một lý do nào khiến bạn bỏ qua OpenCL và Intel TBB? Tôi phải thừa nhận tôi không thể nói chính xác những gì bạn đang tìm kiếm ở đây.
Aron Ahmadia

1
@AronAhmadia: Sự thiếu hiểu biết, chủ yếu là ... :) Tôi đã thêm TBB và OpenCL vào danh sách, nhưng câu hỏi vẫn giống nhau: Có những thành phần này, tức là các thành phần dựa trên nhiệm vụ của chúng, được sử dụng trong bất kỳ phần mềm quan trọng nào cho khoa học tin học?
Pedro

Chúng tôi cảm thấy thế nào về việc biến câu hỏi này và câu trả lời của nó thành một wiki cộng đồng so với việc cố gắng đưa nó vào phạm vi xa hơn?
Aron Ahmadia

@AronAhmadia: Tôi hơi lo lắng rằng nếu tôi rời khỏi định dạng câu hỏi, điều này sẽ nhanh chóng thoái hóa thành các cuộc thảo luận dài về những lợi thế / bất lợi của lập trình dựa trên nhiệm vụ và / hoặc chia sẻ bộ nhớ nói chung. Tuy nhiên, tôi sẽ ủng hộ việc chuyển đổi nó sau khi nhận được thêm một vài câu trả lời.
Pedro

Tiêu đề không phù hợp. Câu hỏi này là về song song nhiệm vụ, không chia sẻ bộ nhớ.
Jeff

Câu trả lời:


8

deal.II sử dụng Khối xây dựng luồng trong toàn bộ thư viện và nói chung, chúng tôi rất hài lòng với nó. Chúng tôi đã xem xét một vài lựa chọn thay thế, đặc biệt là OpenMP vì mọi người dường như đang sử dụng mã đó cho các mã đơn giản hơn, nhưng thấy chúng thiếu. Đặc biệt, OpenMP có nhược điểm rất lớn là mô hình tác vụ của nó không cho phép bạn xử lý một tác vụ bạn đã bắt đầu và do đó rất khó truy cập trạng thái của một tác vụ (ví dụ như chờ hoàn thành) hoặc trả về giá trị của các chức năng bạn chạy trên một nhiệm vụ riêng biệt. OpenMP chủ yếu tốt cho việc song song các vòng lặp trong cùng nhưng bạn đạt được hiệu quả song song bằng cách song song các vòng lặp ngoài cùng , phức tạp và OpenMP không phải là công cụ cho điều đó trong khi TBB khá hợp lý cho điều đó.


Cảm ơn đã chỉ ra điều này, tôi đã không xem xét thỏa thuận.II! Có bất kỳ ấn phẩm hoặc mẩu tài liệu nào trong đó sử dụng TBB của deal.II được mô tả chi tiết không?
Pedro

Không có ấn phẩm, nhưng điều này có thể giúp: dealii.org/developer/doxygen/deal.II/group__threads.html
Wolfgang Bangerth

4

Theo tôi, các hệ thống này đã tương đối không thành công chủ yếu do các lý do sau đây.

  • Quan điểm ngây thơ rằng tính toán song song là về việc song song hóa tính toán (ví dụ flop) hơn là phơi bày địa phương bộ nhớ và loại bỏ các điểm đồng bộ hóa. Mặc dù một số vấn đề, chẳng hạn như thuật toán ma trận dày đặc, vẫn bị giới hạn FP, chỉ xảy ra sau khi xem xét cẩn thận hệ thống con bộ nhớ và hầu hết các hạt nhân tính toán (đặc biệt là trong thế giới PDE) nhạy cảm hơn với bộ nhớ. Hàng đợi công việc có xu hướng trao đổi địa phương bộ nhớ để có sự cân bằng ngây thơ tốt hơn và hoạt động bộ nhớ nguyên tử nhiều hơn (do đồng bộ hóa thông qua hàng đợi).
  • Sự phụ thuộc vào quá trình phân hủy quá mức cho cân bằng tải động với chi phí khả năng mở rộng mạnh mẽ. Nhiệm vụ thường có phụ thuộc dữ liệu chồng chéo (giá trị ma). Khi kích thước của nội thất co lại, tỷ lệ ma / nội thất tăng lên. Ngay cả khi điều này không ngụ ý công việc dư thừa, nó ngụ ý tăng chuyển động bộ nhớ. Có thể giảm đáng kể các yêu cầu về băng thông bộ nhớ bằng các cách tiếp cận như tìm nạp trước hợp tác bằng cách nhiều luồng chia sẻ bộ đệm L1 hoặc L2 bằng cách tìm nạp trước phần mềm cho hàng xóm của chúng (điều này hoàn toàn giữ cho nhóm các luồng gần nhau). Điều này hoàn toàn ngược lại với sự phân hủy quá mức.
  • Hiệu suất không thể đoán trước, chủ yếu là do các vấn đề liên quan đến bộ nhớ ở trên.
  • Thiếu các thành phần thân thiện với thư viện. Điều này gần như có thể được tóm tắt là không có sự tương tự MPI_Commcho phép các thư viện khác nhau thực hiện các hoạt động phong phú mà không cần va chạm, cũng như vượt qua bối cảnh giữa các thư viện và khôi phục các thuộc tính cần thiết. Sự trừu tượng được cung cấp bởi "bộ truyền thông" rất quan trọng đối với thành phần thư viện bất kể sử dụng bộ nhớ chia sẻ hay phân tán.

Tôi có thể đang hiểu nhầm câu trả lời của bạn, nhưng điểm đầu tiên hoàn toàn ngược lại với những gì mà Buttari, Kurzak, Dongarra và những người khác đã thể hiện với MAGMA, một thư viện bộ nhớ chia sẻ dựa trên nhiệm vụ cho đại số tuyến tính dày đặc ... Ngoài ra, ở điểm thứ hai của bạn bạn đề cập đến dữ liệu chồng chéo, tức là các giá trị ma và tỷ lệ bề mặt trên thể tích, nhưng đây là các giá trị giữ lại từ các sơ đồ phân rã miền bộ nhớ phân tán. Bản thân tôi làm việc với các phương pháp như vậy cho các mã dựa trên hạt và tôi có hiệu suất tốt hơn nhiều so với triển khai song song dựa trên MPI.
Pedro

Câu hỏi, trong mọi trường hợp, là một câu hỏi khác ... Bạn có biết về bất kỳ dự án phần mềm máy tính khoa học nào sử dụng các phương pháp này không?
Pedro

1. Có một số dự án sử dụng các hệ thống này, nhưng tôi không nghĩ rằng phương pháp này có thể được coi là "thành công". 2. Các phụ thuộc vẫn còn chồng chéo trong bộ nhớ chia sẻ. Nhìn vào cách tcmalloc hoặc nhân Linux làm cho các luồng độc lập hơn để tránh các tắc nghẽn như đồng bộ hóa thông qua các nguyên tử. Không gian địa chỉ dùng chung không có nghĩa là bạn nên vận hành như thể bạn có bộ nhớ thống nhất hoặc bạn nên coi nguyên tử là không tốn kém.
Jed Brown

3. Tôi không biết "so sánh công bằng" mà bạn dự định trích dẫn là gì, nhưng PLASMA chỉ nhận được khoảng 25% FPU cao điểm (ví dụ: slide 5 của hpcgarage.org/cscads2012/Luszczek-UTK-PowerTools.pdf ) xấu hoàn toàn cho hoạt động tương tự trong bộ nhớ phân tán, nơi ít nhất 70% đỉnh sẽ được mong đợi. Đại số tuyến tính dày đặc là trường hợp giới hạn của FPU mà tôi đặc biệt trích dẫn là một ngoại lệ có thể xảy ra, nhưng mặc dù có kích thước ma trận rất lớn, PLASMA rõ ràng không bị ràng buộc bởi FPU.
Jed Brown

Pedro, hầu hết các vật lý đều có thành phần tầm xa, vì vậy các hạt được kết hợp với một bản cập nhật chịu tác động từ bề mặt đến chất tan ở trên (PPPM, hạt xoáy, v.v.)
Matt Knepley
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.